# Eclipse, Axis und Ant



## aikar (19. Sep 2007)

Ich versuche mich gerade ein wenig an der Entwicklung von Webservices über Axis.
Wenn ich das Service direkt in der shell starte (jar-Files in den Classpath laden und dann java org.apache.axis.client.AdminClient deploy.wsdd) funktionierts auch.
Jetzt wollt ich das Setzen des Classpathes und den Aufruf direkt in Eclipse über Ant machen:


```
<project name="AppisSoapSimulator" default="deployService" basedir="."> 

    <target name="deployService" description="Starts the service"> 
		
    	<java classname="org.apache.axis.client.AdminClient"> 

    		<classpath>
    	     	<pathelement path="${classpath}"/>
    	        <pathelement location="WEB-INF/lib/axis.jar"/>
    	        <pathelement location="WEB-INF/lib/jaxrpc.jar"/>
    	        <pathelement location="WEB-INF/lib/log4j.jar"/>
    	        <pathelement location="WEB-INF/lib/commons-logging.jar"/>
    	    	<pathelement location="WEB-INF/lib/commons-discovery.jar"/>
    	    	<pathelement location="WEB-INF/lib/saaj.jar"/>
    	      	<pathelement location="WEB-INF/lib/activation.jar"/>
    	        <pathelement location="WEB-INF/lib/axis-ant.jar"/>
    	        <pathelement location="WEB-INF/lib/mail.jar"/>
    	    	<pathelement location="WEB-INF/lib/wsdl4j.jar"/>
    	    </classpath>
              <arg value="WEB-INF/deployAppisSoapSimulator.wsdd"/> 
         </java> 
    </target> 

</project>
```

Die jars werden auch alle gefunden, aber ich bekomme:



> Buildfile: /windows/d/Eigene Dateien/Arbeit/appis_soap_simulator/build.xml
> deployService:
> 
> ```
> ...


----------



## Niki (19. Sep 2007)

Warum verwendest du nicht einfach die ant-Tasks vom axis?

```
<property name="lib.dir" value="[dein lib-Verzeichnis]" />

<property name="axis.home" value="${lib.dir}/axis/1.4" />

<property name="ws.servletpath" value="[deine WebApp]/services/AdminService" />

<path id="axis.classpath">
		<fileset dir="${axis.home}/lib">
			<include name="**/*.jar" />
		</fileset>
	</path>

<taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />

<target name="installws>
		<axis-admin port="8080"
		            hostname="localhost"
		            failonerror="true"
		            servletpath="${ws.servletpath}"
		            debug="true"
		            xmlfile="[dein wsdd File]" />
	</target>
```


----------



## aikar (19. Sep 2007)

Danke für die prompte Antwort. 
Ich bin leider in ant nicht sonderlich erfahren und bei einigen der Pfade bin ich jetzt etwas verwirrt.

Mein Projektbaum (als Tomcat-Projekt angelegt):

appis_soap_simulator
- WEB-INF/src
- - appis_soap_simulator
- - - AppisSoapSimulator.java
- work (Im Moment leer)
-  WEB-INF 
- - lib
- - - <Alle axis-jars + mail.jar + activation.jar + xmlsec.jar>
- - deployAppisSoapSimulator.wsdd
- - undeployAppisSoapSimulator.wsdd
- - web.xml
- build.xml


Mein Versuch mit

```
<project name="AppisSoapSimulator" default="deployService" basedir="."> 


	<property name="lib.dir" value="web-inf/lib" />


	<property name="ws.servletpath" value="web-inf/classes/AppisSoapSimulator" />

	<path id="axis.classpath">
	<fileset dir="web-inf/lib">
	<include name="**/*.jar" />
	</fileset>
	</path>

	<taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />

	<target name="deployService">
	<axis-admin port="8080"
	hostname="localhost"
	failonerror="true"
	servletpath="${ws.servletpath}"
	debug="true"
	xmlfile="web-inf/deployAppisSoapSimulator.wsdd" />
	</target>
	
