Как я могу создать элемент Apache Axiom из объекта E4X из скрипта, запущенного в Rhino? - PullRequest
0 голосов
/ 24 июня 2010

Я запускаю скрипт, работающий на Rhino, который создает объект E4X, например:

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

Я хочу включить такой XML в сообщение SOAP. Я использую Apache Axis 2 ServiceClient для создания мыльного сообщения. То, что я ищу, - это способ преобразования объекта E4X xml в элемент Apache AXIOM, чтобы его можно было добавить в сообщение SOAP с помощью вызова:

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

1 Ответ

0 голосов
/ 24 июня 2010

Пока что кажется, что преобразование объекта 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). Следующий код может быть использован для создания OMElement, представляющего SOAPHeader:

CharArrayDataSource arrayDataSource = new CharArrayDataSource(contentXML.toCharArray());
SOAPFactory factory =  OMAbstractFactory.getSOAP12Factory();
SOAPHeaderBlock soapHeader = factory.createSOAPHeaderBlock(headerName, factory.createOMNamespace(namespace, nameSpacePrefix), arrayDataSource);
service.addHeader(soapHeader);
...