Hilfe beim Einstieg in Web-Services mit Axis, JSP & Co

der jaf

Grünschnabel
hi,

ich habe vor ein paar tagen erst begonnen mich mit dem thema web-services zu beschäftigen und bereits einige quellen und beispiele gelesen.
also über die theorien und möglichkeiten hab ich jetzt einen groben überblick bekommen und wollte das ganze jetzt auch mal ausprobieren anhand eines kleinen beispiels.

da ich in meinem letzten projekt bereits eine anwendung mit jsp, struts, hibernate usw umgesetzt habe und auf dem gebiet schon einiges an erfahrung sammeln konnte, wollte ich das ganze jetzt mit web-services verbinden - sprich: ich würde gerne einen web-service implementieren (z.b. Hallo Welt als erste übung), den ich per jsp über tomcat zur verfügungstelle (man soll vieleicht vorher noch seinen namen als parameter übergeben können in einem input feld, und dann begrüßt werden)

meine frage(n) sind jetzt erstmal:
- das sun wsdp tutorial beschreibt das ganze ausgehend von dem wsdp toolkit - rpc aufrufe geschen über jax-rpc. also würde mein client über jax-rpc die entsprechende klasse/methode des servers (hier: print Hallo <name>) mit dem namen als parameter aufrufen
in diesem bsp ist das ganze nochmal erklärt (allerdings nicht über jsp, sondern java):
http://java.sun.com/webservices/docs/1.0/tutorial/doc/JAXRPC3.html

an dieser stelle habe ich momentan noch ein bsichen probleme mir vorzustellen, wie sowas über den browser und jsp als technik laufen könnte?

- die andere geschichte ist, dass man das scheinbar auch ohne verwendung von jax-rpc und dem wsdp toolkit erledigen kann - über apache axis z.B., wie es bereits hier im forum unter http://www.tutorials.de/tutorials183852.html
besprochen wurde.
ich frage mich hier jetzt, was besser (oder sinvoller?) ist und was da genau der unterschied ist zwischen den beiden methoden?

wahrscheinlich liegts auch auf der hand, nur bei der ganzen info, die ich in den letzten tagen gesehn und gelesen hab, bin ich grad etwas überlastet um noch klar zu denken :(

schonmal danke für eure hilfe!
 
Zuletzt bearbeitet:
der jaf hat gesagt.:
an dieser stelle habe ich momentan noch ein bsichen probleme mir vorzustellen, wie sowas über den browser und jsp als technik laufen könnte?

Erstmal, JSP sind auch nichts anderes als Java Klassen mit sehr viel out.println() aufrufen.
JSPs werden zur Runtime in Servlets umgewandelt und vom Container in den Klassenpfad
geladen.
Ein Webservice der eine implementation erwartet könnte theoretisch auch eine JSP (bzw
umgewandelte JSP) möglich sein.
Das macht aber ca 0 % Sinn :)
 
Christian Fein hat gesagt.:
Erstmal, JSP sind auch nichts anderes als Java Klassen mit sehr viel out.println() aufrufen.
JSPs werden zur Runtime in Servlets umgewandelt und vom Container in den Klassenpfad
geladen.
Ein Webservice der eine implementation erwartet könnte theoretisch auch eine JSP (bzw
umgewandelte JSP) möglich sein.
Das macht aber ca 0 % Sinn :)

über sinn und zweck brauchen wir nicht reden, ich will ja erstmal nur ein billiges bsp. als einstieg und das halt gerne unter verwendung von JSP und Struts, weil ich danach evtl ein (sinnvolleres?) unterfangen umsetzen will :)

was jsp ist weiß ich auch :)
mir ist auch klar, wie ich jsp zusammen mit dem struts framework benutze, also meine jsp seite schreibe mit dem input feld für den namen, dazu die passende action und das ganze natürlich in der struts-config.xml dann definiere, die form bean mit den gettern/settern usw.
jetzt wollte ich halt nur noch das thema web-service da unbter bringen und dazu vieleicht ein bsp, oder ein paar tips, ob und wie ich da jax.rpc oder axis verwende

thats it :)
 
Zuletzt bearbeitet:
Wenn Du sowieso Axis als Webserviceframework benutzen willst, dann tue das doch auch. Da brauchts kein JSP dazu um Webservices zu erstellen.

Falls Du dann immer noch selbst etwas stricken willst, schau Dir die Axis Sourcen mal an und versuche die zu verstehen.
 