</project>
```

führte zu 


> Buildfile: /windows/d/Eigene Dateien/Arbeit/appis_soap_simulator/build.xml
> deployService:
> [axis-admin] Processing file /windows/d/Eigene Dateien/Arbeit/appis_soap_simulator/web-inf/deployAppisSoapSimulator.wsdd
> [axis-admin] AxisFault
> ...


----------



## Niki (19. Sep 2007)

ws.servletpath muss auf die webapplikation zeigen. Heisst deine Web-Applikation z.B. myapp dann muss das Property gesetzt werden auf: myapp/services/AdminService

ansonsten seh ich eigentlich keinen Fehler

Sag bescheid wenn du es geschafft hast bzw. ein Fehler auftritt


----------



## aikar (19. Sep 2007)

Ich bekomm immer wieder den selben Fehler.

services/AdminService gibts bei mir aber auch nirgends.

Meinen wir auch sicher beide die selbe Problemstellung? Ich will ein service deployen und nicht auf eines zugreifen.


----------



## Niki (19. Sep 2007)

Du wirst doch sicher im Tomcat deine Web-Applikation deployed haben. Dort müssen sich natürlich auch die axis Bibliotheken befinden. Im web.xml müssen die Servlets vom axis auch eingetragen sein. Im axis-Verzeichnis gibts eine webapp. Die kannst du einfach in den Tomcat kopieren, umbenennen die web.xml anpassen und deine Applikation ins lib Verzeichnis stellen. Bist du dir 100% sicher dass es von der command-line funktioniert hat? Hast du das Service nachher ansprechen können?


----------



## aikar (19. Sep 2007)

In der shell-Version hab ichs im Tomcat-Ordner (In webapps\axis\WEB-INF) gehabt, ja.
Aber auch da hab ich nichts mit der web.xml gemacht.
Ich hab mich dabei an diese Anleitung gehalten.
Ich hatte gehofft, dass Eclipse die Ordnerstruktur irgendwie seperieren kann.

Hier beschreibt der selbe Author die Entwicklung in Eclipse. Aber auch dabei startet er dann das Service in der shell und eben das wollte ich vermeiden.


----------



## aikar (19. Sep 2007)

Ich habs in der Shell nochmal getestet, das Service funktioniert.


----------



## Niki (20. Sep 2007)

Nun, ich kann dir nur sagen wie ich es bisher immer gemacht habe. Ich hab die relevaten java-Archive von axis (1.4) in meine WebApplikation übernommen und meine web.xml mit den Servlets von axis erweitert. Dafür sind folgende Einträge notwendig:

```
<listener>
        <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
    </listener>
    
  <servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>
        org.apache.axis.transport.http.AxisServlet
    </servlet-class>
  </servlet>

  <servlet>
    <servlet-name>AdminServlet</servlet-name>
    <display-name>Axis Admin Servlet</display-name>
    <servlet-class>
        org.apache.axis.transport.http.AdminServlet
    </servlet-class>
    <load-on-startup>100</load-on-startup>
  </servlet>

  <servlet>
    <servlet-name>SOAPMonitorService</servlet-name>
    <display-name>SOAPMonitorService</display-name>
    <servlet-class>
        org.apache.axis.monitor.SOAPMonitorService
    </servlet-class>
    <init-param>
      <param-name>SOAPMonitorPort</param-name>
      <param-value>5001</param-value>
    </init-param>
    <load-on-startup>100</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/servlet/AxisServlet</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>*.jws</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>SOAPMonitorService</servlet-name>
    <url-pattern>/SOAPMonitor</url-pattern>
  </servlet-mapping> 

    <session-config>
        
        <session-timeout>5</session-timeout>
    </session-config>

    <!-- currently the W3C havent settled on a media type for WSDL;
    [url]http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft[/url]
    for now we go with the basic 'it's XML' response -->
  <mime-mapping>
    <extension>wsdl</extension>
     <mime-type>text/xml</mime-type>
  </mime-mapping>
  

  <mime-mapping>
    <extension>xsd</extension>
    <mime-type>text/xml</mime-type>
  </mime-mapping>
```

Soweit ich axis verstanden habe wird zum deployen eines WebService ein Servlet herangezogen. Dieses wird oben definiert. Bei mir hat es bis jetzt immer so funktioniert


----------



## aikar (20. Sep 2007)

Ich hab die Lösung gefunden!

Als servletpath musste ich

```
<property name="ws.servletpath" value="axis/services/AppisSoapSimulator" />
```
eintragen. Jetzt gehts.

Vielen, vielen Dank für deine Hilfe.

Eine letzte Frage noch:
Kann ich das Service auch über Ant wieder undeployen?


----------



## Niki (24. Sep 2007)

Ich denke schon. Gib einfach das undeploy.wsdd mal als xmlfile beim admin-task an


----------

