# SOAP -Server - Verständnisfragen.



## DocMcFly (7. Jan 2007)

Hallo,

Als ich damals meine erste JAVA-Web-App. gebastelt hab, auf meinem Linux-Testserver (DebianSarge) etwas umständlich Sun's Java 1.4.2 SDK und den ApacheTomcat 5.0.28 installiert. 

Jetzt würde ich gerne eine SOAP-Anwendung auf dem Server installieren. Aber ich bin verwirrt, was ich brauche, was ist gut und was ist schlecht?! 

1. Brauche ich überhaupt Tomcat für Soap? Hilft mir Tomcat?

2. Soll ich auf Tomcat 5.5  oder Java 1.5 upgraden?

3. Wenn ich Tomcat habe, was macht dann ApacheAxis? Oder brauche ich nur eins von beiden? 

4. Wenn ich Java5 SDK herunterladen und installieren will (http://java.sun.com/javaee/downloads/index.jsp)  bekomme ich auch noch einen App-Server von Sun? Brauche ich den auch? Wo bekomme ich ein nacktes SDK5?

5. Ist in Java5 SDK J2EE drin? Was genau mach J2EE? 
( Laut http://www.torsten-horn.de/techdocs/java-soap.htm#ApacheSOAP brauche ich J2EE...  )

5a. Gibt es ein aktuelleres HowTo als http://www.torsten-horn.de/techdocs/java-soap.htm#ApacheSOAP ?

6. Wenn ich 1.4.2 behalte muss ich J2EE noch nachladen? 

7. Ist es klüger WSDL zu verwenden? (Wird es auch von anderen Sprachen gut unterstützt?)

8. Muss ich vielleicht SOAP garnicht installieren, weil ich es ins WAR-File packen kann (inkl. j2ee.jar)? 

Ich hab jetzt einige Texte gelesen, in denen steht zwar was die einzelnen Komponenten so machen, aber mir fehlt der globale Überblick. Drum kann ich auch nicht so richtig entscheiden, was ich brauche und was nicht.

Vielen Dank fürs Lesen und Antworten...

Clemens


----------



## SnooP (7. Jan 2007)

Wenn dir der globale Überblick fehlt, dann solltest du dir doch am ehesten mal nen gutes Buch zum Thema durchlesen... sonst wird's immer schwierig...

ich versuche mal kurz und knapp zu antworten:

1. Man braucht für SOAP bzw. für die Verarbeitung von Webservices eine SOAP-Engine... genau dies ist Axis und Axis ist nichts anderes als ein Servlet, was man z.B. mit Hilfe von Tomcat nutzen kann - also Jein 

2. Bei Tomcat 5.5 keine Ahnung welche Verbesserungen da drin sind... - ich würde bei Neuinstallationen immer die neuesten Versionen einer Software benutzen, es sei denn diese haben sich so grundlegend geändert, dass kein Tutorial der Welt mehr aktuell ist... dann nützt mir das nichts.

3. Siehe 1 - Axis brauchst du - Tomcat alleine kann kein SOAP.

4. Das J2SDK 1.5 ist nackt... enthält keinen Appserver... J2EE wiederum enthält eben jenen... den benutzen jedoch nur die wenigsten  ... - aber in deinem Fall ist es auch nicht zwingend notwendig, dass du einen Appserver hast. Es sei denn du möchtest eigentliche eine komplexe Enterprise Application aufbauen und dafür EJBs verwenden. Dazu benötigst du dann tatsächlich Application Server - ich würde da den JBoss im Open-Source-Bereich vorschlagen... - aber wie gesagt, wenn du nur SOAP machen möchtest und nur Webservices nutzen willst, brauchst du nicht auch noch nen Appserver.

5. keine Ahnung - kenn ich nich 

6. Wenn du nur das nackte J2SDK 1.4.x hast, ja. Auch ein Java 1.5 enthält imho nicht alle Packages die man benötigt... J2EE solltest du dir also runterladen

7. WSDL ist kein Konkurrenzprodukt - WSDL heißt Webservice Description Language und ist nichts anderes als eine XML-basierte Schnittstellenbeschreibungssprache für Webservices. Dies wird ohnehin benötigt... kann jedoch über die Axis-Engine anhand von Java-Interfaces automatisch generiert werden... - evtl. solltest du dir mal nen gutes Buch oder Tutorial zum Thema Axis und Webservices reinziehn.

8. Versteh ich nich  - SOAP kann man nicht installieren... das ist eine Sprache, die eine SOAP-Engine verstehen kann. Diese Engine brauchst du und die gibts halt z.B. in Form von Axis... natürlich gibt es auch noch andere Engines... hatten wir erst vor kurzem... persönlich kenn ich aber nur Axis.


----------



## DocMcFly (8. Jan 2007)

Vielen Dank... Deine Antworten und ein paar Webseiten lassen allmählich den Nebel schwinden...

Nun stellt sich mir die Frage: Ist das Ganze nicht Overkill oder viel zu kompliziert?

Kurzer Umriss was ich vorhabe: Ich habe eine lokale Applikation, welche DB-Operationen ausführt und Infos bereitstellt. 

Jetzt möchte ich einige dieser Funktionen auch verteilten Clients zur Verfügung stellen. Ich dachte mir das so:

Client braucht Infos >>> macht er eine Anfrage an den Server >>> der verwendet die Funktionen (Methoden) die bereits existieren und gibt die Infos wieder zurück >>> Client zeigt an.

Da ich von hause auch nicht der Fleißigste bin... dachte ich mir: SOAP gibt es schon und scheint das zu machen, was ich will... so muss ich mir keine eigenen Kommunikationprotokolle ausdenken und schreiben. 

Das ist ja alles ganz nett - aber ich bin sehr irritiert... Bis her hab ich bei WebApps diese als WAR-File bei Tomcat hochgeladen und dann gingen diese... 

Bei Soap .. hab ich dieses Deploy-Interface, wo ich nicht weiß was der von mir will... Wo kann ich die Serverklassen hochladen... oder muss ich das umständlich über die Konsole machen?

SOAP & AXIS läuft unter meinem Tomcat 5.0.28 (JAVA 1.4.2) und nun? 

 :?: Clemens  :?:


----------



## SnooP (8. Jan 2007)

nunja - du brauchst entweder einen deployment-descriptor - oder du machst das über .jws Dateien... - guck dir mal das folgende Tutorial an:
http://www.torsten-horn.de/techdocs/java-soap-axis.htm

das zeigt eigentlich alles recht hübsch... - idealerweise macht man ne entsprechende Fassaden-Klasse, die diejenigen Methoden enthält, die über dem Webservice ansprechbar sein sollen.. diese können dann auf die eigentliche Logik auf dem Server zugreifen.

Aber Tatsache ist, dass man den Webservice per axis deployen bzw. auch undeployen muss... - die Aufrufe sind ja aber auch nich soo tragisch


----------



## DocMcFly (9. Jan 2007)

Hallo, 

vielen Danke wiedermal für die schnell und geduldige Hilfe... 

Für die Leute die es am liebsten ganz kurze Zeit auf der Konsole verbringen, habe ich hier zwei Shellskripte geschrieben, die sich an diesem Kapitel ( http://www.torsten-horn.de/techdocs/java-soap-axis.htm#WebService-mit-WSDD ) des HowTos orientieren und so das deployen und undeployen beschleunigen solllen.

Zu erst das Skript zum Deployen. (WICHTIG: Die Pfade und ggf. die jar-Namen anpassen!)

```
#!/bin/sh

# Package & Klasse?
CLASSNAME=$2
PACKAGE_PATH=$1

#Verzeichnisse ... 
BASIS_DIR=/opt/tomcat/webapps/axis
WEBINF_DIR=$BASIS_DIR/WEB-INF
SOURCE_DIR=$WEBINF_DIR/src
CLASSES_DIR=$WEBINF_DIR/classes
DEPLOY_DIR=$BASIS_DIR/wsdd
TEMPLATE_DIR=$BASIS_DIR/template

WSDD_DEPLOY_FILE=$2.deploy.wsdd
WSDD_UNDEPLOY_FILE=$2.undeploy.wsdd

# Classpath
CLASSPATH=.:lib/activation.jar:lib/axis.jar:lib/axis-ant.jar:lib/commons-discovery-0.2.jar:lib/commons-logging-1.0.4.jar:lib/jaxrpc.jar:lib/log4j.jar:lib/mail.jar:lib/saaj.jar:lib/wsdl4j.jar

# die Java-Klassen kompilieren....
cd $SOURCE_DIR
find -type d -exec mkdir $CLASSES_DIR/{} 2>/dev/null \;
find -iname "*.java" -exec javac -classpath $CLASSPATH -d $CLASSES_DIR {} \;

# Deploy-File erzeugen...
cat $TEMPLATE_DIR/deploy.wsdd | sed -e 's/$CLASSNAME/'"$CLASSNAME"'/;s/$PACKAGE_PATH/'"$PACKAGE_PATH"'/' >$DEPLOY_DIR/$WSDD_DEPLOY_FILE

# Undeploy-File erzeugen...
cat $TEMPLATE_DIR/undeploy.wsdd | sed -e 's/$CLASSNAME/'"$CLASSNAME"'/;s/$PACKAGE_PATH/'"$PACKAGE_PATH"'/' >$DEPLOY_DIR/$WSDD_UNDEPLOY_FILE

#Das eigentliche Deployen...
cd $WEBINF_DIR
java -cp $CLASSPATH  org.apache.axis.client.AdminClient $DEPLOY_DIR/$CLASSNAME.deploy.wsdd
```

Der Aufruf:

```
# ./deploy.sh myPackage myClass
```

Jetzt das Skript fürs Undeployen...


```
#!/bin/sh

# Package & Klasse?
CLASSNAME=$2
PACKAGE_PATH=$1

#Verzeichnisse ... 
BASIS_DIR=/opt/tomcat/webapps/axis
WEBINF_DIR=$BASIS_DIR/WEB-INF
SOURCE_DIR=$WEBINF_DIR/src
CLASSES_DIR=$WEBINF_DIR/classes
DEPLOY_DIR=$BASIS_DIR/wsdd
TEMPLATE_DIR=$BASIS_DIR/template

WSDD_DEPLOY_FILE=$2.deploy.wsdd
WSDD_UNDEPLOY_FILE=$2.undeploy.wsdd

# Classpath
CLASSPATH=.:lib/activation.jar:lib/axis.jar:lib/axis-ant.jar:lib/commons-discovery-0.2.jar:lib/commons-logging-1.0.4.jar:lib/jaxrpc.jar:lib/log4j.jar:lib/mail.jar:lib/saaj.jar:lib/wsdl4j.jar

cd $WEBINF_DIR

# Das Undeployen...
java -cp $CLASSPATH org.apache.axis.client.AdminClient $DEPLOY_DIR/$WSDD_UNDEPLOY_FILE
```

Der Aufruf:

```
# ./undeploy.sh myPackage myClass
```

und wer sich die Skipte aufmerksam angesehen hat, sucht noch die Templates:

deploy-Template:


```
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  <service name="$CLASSNAME" provider="java:RPC">
    <parameter name="className" value="$PACKAGE_PATH.$CLASSNAME" />
    <parameter name="allowedMethods" value="*" />
    <parameter name="scope" value="Request" />
  </service>
</deployment>
```

und undeploy-Template:


```
<undeployment xmlns="http://xml.apache.org/axis/wsdd/">
  <service name="$CLASSNAME" />
</undeployment>
```

Wers braucht.. viel Spaß damit...

Clemens


----------

