Ich möchte einen kleinen Webservice in Eclipse bauen, der mir Personendaten in einem Drittsystem anlegt.
In der Eclipse-Hilfe hab ich gelesen, dass man das am besten top-bottom macht und erst das WSDL anlegt.
Theoretisch richtig. Ich find aber WSDLs wirklich nicht einfach zu schreiben.
Dabei stürzte mir Eclipse 3.2 mehrmals ab, irgendwann hatte ich dann ein WSDL fertig und hab mir daraus ein Java-Rumpf generieren lassen. Das Binding hat meine Typen immer als Target 'www.example.org/Person' gemacht. Was soll hier eigentlich rein? Muss das eine real zugängliche URL sein wo das Schema abgelegt wird?
Zu faul zum nachschauen. Afaik erzeugt man das Schema der Businessdaten implizit im WSDL selbst. Kann aber morgen mal nachschlagen, bei WSDLs, auf die ich zugreife.
...Naja jedenfalls ahtte ich diverse Verständnisprobleme und
...falls nicht müsstest du dir glaub ich ernsthaft Gedanken um deine geistige Gesundheit machen. Es ist sehr komplex. Gibt eine Menge Tools um WSDLs zu lesen und wohl auch zu schreiben. Z.B. kannst du in Altova XML Spy Enterprise einfach eine WSDL übergeben und der erzeugt dann eine Beispiel-SOAP Nachricht für diese WSDL. Ohne das Teil wäre ich wahnsinnig geworden. Ich programmiere einen Webservice Client auf Tomcat gegen SAP Application Server. Auf der SAP Seite erzeugen die WSDLs automatisch aus RFCs.
will es nun doch lieber bottom-up machen weil das für Anfänger einfacher sein soll (ganz einfach wäre es natürlich in Notes 7 aber das scheidet hier aus)
Ohne Tools präferiere ich POX. Plain Old XML Webservices. Du schickst einfach eine XML Nachricht mit jakarta HTTP Client an einen Server, der parst sie, verarbeitet die Daten, erzeugt ein XML und schickt es zurück.
Ich glaub die Eclipse Sachen basieren noch auf axis1. Axis2 ist echt besser. Oder Xfire.
Hab festgestellt: Was man wirklich braucht, ist ein Binding Framework wie JAXB. Auch mit Pox. Oder ein selbstgeschriebenes. Du willst nicht wirklich in deinen Business-Objekten xml parsen. Dann sind es nämlich keine Business Objekte mehr sondern Chaos.
Nun brauche ich also eine JavaBean aus der ich mir den Webservice generieren lasse. Aber wie soll die Bean aussehen?
Konstruktor ohne Parameter und ein paar private Felder, die mit public get und set Methoden gefüllt und ausgelesen werden. Das ist alles.
Mein Webservice soll Personendaten empfangen und liefern können und Methoden wie 'Neue Person' und 'Person anzeigen' haben. Nehme ich nun document oder RPC/literal für den WebService (WS) ?
Nimm einfach eins von den beiden. So richtig hab ich den Unterschied selbst noch nicht kapiert. Wichtig ist, nicht "encoding' zu nehmen.
Und wie übergebe ich dann die Variablen? Hat meine PersonBean die Membervariablen Name, Vorname, Telefon etc oder nehme ich ein Interface dafür oder getter und setter?
Da kümmert sich das Binding Framework drum. Ansonsten einfach ein JavaBean wie oben beschrieben.
Wichtig für meine Praxis ist, WSDL einigermassen lesen zu können. Das ist in verschiedenen Büchern beschrieben. Die SOAP Nachrichten selbst sind einfach nur XML. Ich greif z.B. auf document-literal Daten von einem SAP Application Server mit jakarta.commons.HTTP, SAX und einem selbst geschriebenen Binding Framework drauf zu. Geht auch. Ist stabil und hat seine Gründe.
Leute, die WSDL von Hand schreiben, gehen sicher von funktionierenden Beispiel-WSDLs aus. Sonst ist das echt zu komplex, ausser man hat das schon ein paar mal gemacht.
Letztlich gehts ja nur darum Daten in xml zu packen, die an einen Server zu schicken und Daten in xml zurück zu erhalten.
Gruß Axel