我正在运行一个在Rhino中运行的脚本,它创建一个像这样的E4X对象:
var s = <product id="123">
<name>Google Search</name>
<source>https://google.com</source>
</product>
我想在SOAP消息中包含这样的XML。我正在使用Apache Axis 2 ServiceClient来创建soap消息。我正在寻找的是一种将E4X xml对象转换为Apache AXIOM元素的方法,以便通过调用将其添加到SOAP消息中:
ServiceClient.addHeader(org.apache.axiom.om.OMElement omElement)
答案 0 :(得分:0)
到目前为止,似乎将E4X对象转换为String然后使用StAXOMBuilder(或其中一个子类)是最简单的选择。
XMLInputFactory xif= XMLInputFactory.newInstance();
XMLStreamReader reader= xif.createXMLStreamReader(new StringReader(stringFromRhinoE4X));
StAXOMBuilder builder=new StAXOMBuilder(reader);
OMElement header= builder.getDocumentElement();
编辑:虽然上面的代码有效,但生成的OMElement无法传递给ServiceClient.addHeader(org.apache.axiom.om.OMElement omElement)。以下代码可用于创建表示SOAPHeader的OMElement:
CharArrayDataSource arrayDataSource = new CharArrayDataSource(contentXML.toCharArray());
SOAPFactory factory = OMAbstractFactory.getSOAP12Factory();
SOAPHeaderBlock soapHeader = factory.createSOAPHeaderBlock(headerName, factory.createOMNamespace(namespace, nameSpacePrefix), arrayDataSource);
service.addHeader(soapHeader);