SOAP Webservice

OnDemand

Top Contributor
Hallo zusammen,

ich muss einen SOAP Webservice bereitstellen und nutze dafür Spring Boot (Komme aus der REST-Welt und hab im Leben noch kein SOAP bereitgestellt).

Der Endpoint und co sind kein Problem, da hab ich schon was. Wo mich aber schwer tue ist die Rückgabe; zb wird erwartet

XML:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        ...usw

aktuell hab ich erstmal nur einen Test-Endpoint mit dem ich die Antwort als String zurück gebe. Kann mir jemand einen Anschupser geben wie ich die Rückabe exakt nach Vorgabe bauen kann? Wenn ich ein ResponseObject baue und zurück gebe, heißen die properies alle anders, zb:
Code:
<SOAP-ENV:Envelope
statt
Code:
<soap:Envelope

Irgendwie sehe nur Möglichkeiten da manuell mit Marshalling und co zu arbeiten, kann das so kompliziert sein?
 

mihe7

Top Contributor
heißen die properies alle anders
Nein, die Elemente heißen nicht anders, die heißen beide Envelope. Anders ist hier nur der Namespace und den kannst Du benennen, wie Du willst.

XML:
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
Hier wird der Namespace "soap" definiert. Wenn Du "soap" durch XYZ ersetzt, gibst Du das Element halt so an:
XML:
<XYZ:Evelope
 

mihe7

Top Contributor
Hmm das vor dem Doppelpunkt wird aber automatisch erzeugt von JAXWS. meinst du dass der Präfix egal ist für die Gegenstelle?
Genau, ob da jetzt
XML:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
oder
XML:
<hanswurst:Envelope xmlns:hanswurst="http://schemas.xmlsoap.org/soap/envelope/"
oder
XML:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
steht, spielt keine Rolle.
 

OnDemand

