2009-06-24 7 views
2

Ich muss einen Webdienst von Drittanbietern verwenden, der in .NET 2.0 implementiert ist (natürlich auf IIS).HOWTO überschreiben Axis2 Request-Header für .NET-Web-Service?

Ich muss einen Java-Client machen. Ich verwende wsdl2java, um den SOAP-Stub zu generieren.

Da das ursprüngliche Apache Axis-Projekt nun nicht mehr gewartet wird und ich einige Probleme beim Parsen einiger Antworten vom Dienst hatte, konvertierte ich den Client, um die neueste (1.5) Version von Axis2 zu verwenden. Jetzt erkennt der .NET-Dienst meine Anfragen nicht einmal.

ich es geschafft, die „Chunking“ ausgeschaltet zu erhalten (wobei „Stub“ ist eine Variable vom Typ MumbleStub von wsdl2java erzeugt, und ich zeigen, was mehrere Zeilen Code als eine schreckliche Linie hier sind):

stub._getServiceClient().getOptions().setProperty(HTTPConstants.CHUNKED, Boolean.FALSE); 

.. so zumindest der Dienst erkennt meine Anfrage AS eine Anfrage, wenn auch eine schlechte: "HTTP/1.1 400 Bad Request" ist die Antwort jetzt (im Gegensatz zu einer "Intro/Zusammenfassung" Seite bietet mir einen Link zu der WSDL) .

Ich bemerkte, dass die Axis ("1") Anfrage einen anderen Content-Type Header (text/xml, vs application/soap-xml) hatte, und ich frage mich, wie man diesen Request-Header ändert, wenn das der Fall ist Tatsache das Problem.

Hat jemand anderes dieses Problem alternativ? Ist das Problem wirklich das (undisplayable, wie es aussieht wie "element injection" zur Blog-Engine) ... xml version- "1.0" ... "XML-Meta-Intro-Tag", das Axis2 am Anfang der Anfrage hinzugefügt hat?

WS-Todesstern, tatsächlich.

+0

könnten Sie solche Dinge postulieren, um Pastebin oder dergleichen zu sagen. oder markieren Sie sie als "code", was Ihnen erlaubt, alles zu posten – jitter

+0

btw. Ich spreche von dem „nichtanzeigbaren“ Teil – jitter

Antwort

2

Wie Sie den verschiedenen Content-Type-Header erwähnen denke, ich Ihr Client SOAP 1.2-Anforderungen zu senden versucht und der 3rd-Party-App versteht SOAP nur 1,1

Versuchen Sie, die verwendete Seife Version ändern, wie AFAIK AXIS2 SOAP verwendet 1.2 standardmäßig

stub._getServiceClient().getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI); 
+0

Nun, das wie die Antwort aussieht, aber ich brauche etwas Bereinigung (Überschuss log4j Gefasel) zu tun, um sicherzustellen, dass ich nicht getauscht Probleme. VIELEN DANK! – Roboprog

+0

Es macht jetzt alles, was der alte Axis-Client-Code tat, keine Regressionen. Hoffentlich wird Axis2 einige der anderen Probleme lösen, die ich hatte. – Roboprog

+0

Hey, wenn nicht. Versuchen Sie einfach Ihr Glück mit einer anderen Frage :) – jitter