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



## der jaf (19. Januar 2005)

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 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!


----------



## Christian Fein (19. Januar 2005)

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


----------



## der jaf (19. Januar 2005)

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
> ...


 
 ü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


----------



## cham (19. Januar 2005)

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.


----------



## der jaf (19. Januar 2005)

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 :


```
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 

 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?


----------



## der jaf (20. Januar 2005)

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 

   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


```
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 

  und in der doku steht sonst auch nix da was ich vergessen hätte


----------



## cham (20. Januar 2005)

Kannst Du bitte mal den %AXISCLASSPATH% posten?

Danke cham


----------



## der jaf (20. Januar 2005)

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


```
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 (20. Januar 2005)

füg das mal zum classpath (set CLASSPATH=...) hinzu.

Path != CLASSPATH


----------



## der jaf (20. Januar 2005)

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


```
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 
  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


----------



## cham (20. Januar 2005)

Der Ort der Sampleklassen muss doch auch mit in den Classpath.


----------



## der jaf (20. Januar 2005)

cham hat gesagt.:
			
		

> Der Ort der Sampleklassen muss doch auch mit in den Classpath.


 
 cool, das wars...danach hat er noch gemeckert, dass wsdl4j.jar, mail und activation jars fehlen
 aber jetzt gehts endlich 

 bischen umständlich das ganze...na ja hauptsache ein schritt weiter


 ich hab jetzt selber noch nicht nachgeschaut, aber vieleicht könnt ihr mir das noch sagen, was zum einen nötig ist, damit ich, wenn ich den web-service über den brwoser aufrufe, nicht das xml dokument mit dem response erhalte...sondern nur das "ergebnis"

 also im fall von diesem calculator sample möchte ich nicht das ganze xml dokument bekommen wenn ich

*http://localhost:8080/axis/Calculator.jws?method=add&i1=2&i2=5*

 aufrufe, sondern nur das ergebnis "7"

 muss ich dazu ein xslt schreiben, oder gibts da noch ne andere möglichkeit?

 und die zweite frage ist, wenn ich die parameter nicht per GET in die url schreiben möchte (*method=add&i1=2&i2=5)
*sondern ein formular und dann per POST - was ist dazu nötig?
 kann ich hier jsp benutzen und die form daten dann an den web-Service Client schicken, oder ist auch hier was anderes möglich (oder besser?)


----------



## cham (20. Januar 2005)

Dieser Calculator ist nur ein SimpleWebservice und ist nicht für den Gebrauch empfohlen. Wenn Du dann einen richtigen Webservice codiert hast, kannst Du dann über das wsdl Clientklassen generieren und über diese dann auf den Webservice zugreifen. (http://ws.apache.org/axis/java/user-guide.html#WSDL2Java)

Falls Du mit der Doku von Axis noch Probleme habe, suche ich Dir nochmal eine deutsche Doku. Der Einstieg ist etwas schwierig, aber dann gehts fast von allein. Also Kopf hoch ;-)


----------



## der jaf (22. Januar 2005)

nene mit axis hab ich eigentlich kein problem mehr 
da ist soweit alles klar

das einzige problem was ich von anfang an hatte war im grunde der Client!
in den ganzen axis samples usw ist der client in java geschrieben, d.h. wenn ich den web-service konsumieren will muss ich da entweder über die konsole den client (mit evtl parametern) starten oder über den brwoser das wsdl mit z.B <web-service url>?method=<methode>?<parameter1...n>
und raus kommt dabei ein xml dokument.

ja und ich wollte aber einen schönen benutzerfreundlichen Client als jsp!

ich hab jetzt einige sehr interessante sachen dazu gefunden - genau das was ich gesucht habe und werde sie in den nächsten tagen mal ausprobieren.

aber auf jedenfall schonmal danke an dich für deine hilfe


----------

