2011-05-10 74 views
2

我正在使用axis2公開一個現有類的方法作爲web服務(自下而上的方法)。該方法將一個複雜對象(非基本類型)作爲參數,並返回一個複雜對象。Axis2 web服務,自下而上的方法,複雜的對象

我知道axis2會試圖在wsdl文件中爲我生成模式,當我將該方法作爲Web服務公開時,我可以通過訪問Web服務url並將?wsdl追加到末尾來獲取wsdl文件的。

但仔細研究之後,參數中複雜類型的某些屬性在結果wsdl的模式部分中表示爲xs:anyType。轉換爲xs:anyType的屬性是List。這樣做的壞處是,當我爲客戶端代碼生成存根代碼時,設置該特定屬性的方法簽名會將一個對象作爲參數,即setAttribute(Object obj)。

所以我的解決方案是使用JAXB 2.0來生成我需要的類的xml模式,然後將xsd導入由axis2生成的wsdl文件(從web服務url +?wsdl下載)並使用編輯後的wsdl而不是自動生成的wsdl。這個解決方案似乎對客戶端來說工作得很好。用於設置由存根代碼生成的屬性的方法簽名將採用適當的類型,即setAttribute(AnotherComplexType abcd)。通過使用tcpmon,我可以看到從客戶端發送到服務器的xml似乎是正確的。

但是,這種方法對於服務器端來說效果不好,因爲axis2不使用JAXB 2.0註釋將接收到的xml轉換回到暴露的方法能夠處理的類中。

我的問題是,有無論如何解決我的問題?我可以想到的可能的方法是修改axis2在接收到xml後處理它的方式(如果確實有辦法,我可以手動處理它),或者使axis2在JAXB 2.0註釋中正常工作?或者,也許還有其他想法?

注:我沒有使用Axis2

回答

1

在我解決了這個自己最終的JAX-WS的一部分。我使用wsdl生成服務器端的存根代碼,修改messageReceivers以使用生成的消息接收器,編寫一個實現生成的接口的包裝類,編寫一個轉換器將對象從生成的類型轉換爲包裝類的參數方法將暴露給我的內部類型,並暴露包裝類。

+0

嗨你可以發佈這個代碼。我面臨同樣的問題 – samir 2016-01-13 15:04:03

+0

嗨,這是很久以前,我已經失去了所有這些舊數據 – Hery 2016-01-23 02:41:08