WebService Tutorial

I

icerus

Mitglied
Thread Starter
Dabei seit
19.05.2008
Beiträge
45
Reaktionspunkte
0
Hi,

ich bin gerade dabei mit der WebService-Programmierung anzufangen.
Ich programmiere schon was länger mit Java, habe allerdings bis jetzt fast immer mit Eclipse gearbeitet.
Ich glaube, dass es sich gerade bei mir rächt nie richtig mit dem Terminal gearbeitet zu haben :D ...

Ich habe folgendes Tutorial zu Webservices gefunden.
http://www.torsten-horn.de/techdocs/java-soap-axis.htm

Ich würde mal behaupten, dass ich bis zum Abschnitt "Web Service erstellen per .jws" alles ganz gut hinbekommen habe. Jedoch habe ich beim nächsten Abschnitt bei Punkt 4 ziemliche Probleme.
Kann es sein, dass es die Funktion set Classpath unter MacOS so in der Form nicht gibt?! Ich habe deshalb einfach mal mit export PATH = lib/*.jar:$PATH versucht alle jars einzubinden.
Allerdings bekomme ich bei Eingabe des Befehls "java org.apache.axis.client.AdminClient deploy.wsdd"
immer eine Exception geworfen, dass die Datei (org.apache. ...) nicht gefunden werden kann.

Irgendwie komme ich echt nicht mehr weiter.

Gruß icerus
 
Kann es sein, dass es die Funktion set Classpath unter MacOS so in der Form nicht gibt?!

EDIT: OOPS, hast Du schon gemacht...


Frage gut gestellt, Vermutung richtig.

Das hat aber weniger etwas mit OS X, als mit der sog. "Shell", dem Kommandointerpreter zu tun.

Wahrscheinlich ist das bei Dir die bash (wenn Du es nicht geändert hast), und da sagst Du:

export CLASSPATH=...

Das sollte funktionieren.

Alex
 
Achte bitte dabei auch, dass CLASSPATH komplett groß geschrieben werden muss! PATH erweitert nur die Liste der Verzeichnisse, in dem Programme "gesucht" werden.

Andere Möglichkeit: Du gibst java mit java -cp "Liste:der:jars" Klasse den Classpath direkt.
 
Ah super danke :) ... Noch eine kleine Frage: Wenn ich den CLASSPATH dauerhaft gesetzt haben will, reicht es dann in der Datei /etc/Profile export CLASSPATH = ... hinzuzufügen?

Gruß
 
tu das bitte nicht!

/etc/profile ist Systemweit! Das ist quasi unhöflich anderen Usern gegenüber!
leg besser eine Datei

.profile

in Deinem Home-Verzeichnis an, die wird nach /etc/profile nur für Dich ausgeführt) und das ist der systemkonformere Weg!
 
seit bash 3.0 wird ~/.bash_profile bevorzugt. wird ~/.profile überhaupt noch ausgewertet?
 
Ich hätte nochmal eine Frage.
Beim Versuch http://localhost:8080/axis/services/MeinWebService?wsdl zu öffnen erhalte ich immer eine Fehlermeldung:

"Sorry, something seems to have gone wrong... here are the details:

Exception - java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class meinpackage.MeineWebServiceKlasse2)"

Ich hab mal probiert die Java-Version zu ändern (bash nach Änderung neugestartet und dann mit javac class-Datei neu erstellt). Allerdings bleibt der Fehler.

Gruß icerus


-----

Habs ... Man sollte auch Tomcat neustarten :D
 
Zuletzt bearbeitet:
Kann es sein, dass ein Teil deiner Bibliotheken mit Java 6 compiliert wurden un du noch mit Java 5 arbeitest?
 
Also ich kompiliere jetzt mit Java 5 und es läuft. Probleme gab es bei der Nutzung von Java 6.

Meine Vermutung ist, dass Tomcat die falsche JavaVM (nämlich 1.5) nutzt. Weiß jemand wie ich Tomcat auch Java6 umstelle?

Oder ist meine Vermutung einfach nur totaler Quatsch :D ?!?!
 
Die Vermutung ist insoweit richtig, dass Tomcat Java 5 verwendet und du deinen Web Service mit einem Java 6 Compiler übersetzt hast ;)

Das JDK solltest du unter Dienstprogramme->Java->Java-Einstellungen festlegen können.
 
Hi,
ich hätte nochmal eine kleine Frage :D ...
Nach langem Suchen und Rumprobieren habe ich nun endlich einen Webservice erstellen können (mit Eclipse + Axis2 Service Archiver) der unter Axis2 auch ganz gut läuft.

Allerdings habe ich bei Objekten, die Attribute vom Typ byte[] benutzen, das Problem, dass die Werte der Arrays nie wirklich übertragen werden.
Das Problem fiel mir zunächst nur bei Antworten des WebServices auf. Das konnte ich noch lösen in dem ich einfach die Base64-Codierung aus der Response ausgelesen habe und von Hand dekodiert habe.
Mein Problem liegt darin, dass der selbe Mist auch andersrum nicht wirklich funktioniert (Client -> Webservice). Gibt es eine Möglichkeit Axis2 beizubringen wie man Base64 richtig zu einem Byte-Array dekodiert ???

Gruß icerus
 
In welche Richtung entwickelst du? Hast du die WSDL-Datei geschrieben und läßt dir den Webservice generieren oder schreibst du Interfaces? Dein Problem dürfte das WSDL-Mapping, speziell das (un)marshalling der Base64-Blobs in Byte-Arrays sein.
 
Ich habe eine Java-Klasse geschrieben, in der die fertigen Methoden des Webservices stehen und daraus dann mit dem Axis2 Service Archiver die aar Datei für Axis2 erstellt ...
 
das beschreibt mein problem glaube ich nicht. die Daten des arrays werden schon als Base64 kodiert (steht auch so in der wsdl).

ich würde auch einen anderem Ansatz nehmen. es soll doch nur einmal alles klappen :( ...

ein kleines Beispiel in dem das Problem nicht auftritt würde mir schon sehr weiterhelfen :)

Gruß
 
Nochmal zur Klärung: Parameter wie Rückgabetypen werden auf der Gegenseite falsch decodiert?
 
Genauso ist es. Alle anderen Attribut-Wertte werden korrekt gesendet und empfangen. Gibt es vielleicht eine Möglichkeit an die eingehende SOAP-Nachricht zu kommen (auf WebService Seite) ???
 
Dir ist SOAP-Monitor ein Begriff? ;) Damit solltest du zumindest einigermaßen debuggen können. Und nochmal zur Klärung: Du entwickelst da einen klassischen WSDL/SOAP-Webservice? Nichts RESTful?
 
Ich denke ich habe nun eine halbwegs gute Lösung gefunden (falls es überhaupt jemanden interessiert :D )...
Nachdem ich die Attribut-Typen von byte[] zu Byte[] geändert habe und einen Konstruktor (ohne Argumente)hinzugefügt habe, klappte das en- und decodieren problemlos.
 
Zurück
Oben Unten