2009-10-13 28 views
1

我有一個基於Axis2的遺留Java webservice。這個web服務類包括:Axis2:從強類型響應類中提取顯式XML?

  • 服務接口(從WSDL生成);
  • 該服務的實施(內部編寫);
  • 一堆自動生成的類實體類表示請求和響應。

我還需要提取和緩存XML響應的一部分(最終將文件系統作爲格式良好的文檔)。我一直在對用於序列化的響應類的getOMElement()方法進行黑客攻擊,但無濟於事。反序列化看起來更容易,因爲生成的類都有一個靜態成員,它將XML帶入並生成對象。

如何將強類型對象圖的一個子集序列化爲XML,以便生成的Axis2 Factory可以隨後進行反序列化?

ps:我被Axis2卡住了。是的,這是很容易與(比如說)XFire軟件...

回答

1

爲了完整起見,這裏的解決方案,我終於想出了...

對象 - > XML(這是不是很好):

// in this case, response is the Axis2 generated class at the root 
// of the webservice response 
String xml = response.getOMElement(null, null).toString(); 

XML - >對象(僅略少令人不快的):

// xml is the string we created earlier 
XMLStreamReader reader = XMLInputFactory 
           .newInstance() 
           .createXMLStreamReader(new StringReader(xml)); 

// WebserviceResponse is the class generated by Axis2   
return WebserviceResponse.Factory.parse(reader); 

這些方法都不是很好,但至少他們是功能(,周圍環繞着嚴重的單元測試...)。