问题:在一个项目中使用 REST 服务和 SIP Servlet 会导致异常,如果还使用通过 EJB 的注入。
哪些步骤将重现该问题?
在项目中添加 Sip Servlet 和 REST 服务(REST 服务通过扩展 Application 的类激活并使用 @ 注释
ApplicationPath
,这是 Java EE 6“无 XML”方法,激活 JAX-RS)使用 REST 服务和/或 SIP servlet 不会产生任何错误。
通过@EJB 将注入的服务添加到项目中。
使用 REST 服务会导致以下异常:
错误:
Exception sending request destroyed lifecycle event to listener instance of class org.jboss.weld.servlet.WeldListener: java.lang.NullPointerException
at org.jboss.weld.context.AbstractBoundContext.deactivate(AbstractBoundContext.java:71) [weld-core-1.1.8.Final.jar:2012-04-29 10:45]
at org.jboss.weld.context.http.HttpRequestContextImpl.deactivate(HttpRequestContextImpl.java:86) [weld-core-1.1.8.Final.jar:2012-04-29 10:45]
at org.jboss.weld.servlet.WeldListener.requestDestroyed(WeldListener.java:103) [weld-core-1.1.8.Final.jar:2012-04-29 10:45]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) [jbossweb-7.0.16.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.16.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.16.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.16.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.16.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) [jbossweb-7.0.16.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) [jbossweb-7.0.16.Final.jar:]
at java.lang.Thread.run(Thread.java:680) [classes.jar:1.6.0_37]
我在用:
- Mobicents:mss-2.0.0.FINAL-jboss-as-7.1.2.Final
- 操作系统:Mac OS X 10.6.8、Ubuntu 12.04、Windows 8
我还将问题发布到Google Code,其中已上传测试项目并可用于运行实际测试用例。src/test/java 中有一个测试文件正在调用部署的 REST 服务。在原始项目中,这应该会导致上述错误。
如果 SIP Servlet 未激活(例如通过重命名 sip.xml),调用 REST 服务时不会发生错误。
如果 SIP Servlet 被激活并且注入的服务HelloWorldService
被移除,那么调用 REST 服务也不会出错。