Abfangen der Soap in einem WebService

elro2k

Grünschnabel
Hallo zusammen,

Meine Situation:
Ich würde gerne einen WebService in Java erstellen. Dieser WebService soll aber nur die ankommende Soap abfangen. Diese soll dann unverändert per Socket weitergeschickt werden.

Meine Frage:
Ist es möglich einen solchen WebService aufzubauen, welcher eine komplette Soap empfängt?

Ich wäre euch für jede Hilfe oder Idee dankbar.
 
Wenn ich dich richtig verstehe kommt die SOAP gar nicht am Server an?
Was kommt den am Server an? :-D
Was macht ein WebService im Hintergrund?

Gruß
 
Wenn ich dich richtig verstehe kommt die SOAP gar nicht am Server an?
Nochmal, es gibt nicht "die SOAP". Lies doch bitte mal den Wikipediaartikel. Wenn das nicht klar ist, wird man dir nur wenig helfen können fürchte ich.

Was kommt den am Server an? :-D
XML Nachrichten bestehend aus Envelope und Payload.

Was macht ein WebService im Hintergrund?
Ich versteh die Frage nicht. Er macht eben das, was du implementierst.

Gruß
Ollie
 
Mal ein bisschen konkreter anhand eines Beispieles:

Das Beispiel ist von http://www.torsten-horn.de/techdocs/soap.htm:

Wenn dieses meine SOAP-Request ist:

POST /perl/soaplite.cgi HTTP/1.0
Host: services.xmethods.net:80
Content-Type: text/xml; charset=utf-8
Content-Length: 546
SOAPAction: ""

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:BabelFish xmlns:ns1="urn:xmethodsBabelFish"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<translationmode xsi:type="xsd:string">de_en</translationmode>
<sourcedata xsi:type="xsd:string">Hallo Welt, Guten Tag</sourcedata>
</ns1:BabelFish>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Dann möchte ich folgendes als Server in meinem Java Programm empfangen:

<SOAP-ENV:Body>
<ns1:BabelFish xmlns:ns1="urn:xmethodsBabelFish"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<translationmode xsi:type="xsd:string">de_en</translationmode>
<sourcedata xsi:type="xsd:string">Hallo Welt, Guten Tag</sourcedata>
</ns1:BabelFish>
</SOAP-ENV:Body>
 
Hallo,

wie (mit welchem Framework, SWS, AXIS 1/2, JAX-WS, CXF, "von Hand" via HTTP Post...?) sprinchst du denn deinen Webservice an?

Je nachdem ergeben sich unterschiedliche Möglichkeiten wie man die SOAP Response abfangen kann. Um hier aber nicht alle Aufzählen zu müssen wäre es schon sehr hilfreich zu wissen wie du die SOAP Calls machst.

Prinzipiell geht dass dann je nach Framework über sowas wie einen Interceptor / Handler / Proxy der an entsprechender Stelle der Respone Behandlung eingehängt wird bzw. im Falle des Proxies den Request stellvertretend für den Service empfängt und den Aufruf an das eigentliche Ziel (den Webservice Endpoint) weitergibt. Kommt dann die Antwort zurück wird diese vom PROXY empfangen. Dieser kann dann die Antwort weiterleiten / dumpen / ignorieren, what ever.

Weiterhin ist hier auch beschrieben, wie man mit AXIS Clients SOAP Messages abfangen kann:
http://www.torsten-horn.de/techdocs/soap.htm

Übirgens nicht wundern, wenn das babelfish Webservice Beispiel nicht funktioniert. Der Service wurde mittlerweile deaktiviert.

Gruß Tom
 
Hallo,

erst einmal Vielen Dank für deine Antwort.

Aber, mir geht es nicht darum eine SOAP Response abzufangen, sondern die SOAP-Request. Ich will einen WebService Server schreiben. Dieser soll eine ähnliche Funktion haben, wie du beschrieben hast, nur auf der anderen Seite(Server-Seite). Ein Händler(WebService Server), welcher die SOAP-Request vom Client abfängt und weiterleitet.

Beispielablauf:
1) SOAP -Request wird von Client Seite abgeschickt
2) SOAP- Request soll von meinem WebService Händler als XML(komplette SOAP-Request) empfangen werden
3) Mein Händlerprogramm leitet die SOAP-Response per Socket an einen anderen Server weiter
4) Ich kriege eine Antwort über eine Socket Verbindung in welcher die SOAP-Response steht.
5) Diese SOAP Response leite ich weiter an den Client welcher den WebService aufgerufen hat.

Es ist ein merkürdiges vorhaben, aber es ist eins :)
Ich hoffe du kannst mit helfen.

Gruß elro
 
Ist es möglich einen solchen WebService aufzubauen, welcher eine komplette Soap empfängt?

Ja, ist es. Einfach Code anhand des WSDLs generierung und Implementierung dazu schreiben, dem Client die URL mitteilen.

gruss
slowfly
 
Hallo,
ich möchte ähnlich vorgehen. Nur ist mein Hintergrund, das Debugging:
Ich habe nämlich einen sehr einfachen Java Webservice (erstmal zu testzwecken) geschrieben. Hier will ich es schaffen, dass ich einen eigene Klasse übergeben kann (bzw ein Objekt einer eigenen Klasse). Die Klasse habe ich mit den XML Annotationen (XMLAccessortype und XMLType) ausgestattet, sodass diese beim veröffentlichen mittels Enpoint korrekt als xsd angelegt werden, die mit der wsdl-datei verknüpft wird.

Soweit so gut. Das Problem ist jedoch, dass der Client kein Java Client ist sondern der BPMS von intalio. Wenn ich hier die wsdl importiere und werte demenstsprechend mappe, wird der Webservice NICHT aufgerufen. Ich vermute den Grund, dass die SOAP nicht in der korrekten form ankommt.

Daher brauche ich einen Weg alle SOAP-Nachrichten am Webservice-Rechner abfangen zu können um mir diese mal anzuschauen.
Ich weiß nämlich nur, dass intalio irgendwas verschickt und dass nicht das richtige ankommt.

Könnt ihr mir da weiterhelfen?
 
WebServices sind im Allgmeinen plain XML über HTTP. D.h. wenn du mit nem HTTP Monitor die Requests monitorst, siehst du genau was über die Leitung geht.

Gruß
Ollie
 
Zurück