ok, ich habe das ganze wohl doch noch nicht kapiert, aber so langsam kommts mir.
also, für das was ich machen will braucht mein das ganze jsp/struts zeugs gar nicht?

ich kann allein mit axis und java mein server so wie ich ihn haben will implementieren und deployen...der service ist dann über den tomcat erreichbar?

bei den ganzen bsp die ich bis jetzt gesehn hatte, wurde der client halt auch so geschrieben, dass man evtl parameter direkt im code mitgegeben hat, so wie z.B. bei dem bsp vom Tom aus seinem post :

Code:
    String ret = (String) call.invoke(new Object[] { "Tom" });

und ich wollte dafür halt eine formular bereitstellen, über das man den/die parameter schickt...deshalb hab ich gedacht, dass man dafür jsp seiten benutzen kann, um den web-service eben grafisch zu benutzen und den response (also hallo <name>) dann auch im browser wieder angezeigt bekommt...

da muß ich halt noch schaun, was dazu nötig ist :confused:

da web-services ja über HTTP als xml strom wandern...muß ich evtl ein xslt schreiben, dass mir den response als html-seite dann im browser anzeigt?
 
Zuletzt bearbeitet:
neben meiner frage, wie ich den client vm web-service über den browser anspreche (z.B. auch parameterübergabe im formular) hab ich jetzt ein noch ein problem.

wie startet man denn die axis samples?
ich bekomm ständig NoClassDefFoundErrors, wenn ich die sample-Clients aufrufen möchte :confused:

axis ist korrekt installiert und läuft - der validate service sagt auch das alles ok ist
classpath hab ich auch alles so gemacht, wie es in der doku steht
aber wenn ich jetzt z.B. das Calculator.jws sample testen will:
also den service erreiche ich über http://localhost:8080/axis/Calculator.jws ohne probleme
aber danach den Client mit

Code:
 java samples.userguide.example2.CalcClient -p8080 add 2 5
 
 bzw.
 
 java -cp %AXISCLASSPATH% samples.userguide.example2.CalcClient -p8080 add 2 5

gibt

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/axis/utils
/Options
at samples.userguide.example2.CalcClient.main(CalcClient.java:68)

hab den classpath wieder und wieder gecheckt, da passt alles;
und den client-aufruf hab ich auch von versch stellen aus aufgerufen
aber nix dvon geht :confused:

und in der doku steht sonst auch nix da was ich vergessen hätte
 
cham hat gesagt.:
Kannst Du bitte mal den %AXISCLASSPATH% posten?

Danke cham

Win XP SP2, j2sdk1.4.2_06, Tomcat 5.0.28, Axis 1.2RC2

Code:
 AXIS_HOME=C:\Tomcat5\webapps\axis
 AXIS_LIB=%AXIS_HOME%\WEB-INF\lib
 AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar;%AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar
 
 und in der Doku stand noch, dass man sich jedesmal das java -cp %AXISCLASSPATH% erspart, wenn man diesen noch zum CLASSPATH hinzufügt!
 also hab ich noch
 
 PATH=%PATH%;%AXISCLASSPATH%;%ANT_HOME%\bin;%JAVA_HOME%\bin;C:\Program Files\SSH Secure Shell
 
cham hat gesagt.:
füg das mal zum classpath (set CLASSPATH=...) hinzu.

Path != CLASSPATH

ok stimmt, das hatte ich falsch gemacht
jetzt hab ichs richtig, hab in die autoexec.bat reingeschrieben

Code:
  set AXIS_HOME=C:\Tomcat5\webapps\axis
  set AXIS_LIB=%AXIS_HOME%\WEB-INF\lib
 set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar;%AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.4.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar
  
  set CLASSPATH=%AXISCLASSPATH%

und wenn ich ab jetzt echo %CLASSPATH% mache zeigt er mir auch schön alle jars an die ich reinlade


aber leider gehn die samples noch immer nicht :confused:
immernoch

C:\Tomcat5\webapps\axis\samples\userguide\example2>java samples.userguide.exampl
e2.CalcClient -p8080 add 2 5
Exception in thread "main" java.lang.NoClassDefFoundError: samples/userguide/exa
mple2/CalcClient

über den browser mit
http://localhost:8080/axis/Calculator.jws?method=add&i1=2&i2=5

funktioniert der Web-Service jedenfalls einwandfrei
 
Zurück