BeanMapping für WebServices mit Axis

Rolando80

Grünschnabel
Hallo!

Habe folgendes Problem:
Schreibe WebServices und möchte einen Typ einer eigenen Klasse übertragen. Dafür gibt es laut Axis doku das sogenannte BeanMapping, falls die Klasse einem Java-Bean entspricht.
Laut Doku soll man nur den folgenden eintrag in die deploy.wsdd Datei eintragen und es läuft:

<beanMapping qname="ns:local" xmlns:ns="someNamespace"
languageSpecificType="java:my.java.thingy"/>

siehe unter:
http://ws.apache.org/axis/java/user-guide.html#EncodingYourBeansTheBeanSerializer

Dabei soll eine Klasse auf ein xml-Schema-type gemappt werden, wobei der Parameter "languageSpecificType" die Klasse angibt, und wahrscheinlich bei "someNamespace" der Pfad des Xml-Schemas hinein kommt.

Kann das stimmen?

Und wie erzeuge ich ein schema für eine klasse bzw. kann mir jemand quellen dafür nennen?

wenn ich irgendeinen namespace eingebe gibt er als Fehler "premature end of file..."

danke und lg,
roland
 
Hallo!

Hab jetzt die Lösung gefunden:

Also ich möchte gerne ein Objekt einer eigenen, den Java-Bean Regeln entsprechenden Klasse, vom Server zum Client übertragen....

In die *.wsdd Datei kommt wie gesagt der Eintrag:

<beanMapping qname="ns:local" xmlns:ns="someNamespace"
languageSpecificType="java:my.java.thingy"/>

Für qname und xmlns:ns gibt man einfach den Namen der Klasse, dessen Objekt gemappt werden soll ein.

Bei languageSpecificType gibt man ein: "java:meinpackage.ZuMappenderKlassenName"

Das Mapping funktioniert nur über eine Zwischenklasse (bzw. hat bei mir nur so funktioniert). Man erstellt dafür diese Zwischenklasse am Server, von wo aus man das Objekt besorgt.
Am Client spricht man diese Zwischenklasse dann an, welche sich das Objekt eben besorgt und es dann an den Client zurück gibt.

Den <beanMapping>-Tag in der *.wsdd Datei gibt man dabei nicht in den <deploy>-Tag der Datei, sondern direkt in den <Service>-Tag der Zwischenklasse.

Nun müsste es funktionieren.

Das besorgen direkt aus der Klasse dessen Objekt ich besorgen will hat bei mir deshalb nicht funktioniert weil wenn ich die Methode am Server mit dem MeineKlasse_PortType (Stub) Objekt anspreche, er ein MeineKlasse_Type Objekt zurückgibt und nicht ein MeineKlasse Objekt.
Warum das so ist, und er bei "normalen" Typen nicht auch ein MeineKlasse_Type Objekt zurück gibt, sondern eben z.b. einen String, weiß ich nicht.

lg, roland
 

Neue Beiträge

Zurück