2012-03-01 28 views
2

問題陳述: 目前,有兩個要求,即在SOAP錯誤中具有正確填充的「」元素,並儘可能地在SOAP請求和SOAP響應之間進行匹配爲Axis Web Service提供遷移前和遷移後的CXF Web服務。CXF - 集合中的架構名稱衝突

對於上述的第一需要,我們探討了以下選項:

  1. 我們配置的自定義攔截器類CXF根據需要將處理SOAP錯誤。我們還修改了服務實現中的方法,使「元素的內容可以直接在Java代碼中設置。但是,我們遇到了與JAXB上下文無法將Java異常正確解組到SOAP錯誤中有關的問題我們創建了兩個新類,一個作爲異常的實際容器作爲簡單Java bean,另一個作爲它的擴展Java異常類的包裝器。我們在服務實現中使用了異常包裝類來允許將應用程序異常轉換爲SOAP Fault。但是,我們遇到了這些類未被JAXB上下文所知的問題
  2. 我們嘗試使用wsdl2java工具爲JAX-WS和JAXB生成各種工件 - 我們引入了更改以指定XSD片段中的SOAP Fault可用(即來自Axis/WebLogic的遺留)WSDL,並使用JAXB構件,特別是處理JAXB上下文的ObjectFactory和DamageCatalogElementArray類。發佈這個,我們遇到了錯誤,即各種XML類型,即它們相應的類引用未定義爲指定的命名空間
  3. 我們使各個類中使用的名稱空間(QName實例)保持一致並使用另一個類package-info來指定模式映射與包結構。此時,我們收到集合中的特定類的數組的方案衝突錯誤,即服務實現方法中的DamageCatalogElement,與類類相關的catalogDamage(),DamageCatalogElementArray。這是因爲在服務實現這個方法的返回類型爲類型的數組,DamageCatalogElement而當我們在ObjectFactory的返回JAXBElement實例,我們必須使用類,DamageCatalogElementArray

我們正在使用CXF 2.4。 2,JDK1.6,JBoss AS 4.2。 任何幫助或指針將不勝感激!

回答

1

最後我們解決了這個問題。 訣竅是,通過提供Axis的WSDL並替換遺留代碼中的JAXB相關類,使用CXF工具wsdl2java生成類。 雖然這樣做,我們需要做一些重構,但這很好。 當我們把生成的類,一切工作正常。 :)