3 Stimmen

Der Webdienst liefert eine vollständige, korrekte Antwort, aber die Antwortquelle ist leer.

Ich verwende einen Dispatch-Client, um auf einen Webdienst zuzugreifen. Alle meine Parameter sind korrekt, es gibt keine Fehler und beim Prüfen der Antwort mit Wireshark sehe ich definitiv, dass die richtige Antwort auf der Netzwerkebene empfangen wird. Aber auf der Java-Anwendungsebene ist meine Antwortquelle leer.

public void testDispatch(QName serviceName, QName portName, String endpointAddress, String action) throws Exception {

    Service service = Service.create(serviceName);
    service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);

    String requestXml = buildRequestXml();

    Dispatch dispatch = service.createDispatch(portName, Source.class, Service.Mode.MESSAGE);
    dispatch.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, action);

    Source request = new StreamSource(new StringReader(requestXml));
    Source response = dispatch.invoke(request);

    Transformer copier = TransformerFactory.newInstance().newTransformer();
    copier.transform(response, new StreamResult(System.out)); 

}

Ich habe versucht, zu einem DOMResult zu transformieren, dasselbe, eine leere Wurzelknoten. Irgendwelche Ideen?

0voto

snowflake Punkte 1752

Ich würde den Service mit Proxy API aufrufen und dann die Soap-Nachrichten vergleichen.

Es kann einen Unterschied in den Namespaces geben, der das ordnungsgemäße Unmarshalling durch JAXB verhindert.

0voto

shuttle Punkte 153

Meine Arbeitslösung für das Problem:

StreamResult xmlOutput = new StreamResult(new StringWriter());
Transformer copier = TransformerFactory.newInstance().newTransformer();
copier.transform(responseStream, xmlOutput);
System.out.println(xmlOutput.getWriter().toString());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X