0

次のような E4X オブジェクトを作成するスクリプトを Rhino で実行しています。

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

このような XML を SOAP メッセージに含めたいと考えています。SOAP メッセージの作成にApache Axis 2 ServiceClientを使用しています。私が探しているのは、E4X xml オブジェクトを Apache AXIOM 要素に変換して、次の呼び出しを介して SOAP メッセージに追加できるようにする方法です。

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

4

1 に答える 1

0

これまでのところ、E4X オブジェクトを String に変換してから StAXOMBuilder (またはそのサブクラスの 1 つ) を使用するのが最も簡単なオプションのようです。

  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 に答える