2009-03-07 7 views
-2

Ich bin ein bisschen rostig in meinem Java, und das ist mein erstes Mal mit Metro/JAX-WS, also wenn das eine dumme Frage ist, entschuldige ich mich..NET Webservice in Java (Metro) konsumieren - XMLNode/XMLDocument Verbrauch?

Ich muss einen Client schreiben, der einen .NET Webservice verbraucht. Ich habe die Grundlagen unten; Ich habe die Wrapper aus der WSDL generiert, und ich kann mein Objekt und Port erstellen und einen Anruf tätigen und eine Antwort erhalten.

Die Rückgabewerte des Webservice sind fast alle XmlDocument oder XmlNode. Wie bekomme ich von dem wsimport-generierten "UserGetWidgetsResponse.UserGetWidgetsResult" zu dem tatsächlichen XML zurück, der von dem Aufruf zurückgegeben wird?

Ich habe eine Reihe dieser Dienste mit einer Reihe von Methoden, so hoffe ich, eine Lösung zu finden, die die generierten Wrapper in keiner Weise ändern muss. Ich habe auch keine Kontrolle über die Informationen, die von den Webdiensten zurückgegeben werden.

+0

Sind Sie sicher, dass Sie XmlNode und XmlDocument auf der Java-Seite bekommen? Diese Begriffe scheinen C# zu sein. Diese Bemerkung mag dumm klingen, aber es gibt eine Menge XML-Parser, und alle verhalten sich anders :) – extraneon

+0

Nun, XmlNode/XmlDocument haben direkte Entsprechungen zu Javas Document- und Node-Objekten. Die Rückgabe von XmlNode/XmlDocuments aus WS ist eine von MS vorgeschlagene Methode zur Rückgabe komplexer Daten. Dies scheint in der WSDL korrekt als "beliebige" Daten zu erscheinen, ich bin mir einfach nicht sicher, wie ich es auf der Java-Seite abholen soll. – Joe

+0

Es scheint mir, dass Sie die Payload der LocalMessage von irgendwo abrufen müssen. Wenn Sie den LogicalMessageContext erhalten, sind Sie im Geschäft. Vielleicht gibt dp.getRequestContext() eins zurück. Kann Ihnen nicht weiter helfen, wenn überhaupt, da ich normalerweise keine Bindungen erzeuge, sondern die XML direkt handhabe. – extraneon

Antwort

1

fand ich eine Lösung für dieses Problem über das Wochenende, aber ich bin nicht sicher, ob es die richtige Lösung ist:

UserGetDevicesResponse.UserGetDevicesResult j = dp.userGetDevices(); 
    List<Object> n = j.getContent(); 
    if (n.size() > 0) 
    { 
     Node z = (Node)n.get(0); 
     System.out.println(nodeToString(z)); 
    } 

Das mir das Dokument XML-Antwort gibt, das ist das, was ich suche. Ich kann dann tun, was ich will, um die gesuchten Daten zu extrahieren.