2013-03-21 25 views
2

問題:如果同時使用EJB注入,則在一個項目中使用REST服務和SIP Servlet會導致異常。sip servlet/rest服務項目中的Mobicent EJB注入

哪些步驟會重現該問題?

  1. 在項目添加SIP Servlet和REST服務(REST服務經由類延伸的應用活化並與註釋@ApplicationPath,這是Java EE 6「沒有XML」的方式,激活JAX-RS)

  2. 使用REST服務和/或SIP servlet不會產生任何錯誤。

  3. 通過@EJB向項目添加一個注入服務。

  4. 在下列異常使用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服務時也不會有錯誤。

回答

1

有2種解決方案。您要等到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

+0

你好,有人解決了這個?我在融合的WEB/SIP應用程序中面臨同樣的問題。如果該應用程序甚至有一個sip servlet,那麼任何servlet或受管bean中的EJB注入都將不起作用。我將MSS-JBoss 7.1.2焊接核心升級到了weld-core-1.1.16,但沒有任何區別。謝謝。 – icordoba 2013-10-27 22:51:20

0

我正在MSS-3.0.0-快照的JBoss -as7.1.3.Final,並通過向EJB注入@EJB而不是@Inject(並移除beans.xml文件)來解決此問題。我的應用程序被部署爲由多個模塊組裝而成的EAR:EJB,SIP servlet,Web servlet和JAX-RS/RESTEasy應用程序和資源(打包在一起)。