2012-12-19 52 views
0

我正在嘗試創建一個大型XML主體的SOAP消息。 XML主體來自輸入流,SOAP消息是手動創建的。如何在不將整個XML主體加載到內存的情況下使用AXIOM創建消息。我開始的代碼是:創建一個大型機構的AXIOM SOAP消息

// "in" contains SOAP body 
final OMXMLParserWrapper payloadBuilder = OMXMLBuilderFactory.createOMBuilder(in); 
final OMElement payloadElement = payloadBuilder.getDocumentElement(); 

final SOAPEnvelope soapEnvelope = msgContext.getEnvelope(); 
soapEnvelope.getBody().addChild(payloadElement); 

然而,這種加載整個XML主體到內存(payloadElement.detach()被稱爲的addChild()一部分)。

什麼是這種合併AXIOM模型的推薦方式?

我已經修改了我的代碼,如下所示,使得這個工作無需加載整個XML主體。但是我對解決方案不滿意,因爲它使用實現類而不是公共API。

final OMXMLParserWrapper payloadBuilder = OMXMLBuilderFactory.createOMBuilder(in); 
final OMNodeEx payloadElement = (OMNodeEx)payloadBuilder.getDocumentElement(); 
payloadElement.setParent(null); 

final SOAPEnvelope soapEnvelope = msgContext.getEnvelope(); 
final OMElementImpl soapBody = (OMElementImpl)soapEnvelope.getBody(); 
soapBody.addChild(payloadElement, true); 

有沒有人有更好的方式做到這一點?

回答