2012-09-26 42 views
2

在JAX-WS SE類中,我有一個字段,我注入了一個@Resource以最終獲取客戶端的IP地址。一切正常,直到我做這個SE一個CDI託管bean@Resource沒有注入到JAX-WS SE中,這是一個CDI管理bean

@WebService 
public class AImpl implements A { 

    @Resource 
    private WebServiceContext wsContext; 

    @Inject 
    private ADelegated delegated; 

     ... 
} 

我在WebLogic 12C部署這個程序,我得到這個錯誤

java.lang.IllegalArgumentException: Can not set javax.xml.ws.WebServiceContext field AImpl.wsContext to weblogic.jndi.internal.WLEventContextImpl 

什麼是我的代碼不正確的?

在此先感謝您的幫助。

回答

2

據我所知,JAX-WS沒有任何CDI集成。看起來發生的事情是CDI正在創建你的bean而不是JAX-WS,而且注入混合起來。

+0

說:「JAX-WS沒有任何CDI集成據我所知,」我不知道這麼認爲......如果JAX-WS不能與CDI一起工作,最終將在2012年12月發佈,因爲Mayas的預測! ;-)我目前正在一個將JAX-WS與CDI混合的大型項目中工作。當我需要獲取JAX-WS環境上下文來分析請求信息時,問題就開始了。 –

+1

好的,太棒了!我不知道它的確如此。我不認爲這個規範中有一個MR包含CDI ......哦等等,CDI規範有關於JAX-WS的一些細節,我的不好:)對不起,我只記得。 – LightGuard

2

我找到了解決方案(藉助Oracle論壇人員)。

通過添加屬性「名稱」的,以@Resource註解問題解決了:

@WebService 
public class AImpl implements A { 

    @Resource(name="wsContext") 
    private WebServiceContext wsContext; 

    @Inject 
    private ADelegated delegated; 

     ... 
} 
+1

我在JBoss-as-7.1.1.Final中測試了原始應用(沒有'name'屬性)以安撫我,並且它工作正常。所以,這似乎是一個WebLogic的錯誤。 –

相關問題