Axis2: Java Beans senden

Hallo zusammen,

Standard mäßig kann man über Webservices mit SOAP nur einfache Javatypen verschicken, wie z.B. int, long, byte, String usw.
Ich soll allerdings auch möglich sein JavaBeans zu verschicken, aber aus der Anleitung auf der Apache Axis Seite, geht das nicht so genau hervor.

Das habe ich bisher gemacht:
Ich habe mir bisher einen Dummy Webservice aufgebaut. Zunächst habe ich mit dem Axis2 Service Archiver den Service generiert und in einem Application Server (hier JBoss) deployed. Danach habe ich mit dem Axis2 Code Generator die WSDL Datei zu der Java Klasse generiert, die als Service dient. Eine der als public deklarierten Methoden gibt als Rückgabetyp ein JavaBean zurück. Mit demselben Tool und der selben WSDL Datei kann man jetzt auch die Client Stubs generieren.

Die Frage ist jetzt: Was muss ich machen, damit der Client dieses Java Objekt (Bean) empfangen kann?
Auf der Apache Axis Homepage steht etwas von

hinzufügen, aber nicht in welcher Datei und wo da genau. Muss ich das (wo auch immer) vor, während oder nach der Generierung hinzufügen?

Vielen Dank für eure Hilfe,
Bartho

Die Frage ist jetzt: Was muss ich machen, damit der Client
dieses Java Objekt (Bean) empfangen kann?

Ich verstehe dein Problem nicht wirklich:
Du hast einen AXIS2 Webservice mit einer WSDL, oder?
Dann kannst du dir mit dem WSDL2Java das bei AXIS dabei ist, einfach den Client generien lassen z.B. so:

WSDL2Java -uri DeinService.wsdl -p dein.gewuenschtes.package -d adb -s

Das erstellt dir einen ADB Client für deine WSDL. Du erhälts dann eine Klasse namens DeinServiceStub. Die bietet genau die gleichen Methoden wie dein Webservice und die brauchst du nur noch korrekt aufrufen, z.B. so:

DeinServiceStub stub = new DeinServiceStub("http://pfad/zum/Webservice");
stub.deineWebserviceMethode();

Tatsächlich habe ich am Anfang Java Code, nämlich den Code der Services. Mit den Axis Tools lasse ich mir hieraus die .wsdl und die .aar Dateien generieren. Die Anleitung dazu habe ich aus folgendem Tutorial:
http://wso2.org/library/1719

Auf der Apache Axis2 Seite kann man zwei Eclipse Plugins runterladen, die dies machen:
Apache Axis2 Service Archive Generator Wizard – Eclipse Plugin
Apache Axis2 Code Generator Wizard - Eclipse Plugin

Das erstere generiert mir aus dem bestehenden Java Code die Service Datei .aar. Der zweite Wizard generiert mir aus dem Java Code meiner Services eine WSDL Datei. Direkt im Anschluss kann man aus der WSDL Datei dann die Client Stubs generieren lassen (siehe Part 2 des Tutorials).

Die Frage war also: Wenn es in meinem Java Code eine Methode gibt, die eine selbstgeschriebene Java Bean Klasse zurück gibt, was muss ich dann an diesem Prozess ändern? z.B.

public MyJavaBean getBean() {
return myJavaBean;
}

Das mit dem Bean Mapping stammt hierher, allerdings sehe ich gerade, dass dies für Version 1.2 gilt, ich benutze 1.3, falls das einen Unterschied macht:
http://ws.apache.org/axis/java/user-guide.html#WhatA…

Wenn ich das so wie in dem Beispiel oben implementiere, erhalte ich immer „null“ als Rückgabewert. Ich gehe davon aus, dass der Generator nur WSDL Dateien für die Standardtypen generieren kann und es deshalb nicht funktioniert.
Bei weiteren Recherchen habe ich nun auch gelesen, dass es eher unüblich ist, so vorzugehen wie ich. Normalerweise hat man zunächst die WSDL - Datei und generiert daraus Service und Client Code.
Müßte ich die WSDL - Datei dann von Hand schreiben?

Danke nochmal für eure Hilfe,
Bartho

P.S. Entschuldigt, wenn ich mich in dem ersten Beitrag so undeutlich ausgedrückt habe.

Die Frage war also: Wenn es in meinem Java Code eine Methode
gibt, die eine selbstgeschriebene Java Bean Klasse zurück
gibt, was muss ich dann an diesem Prozess ändern? z.B.

public MyJavaBean getBean() {
return myJavaBean;
}

Im Regelfall gar nichts.
Dafür ist ja AXIS da, dass es dir dafür eine WSDL und ClientStubs erstellt. Es kann höchstens sein, dass du bestimmte Datentypen verwendest die von AXIS nicht unerstützt werden. Das würde dir aber z.B. WSDL2Java schon melden.

Komisch, ich dachte, ich hätte schon, hierauf geantwortet und mich bedankt. Dann halt nochmal ^^:

Vielen Dank für deine Antwort. Hat alles geklappt.
Vielleicht hast du auch noch Zeit auf mein Folgeproblem zum Thema EJBs als Webservice kapseln zu antworten :smile:

http://www.wer-weiss-was.de/app/service/board_navi?T…