wsdl2java - Klasse generieren und benutzen
Ich nutze: eclipse 3.4, jdk1.6.0_07, axis2-1.4.1 binaries, lsrc.wsdl vom remotecontrol modul von limesurvey 1.80
- Axis 2 binary Distibution von ws.apache.org/axis2/download/1_4_1/download.cgi downloaden, entpacken in beliebigen Ordner.
- angelehnt an Keith Chapmans Blog die Klasse mit dem Befehl
wsdl2java.bat -uri lsrc.wsdl -o lsrc -p de.his.soap.lsrc -uw -or
generieren.
-uri : der Pfad zur wsdl relativ zum Pfad des Aufrufs.
-o : der Ordner in dem der source code erstellt werden soll relativ zum Pfad des Aufrufs.
-p : Das package in dem diese Klasse liegt. Nützlich damit man die Datein später nicht anpassen muß
-uw : unwrapped types. Nur mit diesem Parameter bekommen wir eine leicht zu verwendende Stub Klasse.
-or : overwrite old Classes. Nützlich wenn wir öfters neu in den gleichen Ordner generieren.
mehr Parameter
- Nach dem erstellen müssen noch einige Fehler in der generierten *ServiceStub.java Datei beseitigt werden.
- Alle Fehler und Warnungen wegen Sichtbarkeiten können automatisch von Eclipse gefixt werden. (Klickarbeit)
- Einige Funktionen haben String als Rückgabetypen, meinen aber java.lang.String. Das generierte Package hat eine eigene String Klasse implementiert, also müssen diese Rückgabetypen in java.lang.String geändert werden.
- mit dem erzeugten stub aus der lsrc.wsdl ergeben sich noch weitere Anpassungen:
folgender Abschnitt kann auskommentiert werden, da sonst fehler das Compilieren verhindern. Hier wurde etwas generiert was von meinem Webservice nicht benötigt wird, aber einen Compilerfehler verursacht.
Man sollte jedoch versuchen die java.lang.String param und java.lang.String.MY_QNAME auf die Stub eigene String Klasse um zu biegen: String param und String.MY_QNAME
// private org.apache.axiom.om.OMElement toOM(java.lang.String param, boolean optimizeContent)
// throws org.apache.axis2.AxisFault {
//
//
// try{
// return param.getOMElement(java.lang.String.MY_QNAME,
// org.apache.axiom.om.OMAbstractFactory.getOMFactory());
// } catch(org.apache.axis2.databinding.ADBException e){
// throw org.apache.axis2.AxisFault.makeFault(e);
// }
//
//
// }
einige viele Fehler ;) in Zusammenhang mit java.lang.String.Factory.parse am Ende des generierten Stubs sollten noch vorhanden sein.
einfach jegliches Vorkommen von:
java.lang.String.Factory.parse
mit
org.apache.axis2.databinding.types.xsd.String.Factory.parse
ersetzen.
Jetzt sollten alle Fehler beseitigt sein und wir können den stub initialisieren.
Bsp.
ServiceStub stub = new ServiceStub(targetEndpoint);
stubReturn = stub.sActivateSurvey(limeUser,limePass,surveyId);
Hinweis: Bei höheren Werten für die maximale heap size als Xmx768m kann axis die Virtuelle Maschine nicht starten. Der Grund ist mir nicht bekannt. Mit Xms256m und Xmx768m gab es keine Probleme.