2013-11-21 80 views
1

我正在試驗服務器發送的事件。我正在關注這個鏈接https://jersey.java.net/documentation/latest/user-guide.html#d0e8376。當我向代表服務器發送事件的資源發出請求時,我得到500內部服務器錯誤。澤西島和weblogic服務器發送的事件

根據以下錯誤,我必須爲org.glassfish.jersey.media.sse.EventOutput註冊正文作者。但是,怎麼做呢?

####<21 Nov, 2013 3:17:28 PM IST> <Error> <com.sun.jersey.spi.container.ContainerResponse> <Laptop1> <AdminServer> <[ACTIVE] ExecuteThread: '16' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1385027248248> <BEA-000000> <Mapped exception to response: 500 (Internal Server Error) 
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class org.glassfish.jersey.media.sse.EventOutput, and Java type class org.glassfish.jersey.media.sse.EventOutput, and MIME media type text/event-stream was not found 
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:285) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1479) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381) 
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716) 
    at weblogic.jaxrs.server.portable.servlet.ServletContainer.service(ServletContainer.java:218) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:844) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254) 
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:341) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:238) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3363) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3333) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
    at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2220) 
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2146) 
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2124) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1564) 
    at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:254) 
Caused By: com.sun.jersey.api.MessageException: A message body writer for Java class org.glassfish.jersey.media.sse.EventOutput, and Java type class org.glassfish.jersey.media.sse.EventOutput, and MIME media type text/event-stream was not found 
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:285) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1479) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381) 
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716) 
    at weblogic.jaxrs.server.portable.servlet.ServletContainer.service(ServletContainer.java:218) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:844) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254) 
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:341) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:238) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3363) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3333) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
    at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2220) 
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2146) 
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2124) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1564) 
    at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:254) 

回答

0

下面是我自己的問題的解決方案。

要註冊SseFeature,應該在Application派生類中重寫getSingletons方法,如下面的代碼所示。

@javax.ws.rs.ApplicationPath("webresources") 
public class ApplicationConfig extends Application { 

    //.... 

    @Override 
    public Set<Object> getSingletons() { 
     Set<Object> singletons = super.getSingletons(); 
     if(singletons == null){ 
      singletons=new java.util.HashSet<Object>(); 
     } 
     singletons.add(new SseFeature()); 
     return singletons; 
    } 

    //.... 

} 
+1

老問題,但你只需要添加的功能,這樣的'''寄存器( SseFeature.class)''' – Quaiks