我正在尝试使用大型 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 );
有没有人有更好的方法来做到这一点?