Доступ к содержимому ответа JAX-WS Dispatch Response - PullRequest
2 голосов
/ 23 февраля 2009

Я пытаюсь получить доступ к веб-сервису с помощью JAX-WS, используя:

Dispatch<Source> sourceDispatch = null;
sourceDispatch = service.createDispatch(portQName, Source.class, Service.Mode.PAYLOAD);
Source result = sourceDispatch.invoke(new StreamSource(new StringReader(req)));
System.out.println(sourceToXMLString(result));

где:

private static String sourceToXMLString(Source result) {
    String xmlResult = null;
    try {
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        transformer.setOutputProperty(OutputKeys.METHOD, "xml");
        //transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
        OutputStream out = new ByteArrayOutputStream();
        StreamResult streamResult = new StreamResult();
        streamResult.setOutputStream(out);
        transformer.transform(result, streamResult);
        xmlResult = streamResult.getOutputStream().toString();
    } catch (TransformerException e) {
        e.printStackTrace();
    }
    return xmlResult;
}

Как правильно получить доступ к содержанию ответа, например. получить содержимое определенного элемента в ответе ?

Все доступные примеры просто выводят полный XML-ответ: (

1 Ответ

1 голос
/ 27 февраля 2009

Попробуйте использовать Transformer # transform () с DOMResult, а затем используйте полученный узел.

private static void sourceToXML(Source result) {
    Node rootNode= null;
    try {
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        DOMResult domResult = new DOMResult();
        transformer.transform(result, domResult );
        rootNode = domResult.getNode()
    } catch (TransformerException e) {
        e.printStackTrace();
    }
    // Process rootNode here
}
...