Top Contributor
ah ok. dachte immer, dass das exakt so heissen muss wie dokumentiert. (

wie kann ich denn den Envelope manipulieren den Spring Ws da automatisch erzeugt? Oder ist das auch egal ob xsi und co in der Response stehenm ,obwohl die Gegenstelle das erwartet?
Java:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 

mihe7

Top Contributor
Also irgendwie verstehe ich das Problem nicht ganz. Es ist zwar schon ewig her, dass ich SOAP-Services geschrieben habe, aber eigentlich war das mit JAX-WS relativ einfach: nach der Bereitstellung konnte man das WSDL abrufen und sich anhand dessen einen Client generieren (lassen). Der Client hat da nix zu erwarten (außer natürlich, dass SOAP umgesetzt wird). Es gibt wohl zusätzliche Konfigurationen (wie z. B. WS-Security und ich meine, es gab auch was bzgl. Kompatibilität zu .net), auf Clientseite konnte man Bindings für den xjc einstellen, aber direkt auf SOAP-XML-Ebene habe ich da nie etwas tun müssen, soweit ich mich entsinne.

Wo liegt denn eigentlich das Problem?
 

KonradN

Super-Moderator
Mitarbeiter
Du solltest Dich hier etwas mit XML beschäftigen.

Was Du da in XML festlegst, sind die Namespaces. Du hast da mehrere Namespaces:

Diese Namespaces gibst du an mittels xmlns (XML NameSpace). xmlns[:<kürzel>]="..."
Die Namespaces werden dann verwendet, indem der Kürzel dann vor das Element gesetzt wird. Also
das Tag wird zu: [<kürzel>:]<elementname>

Wenn Du also ein xmlns="...." hast, dann wird <a> zu einem Element a aus dem gesetzten Namespace (Das wäre dann der default Namespace)
Hast du kein xmlns="...", dann hast Du in <a> ein Element ohne Namespace. Ds ist also etwas anderes, als wenn es in einem Namespace wäre!

Wenn Du ein xmlns:x="..." hast Du dann ein Namespace mit dem Kürzel x und wenn Du das Element a aus dem Namespace x haben willst, ist es ein <x:a>

Jetzt fehlt nur noch: Wo kann man den Namespace definieren? Diese Namespaces können bei einem beliebigen XML Element als attribut angegeben werden. Und der Namespace kann dann schon in dem Tag, in dem der Namespace angegeben wird, verwendet werden.


Wenn ein Namespace nicht benötigt wird, dann muss man ihn nicht angeben. Ganz simpel.


Und dann ganz wichtig: Was zum Teufel machst Du? Was interessiert Dich das alles denn?

SOAP Webservices haben eine eigene Beschreibung: WSDL. Du hast also in erster Linie zwei Use Case:
1. Du hast eine WSDL vorliegen. Dann nutzt Du diese und generierst Dir daraus alles, was Du brauchst.
2. Du erstellst einen webservice selbst. Dann entwickelst Du einfach den entsprechenden Code (mit etwas XML Serialisierung) und dann erstellt die Software dir die wsdl.

Manchmal gibt es auch durchaus Mischformen. Das ist dann immer etwas, wo man sich ernsthaft fragen muss, wer das koordiniert hat. Das ist dann etwas wie:
Du machst den Webservice und bist dafür verantwortlich. Aber ich gebe Dir genau vor, wie etwas serialisiert werden muss.
Was bedeutet das für Dich:
  • Du hast mit dem Envelope und so weiter nichts am Hut, Das macht weiterhin die Software für Dich!
  • Du musst dann aber halt die Elemente richtig serialisieren. Da gibt es dann halt klare Vorgaben, wobei das unnötige Arbeit ist. Es macht für so eine Schnittstelle einfach keinen Unterschied, wie ein DTO im Detail serialisiert wird. Wichtig ist nur, dass es festgelegt und dokumentiert ist. Und das ist der Fall über die wsdl.

Wo ist hier ggf. das Problem: Die WSDL beschreibt nicht alles. Die WSDL beschreibt nur die eigentliche Nutzlast (das ist jetzt rein Umgangssprachlich!). da kann man dann noch recht viel drumherum packen. Das findet sich aber dann nicht in der wsdl wieder. Und das sind Dinge, die wir damals im C#/.Net Umfeld mit WCF über reine Config-Files gesteuert haben. Da konnte man dann gewisse Dinge einfach konfigurieren auf Server und Client Seite - was aber die wsdl nicht beeinflusst hat (Das war dann halt eine Config innerhalb des IIS für die Anwendung und dann noch einmal auf der Client Seite)

Was brauchst Du? Damit Du eben nicht zu viel machen musst (Mit dem Rahmen XML und all sowas), nutzt Du einfach die JAX-WS API.
Wenn die wsdl vorliegt, dann kannst Du wsimport nutzen. (Das war mal früher im JDK dabei, aber das muss man jetzt irgendwie separat besorgen. War wohl sogar nur eine jar Datei, die man dann aufgerufen hat? Aber evtl. erinnere ich mich falsch ...)

Wenn Du JAX-WS suchst, dann findest Du aber sehr viele Beispiele für alle möglichen Ansätze ...

Edit: Typo: die wie ein DTO im Detail serialisiert wird
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Schnittstelle über Webservice SOAP Allgemeine Java-Themen 11
OnDemand SOAP Rest Spring Boot Allgemeine Java-Themen 5
M [SOAP] - Klasse aus WSDL ausschließen Allgemeine Java-Themen 2
J Soap Client mit mehreren URLs in Servlets Allgemeine Java-Themen 0
J Nach SOAP Protokollierungen Änderung vornehmbar? Allgemeine Java-Themen 2
M Webservice timeout bei Ausführung der .jar Allgemeine Java-Themen 3
OnDemand Webservice Triggern Allgemeine Java-Themen 4
F Kennt jemand das Java WebService Tutorial der Uni Hannover? Allgemeine Java-Themen 2
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
P XML Dokumente von JDOM an ein WebService senden! Allgemeine Java-Themen 2
I REST Webservice getFile Allgemeine Java-Themen 2
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
P CXF 3.0.1 WebService- Client Allgemeine Java-Themen 0
E Webservice zur Konvertierung IBAN/BIC -> Bank Name Allgemeine Java-Themen 1
S Webservice-Tutorial Allgemeine Java-Themen 3
U Eclipse Java Projekt - Webservice einbinden Allgemeine Java-Themen 7
C Webservice: XML Parameter übergabe. Allgemeine Java-Themen 7
Y WebService erstellen Allgemeine Java-Themen 2
C Datei kodiert zu Webservice senden Allgemeine Java-Themen 9
G WebService Exception Allgemeine Java-Themen 3
M Client für einen Webservice erstellen (ONVIF) Allgemeine Java-Themen 3
M Webservice mit Axis2 und Eclipse - Error Allgemeine Java-Themen 2
D Kein Zugriff auf WebService ausser localhost Allgemeine Java-Themen 4
M Webservice in Java erstellen Allgemeine Java-Themen 6
T Webservice definieren und andere Webservice aufrufen Allgemeine Java-Themen 8
B webservice stub enthält nicht genug funktionen Allgemeine Java-Themen 2
R Konzept eines Software-Rollout/Synchronisation via WebService Allgemeine Java-Themen 5
G [Reflection + WebService] Methodenaufruf an einem Proxy Allgemeine Java-Themen 11
J HashMap mit Webservice realisierbar? Allgemeine Java-Themen 4
W Dringend: WebService Select Statement aus xml Datei Allgemeine Java-Themen 11
T Datenbankanbindung per WebService Allgemeine Java-Themen 4
S allgemeine Datenbankschnittstelle für Webservice Allgemeine Java-Themen 72
S Webservice --> wie ? Allgemeine Java-Themen 9

Ähnliche Java Themen


Oben