在sip servlet / rest服务项目中的Mobicent EJB Injection

时间:2013-03-21 11:12:38

标签: java rest ejb jboss7.x sip

问题:如果还使用了通过EJB注入,则在一个项目中使用REST服务和SIP Servlet会导致异常。

哪些步骤会重现这个问题?

  1. 在项目中添加Sip Servlet和REST服务(REST服务通过扩展Application的类激活,并使用@ ApplicationPath注释,这是Java EE 6“无XML”方法,激活JAX -RS)

  2. 使用REST服务和/或SIP servlet不会产生任何错误。

  3. 通过@EJB将注入的服务添加到项目中。

  4. 使用REST服务会导致以下异常:

  5. 错误:

    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服务也没有错误。

2 个答案:

答案 0 :(得分:1)

有两种解决方案。等到weld-core-1.1.8.FINAL.jar更新!或者你得到源代码并在org.jboss.weld.context.AbstractBoundContext中进行硬性修复:

public void deactivate() {
if (getBeanStore() != null )
{ getBeanStore().detach(); super.deactivate(); }
}

有关详细信息,请参阅https://issues.jboss.org/browse/WELD-1020?_sscc=t

答案 1 :(得分:0)

我正在运行mss-3.0.0-SNAPSHOT-jboss-as-7.1.3.Final,并通过使用@EJB而不是@Inject(并删除beans.xml文件)注入EJB来解决此问题

我的应用程序部署为从多个模块组装的EAR:EJB,SIP servlet,Web servlet和JAX-RS / RESTEasy应用程序和资源(打包在一起)。