0

我正在尝试使用大型 XML 正文创建 SOAP 消息。XML 正文来自输入流,而 SOAP 消息是手动创建的。如何使用 AXIOM 创建消息而不将整个 XML 正文加载到内存中。我开始的代码是:

// "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 );

有没有人有更好的方法来做到这一点?

4

1 回答 1

1

Axiom 的最新版本具有该getDocumentElement方法的变体,可让您完全按照您的要求进行操作:

http://ws.apache.org/axiom/apidocs/org/apache/axiom/om/OMXMLParserWrapper.html#getDocumentElement(boolean )

于 2012-12-19T08:55:17.153 回答