0

我正在运行一个在 Rhino 中运行的脚本,它会创建一个像这样的 E4X 对象:

var s =     <product id="123">
                    <name>Google Search</name>
                    <source>https://google.com</source>
            </product>

我想在 SOAP 消息中包含这样的 XML。我正在使用Apache Axis 2 ServiceClient创建肥皂消息。我正在寻找一种将 E4X xml 对象转换为 Apache AXIOM 元素的方法,以便可以通过调用将其添加到 SOAP 消息中:

ServiceClient.addHeader(org.apache.axiom.om.OMElement omElement)

4

1 回答 1

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);
于 2010-06-24T19:51:49.537 回答