Hallo liebes Forum,
das ist mein erster Post auf dieser Seite. Hier gibt es eine ganze Menge an Informationen und Hilfen. Hoffentlich kann mir jemand von euch bei meinem Problem behiflich sein, oder mir einen Tipp geben, wo ich noch nachfragen könnte.
Ich soll unter Vorgabe einer bestehenden WSDL-Datei ein Web-Services entwickeln. Es gibt also bereits ein Programm, welches mein noch zu entwickelndes Service benutzen soll. Damit habe ich so meine Probleme. Obendrein habe ich keinen richtigen Zugang zu diesem Programm, welches mit mir kommunizieren soll. Die ganze WSDL-Datei hier abzudrucken möchte ich euch ersparen (wäre aber möglich). Ich versuche mal das Problem zu schildern.
So schaut die einfachste Anfrage aus, die das Tool an mich sendet:
und so müsste die Antwort aussehen, damit sich das Programm mit der Antwort abfindet (hab ich nach viel Fummelei und Netzwerk mittschneiderei herausgefunden, indem ich nicht AXIS benutzt habe sondern über einen Socket mit hard codierten Nachrichten selbst geantwortet habe):
Soweit ich das in der FH damals gelernt habe, ist das erste Element, dass nach dem BODY von SOAP kommt, die Methode, die aufgerufen wird. In diesem Fall wäre das also die Methode "PingRequest". Würde ich also nun eine einfache Methode "PingRequest" entwickeln, die auf die übergebenen Parameter anspricht (das war kein Problem), liefert SOAP allerdings eine ganz andere XML-Datei zurück als das Programm erwartet. Nämlich sowas hier:
Und damit schmeisst das aufrufende Programm eine Exception, dass es mit der Antwort nicht klar kommt. Und nun weiss ich überhaupt nicht mehr weiter... Entweder implementiert das Programm welches mit mir kommunizieren soll kein richtiges SOAP, oder ich kann das Antwortverhalten von AXIS irgendwie dahingehend manipulieren, dass die Antwort wie in dem 2. Code-Abschnitt ausschaut.
Hoffentlich kann mit jemand von euch helfen, denn ich bin mit meinem Latein total am ende Gerne poste ich auch Ausschnitte der WSDL-Datei oder von mir aus auch die Komplette. Der Übersicht wegen belasse ich es aber erstmal bei den Beispielen.
Viele Grüße,
Martin
das ist mein erster Post auf dieser Seite. Hier gibt es eine ganze Menge an Informationen und Hilfen. Hoffentlich kann mir jemand von euch bei meinem Problem behiflich sein, oder mir einen Tipp geben, wo ich noch nachfragen könnte.
Ich soll unter Vorgabe einer bestehenden WSDL-Datei ein Web-Services entwickeln. Es gibt also bereits ein Programm, welches mein noch zu entwickelndes Service benutzen soll. Damit habe ich so meine Probleme. Obendrein habe ich keinen richtigen Zugang zu diesem Programm, welches mit mir kommunizieren soll. Die ganze WSDL-Datei hier abzudrucken möchte ich euch ersparen (wäre aber möglich). Ich versuche mal das Problem zu schildern.
So schaut die einfachste Anfrage aus, die das Tool an mich sendet:
Code:
POST /axis/services/DmsService HTTP/1.0
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.1RC2
Host: mfe1:8080
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: "http://www.sonstwo.com/namespaces/xyz/integration/dms/ping"
Content-Length: 719
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<PingRequest xmlns="...">
<UserInfo>
<UserId>mfe</UserId>
<Password>secure</Password>
</UserInfo>
<Properties>
<Property>
<Key xmlns="">DMS_SYSTEM</Key>
<Value xmlns="">xyz</Value>
</Property>
<Property>
<Key xmlns="">WOH_BRA_BRANCH_CODE</Key>
<Value xmlns="">4711</Value>
</Property>
</Properties>
</PingRequest>
</soapenv:Body>
</soapenv:Envelope>
und so müsste die Antwort aussehen, damit sich das Programm mit der Antwort abfindet (hab ich nach viel Fummelei und Netzwerk mittschneiderei herausgefunden, indem ich nicht AXIS benutzt habe sondern über einen Socket mit hard codierten Nachrichten selbst geantwortet habe):
Code:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Date: Mon, 23 Oct 2006 12:49:41 GMT
Connection: close
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<PingResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns="...">
true
<PingResponse>
</soapenv:Body>
</soapenv:Envelope>
Soweit ich das in der FH damals gelernt habe, ist das erste Element, dass nach dem BODY von SOAP kommt, die Methode, die aufgerufen wird. In diesem Fall wäre das also die Methode "PingRequest". Würde ich also nun eine einfache Methode "PingRequest" entwickeln, die auf die übergebenen Parameter anspricht (das war kein Problem), liefert SOAP allerdings eine ganz andere XML-Datei zurück als das Programm erwartet. Nämlich sowas hier:
Code:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Date: Mon, 23 Oct 2006 12:49:41 GMT
Connection: close
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<PingRequestResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns="...">
<PingRequestReturn xsi:type="xsd:boolean">true</PingRequestReturn>
</PingRequestResponse>
</soapenv:Body>
</soapenv:Envelope>
Und damit schmeisst das aufrufende Programm eine Exception, dass es mit der Antwort nicht klar kommt. Und nun weiss ich überhaupt nicht mehr weiter... Entweder implementiert das Programm welches mit mir kommunizieren soll kein richtiges SOAP, oder ich kann das Antwortverhalten von AXIS irgendwie dahingehend manipulieren, dass die Antwort wie in dem 2. Code-Abschnitt ausschaut.
Hoffentlich kann mit jemand von euch helfen, denn ich bin mit meinem Latein total am ende Gerne poste ich auch Ausschnitte der WSDL-Datei oder von mir aus auch die Komplette. Der Übersicht wegen belasse ich es aber erstmal bei den Beispielen.
Viele Grüße,
Martin