2009-02-23 12 views
2

Je suis en train d'accéder à un service Web avec JAX-WS en utilisant:Accès au contenu d'un JAX-WS Dispatch Réponse

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)); 

où:

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; 
} 

Quelle est la bonne façon accéder au contenu de la réponse, par ex. obtenir le contenu d'un élément spécifique dans la réponse?

Tous les exemples disponibles juste imprimer la réponse XML complète :(

Répondre

1

Essayez d'utiliser # Transformateur transform() avec un DOMResult puis utilisez le nœud résultant.

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 
} 
+0

bien que cela fonctionne, il serait être riche en mémoire. –