﻿<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->
<document xmlns="http://maven.apache.org/XDOC/2.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
  <properties>
    <title>Installation instructions</title>
  </properties>
  <body>

<section name="Table of Contents">

<macro name="toc"/>

</section>

<section name="Introduction">

<p>This document describes how to install Apache Axis. It assumes you already know how to write and run Java code and are not afraid of XML. You should also have an application server or servlet engine and be familiar with operating and deploying to it. If you need an application server, we recommend <a href="http://jakarta.apache.org/tomcat/">Jakarta Tomcat</a>. [If you are installing Tomcat, get the latest 4.1.x version, and the full distribution, not the LE version for Java 1.4, as that omits the Xerces XML parser]. Other servlet engines are supported, provided they implement version 2.2 or greater of the servlet API. Note also that Axis client and server requires Java 1.3 or later.</p>

<p>For more details on using Axis, please see the <a href="user-guide.html">user guide</a>.</p>

</section>

<section name="Things you have to know">

<p>A lot of problems with Axis are encountered by people who are new to Java, server-side Java and SOAP. While you can learn about SOAP as you go along, writing Axis clients and servers is not the right time to be learning foundational Java concepts, such as what an array is, or basic application server concepts such as how servlets work, and the basics of the HTTP protocol.</p>

<p>Things you need to know before writing a Web Service:</p>

<ol>
  <li>Core Java datatypes, classes and programming concepts.</li>
  <li>What threads are, race conditions, thread safety and sychronization.</li>
  <li>What a classloader is, what hierarchical classloaders are, and the common causes of a "ClassNotFoundException".</li>
  <li>How to diagnose trouble from exception traces, what a NullPointerException (NPE) and other common exceptions are, and how to fix them.</li>
  <li>What a web application is; what a servlet is, where classes, libraries and data go in a web application.</li>
  <li>How to start your application server and deploy a web application on it.</li>
  <li>What a network is, the core concepts of the IP protocol suite and the sockets API. Specifically, what is TCP/IP.</li>
  <li>What HTTP is. The core protocol and error codes, HTTP headers and perhaps the details of basic authentication.</li>
  <li>What XML is. Not necessarily how to parse it or anything, just what constitutes well-formed and valid XML.</li>
</ol>

<p>Axis and SOAP depends on all these details. If you don't know them, Axis (or anyone else's Web Service middleware) is a dangerous place to learn. Sooner or later you will be forced to discover these details, and there are easier places to learn than Axis.</p>

<p>If you are completely new to Java, we recommend you start off with things like the Java Tutorials on Sun's web site, and perhaps a classic book like <a href="http://www.mindview.net/Books/TIJ/">Thinking in Java</a>, until you have enough of a foundation to be able to work with Axis. It is also useful to have written a simple web application, as this will give you some knowledge of how HTTP works, and how Java application servers integrate with HTTP. You may find the course notes from <a href="http://www.cs.indiana.edu/classes/a348-dger/fall2002/notes/"> Mastering the World Wide Web</a> useful in this regard, even though Axis is only introduced in lecture 28.</p>

<p>Be aware that there is a lot more needed to be learned in order to use Axis and SOAP effectively than the listing above. The other big area is "how to write internet scale distributed applications". Nobody knows how to do that properly yet, so that you have to learn this by doing.</p>

</section>

<section name="Step 0: Concepts">

<p>Apache Axis is an Open Source SOAP server and client. SOAP is a mechanism for inter-application communication between systems written in arbitrary languages, across the Internet. SOAP usually exchanges messages over HTTP: the client POSTs a SOAP request, and receives either an HTTP success code and a SOAP response or an HTTP error code. Open Source means that you get the source, but that there is no formal support organisation to help you when things go wrong.</p>

<p>SOAP messages are XML messages. These messages exchange structured information between SOAP systems. Messages consist of one or more SOAP elements inside an envelope, Headers and the SOAP Body. SOAP has two syntaxes for describing the data in these elements, <i>Section 5</i>, which is a clear descendant of the XML RPC system, and <i>XML Schema</i>, which is the newer (and usually better) system. Axis handles the magic of converting Java
objects to SOAP data when it sends it over the wire or receives results. SOAP Faults are sent by the server when something goes wrong; Axis converts these to Java exceptions.</p>

<p>SOAP is intended to link disparate systems. It is not a mechanism to tightly bind Java programs written by the same team together. It can bind Java programs together, but not as tightly as RMI or Corba. If you try sending many Java objects that RMI would happily serialize, you will be disappointed at how badly Axis fails. This is by design: if Axis copied RMI and serialized Java objects to byte streams, you would be stuck to a particular
version of Java everywhere.</p>

<p>Axis implements the JAX-RPC API, one of the standard ways to program Java services. If you look at the specification and tutorials on Sun's web site, you will understand the API. If you code to the API, your programs will work with other implementations of the API, such as those by Sun and BEA. Axis also provides extension features that in many ways extends the JAX-RPC API. You can use these to write better programs, but these will only work with the Axis implementation. But since Axis is free and you get the source, that should not matter.</p>

<p>Axis is compiled in the JAR file <i>axis.jar</i>; it implements the JAX-RPC API declared in the JAR files <i>jaxrpc.jar</i> and <i>saaj.jar</i>. It needs various helper libraries, for logging, WSDL processing and introspection. All these files can be packaged into a web application, <i>axis.war</i>, that can be dropped into a servlet container. Axis ships with some sample SOAP services. You can add your own by adding new compiled classes to the Axis webapp and registering them.</p>

<p>Before you can do that, you have to install it and get it working.</p>

</section>

<section name="Step 1: Preparing the webapp">

<p>Here we assume that you have a web server up and running on the localhost at port 8080. If your server is on a different port, replace references to 8080 to your own port number.</p>

<p>In your Application Server installation, you should find a directory into which web applications ("webapps") are to be placed. Into this directory copy the webapps/axis directory from the xml-axis distribution. You can actually name this directory anything you want, just be aware that the name you choose will form the basis for the URL by which clients will access your service. The rest of this document assumes that the default webapp name, "axis" has been used; rename these references if appropriate. </p>

</section>

<section name="Step 2: Setting up the libraries">

<p>In the Axis directory, you will find a WEB-INF sub-directory. This directory contains some basic configuration information, but can also be used to contain the dependencies and web services you wish to deploy.</p>

<p>Axis needs to be able to find an XML parser. If your application server or Java runtime does not make one visible to web applications, you need to download and add it. Java 1.4 includes the Crimson parser, so you <i>can</i> omit this stage, though the Axis team prefer Xerces.</p>

<p>To add an XML parser, acquire the JAXP 1.1 XML compliant parser of your choice. We recommend Xerces jars from the <a href="http://xml.apache.org/dist/xerces-j/">xml-xerces distribution</a>, though others mostly work. Unless your JRE or app server has its own specific requirements, you can add the parser's libraries to axis/WEB-INF/lib. The examples in this guide use Xerces. This guide adds xml-apis.jar and xercesImpl.jar to the AXISCLASSPATH so that Axis can find the parser (<a href="#ClasspathSetup">see below</a>).</p>

<p>If you get ClassNotFound errors relating to Xerces or DOM then you do not have an XML parser installed, or your CLASSPATH (or AXISCLASSPATH) variables are not correctly configured.</p>

<subsection name="Tomcat 4.x and Java 1.4">

<p>Java 1.4 changed the rules as to how packages beginning in java.* and javax.* get loaded. Specifically, they only get loaded from <i>endorsed</i> directories. jaxrpc.jar and saaj.jar contain javax packages, so they may not get picked up. If happyaxis.jsp (see below) cannot find the relevant packages, copy them from axis/WEB-INF/lib to CATALINA_HOME/common/lib and restart Tomcat.</p>

</subsection>

<subsection name="WebLogic 8.1">

<p>WebLogic 8.1 ships with <code>webservices.jar</code> that conflicts with Axis' <code>saaj.jar</code> and prevents Axis 1.4 from working right out of the box. This conflict exists because WebLogic uses an older definition of <code>javax.xml.soap.*</code> package from <a href="http://java.sun.com/webservices/docs/1.0/api/javax/xml/soap"> Java Web Services Developer Pack Version 1.0</a>, whereas Axis uses a newer revision from J2EE 1.4.</p>

<p>However, there are two alternative configuration changes that enable Axis based web services to run on Weblogic 8.1.</p>

<ul> 
  <li>In a webapp containing Axis, set &lt;prefer-web-inf-classes&gt; element in <code>WEB-INF/weblogic.xml</code> to true.  An example of <code>weblogic.xml</code> is shown below:
<source>&lt;weblogic-web-app&gt;
  &lt;container-descriptor&gt;
    &lt;prefer-web-inf-classes&gt;true&lt;/prefer-web-inf-classes&gt;
  &lt;/container-descriptor&gt;
&lt;/weblogic-web-app&gt;</source>
<p>If set to <code>true</code>, the <code>&lt;prefer-web-inf-classes&gt;</code> element will force WebLogic's classloader to load classes located in the WEB-INF directory of a web application in preference to application or system classes. This is a recommended approach since it only impacts a single web module.</p>
  </li> 

  <li>In a script used to start WebLogic server, modify <code>CLASSPATH</code> property by placing Axis's <code>saaj.jar</code> library in front of WebLogic's <code>webservices.jar</code>.
<p><b>NOTE:</b> This approach impacts all applications deployed on a particular WebLogic instance and may prevent them from using WebLogic's webservices.</p></li>
</ul>
 
<p>For more information on how WebLogic's class loader works, see <a href="http://e-docs.bea.com/wls/docs81/programming/classloading.html">WebLogic Server Application Classloading</a>.</p>

</subsection>

</section>

<section name="Step 3: starting the web server">

<p>This varies on a product-by-product basis. In many cases it is as simple as double clicking on a startup icon or running a command from the command line.</p>

</section>

<section name="Step 4: Validate the Installation">

<p>After installing the web application and dependencies, you should make sure that the server is running the web application.</p>

<subsection name="Look for the start page">

<p>Navigate to the start page of the webapp, usually <a href="http://127.0.0.1:8080/axis/">http://127.0.0.1:8080/axis/</a>, though of course the port may differ.</p>

<p>You should now see an Apache-Axis start page. If you do not, then the webapp is not actually installed, or the appserver is not running.</p>

</subsection>

<subsection name="Validate Axis with happyaxis">

<p>Follow the link <i>Validate the local installation's configuration</i><br/>
This will bring you to <i>happyaxis.jsp</i> a test page that verifies that needed and optional libraries are present. The URL for this will be something like <a href="http://localhost:8080/axis/happyaxis.jsp">http://localhost:8080/axis/happyaxis.jsp</a></p>

<p>If any of the needed libraries are missing, Axis will not work.<br/>
<b>You must not proceed until all needed libraries can be found, and this validation page is happy.</b><br/>
Optional components are optional; install them as your need arises. If you see nothing but an internal server error and an exception trace, then you probably have multiple XML parsers on the CLASSPATH (or AXISCLASSPATH), and this is causing version confusion. Eliminate the extra parsers, restart the app server and try again.</p>

</subsection>

<subsection name="Look for some services">

<p>From the start page, select <i>View the list of deployed Web services</i>. This will list all registered Web Services, unless the servlet is configured not to do so. On this page, you should be able to click on <i>(wsdl)</i> for each deployed Web service to make sure that your web service is up and running.</p>

<p>Note that the 'instant' JWS Web Services that Axis supports are not listed in this listing here. The install guide covers this topic in detail.</p>

</subsection>

<subsection name="Test a SOAP Endpoint">

<p>Now it's time to test a service. Although SOAP 1.1 uses HTTP POST to submit an XML request to the <i>endpoint</i>, Axis also supports a crude HTTP GET access mechanism, which is useful for testing. First let's retrieve the version of Axis from the version endpoint, calling the <code>getVersion</code> method:</p>

<p><a href="http://localhost:8080/axis/services/Version?method=getVersion">http://localhost:8080/axis/services/Version?method=getVersion</a></p>

<p>This should return something like:</p>

<source>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;soapenv:Envelope
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
  &lt;soapenv:Body&gt;
    &lt;getVersionResponse
     soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"&gt;
      &lt;getVersionReturn
       xsi:type="xsd:string"&gt;
         Apache Axis version: 1.1 Built on Apr 04, 2003 (01:30:37 PST)
      &lt;/getVersionReturn&gt;
    &lt;/getVersionResponse&gt;
  &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</source>

<p>Your browser may display the result in a formatted way; be sure to check the source code of your returned page. The Axis version and build date may of course be different.</p>

</subsection>

<subsection name="Test a JWS Endpoint">

<p>Now let's test a JWS web service. Axis' JWS Web Services are java files you save into the Axis webapp <i>anywhere but the WEB-INF tree</i>, giving them the .jws extension. When someone requests the .jws file by giving its URL, it is compiled and executed. The user guide covers JWS pages in detail.</p>

<p>To test the JWS service, we make a request against a built-in example, EchoHeaders.jws (look for this in the axis/ directory).</p>

<p>Point your browser at <a href="http://localhost:8080/axis/EchoHeaders.jws?method=list">http://localhost:8080/axis/EchoHeaders.jws?method=list</a>.</p>

<p>This should return an XML listing of your application headers, such as</p>

<source>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;soapenv:Envelope
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
  &lt;soapenv:Body&gt;
    &lt;listResponse
     soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"&gt;
      &lt;listReturn xsi:type="soapenc:Array"
       soapenc:arrayType="xsd:string[6]"
       xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"&gt;
        &lt;item&gt;accept:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*&lt;/item&gt;
        &lt;item&gt;accept-language:en-us&lt;/item&gt;
        &lt;item&gt;accept-encoding:gzip, deflate&lt;/item&gt;
        &lt;item&gt;user-agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)&lt;/item&gt;
        &lt;item&gt;host:localhost:8080&lt;/item&gt;
        &lt;item&gt;connection:Keep-Alive&lt;/item&gt;
      &lt;/listReturn&gt;
    &lt;/listResponse&gt;
  &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</source>

<p>Again, the exact return values will be different, and you may need to change URLs to correct any host, port and webapp specifics.</p>

</subsection>

</section>

<section name="Step 5: Installing new Web Services">

<p>So far you have got Axis installed and working--now it is time to add your own Web Service.</p>

<p>The process here boils down to (1) get the classes and libraries of your new service into the Axis WAR directory tree, and (2) tell the AxisEngine about the new file. The latter is done by submitting an XML deployment descriptor to the service via the Admin web service, which is usually done with the AdminClient program or the &lt;axis-admin&gt; Ant task. Both of these do the same thing: they run the Axis SOAP client to talk to the Axis administration service, which is a SOAP service in its own right. It's also a special SOAP service in one regard--it is restricted to local callers only (not remote access) and is password protected to stop random people from administrating your service. There is a default password that the client knows; if you change it then you need to pass the new password to the client.</p>

<p>The first step is to add your code to the server.</p>

<p>In the WEB-INF directory, look for (or create) a "classes" directory (i.e. axis/WEB-INF/classes ). In this directory, copy the compiled Java classes you wish to install, being careful to preserve the directory structure of the Java packages.</p>

<p>If your classes services are already packaged into JAR files, feel free to drop them into the WEB-INF/lib directory instead. Also add any third party libraries you depend on into the same directory.</p>

<p>After adding new classes or libraries to the Axis webapp, you must restart the webapp. This can be done by restarting your application server, or by using a server-specific mechanism to restart a specific webapp.</p>

<p><b>Note:</b> If your web service uses the simple authorization handlers provided with xml-axis (this is actually <u>not</u> recommended as these are merely illustrations of how to write a handler than intended for production use), then you will need to copy the corresponding users.lst file into the
WEB-INF directory.</p>

</section>

<section name="Step 6: Deploying your Web Service">

<p>The various classes and JARs you have just set up implement your new Web Service. What remains to be done is to tell Axis how to expose this web service. Axis takes a Web Service Deployment Descriptor (WSDD) file that describes in XML what the service is, what methods it exports and other aspects of the SOAP endpoint.</p>

<p>The users guide and reference guide cover these WSDD files; here we are going to use one from the Axis samples: the stock quote service.</p>

<subsection name="Classpath setup">

<p>In order for these examples to work, java must be able to find axis.jar, commons-discovery.jar, commons-logging.jar, jaxrpc.jar, saaj.jar, log4j-1.2.8.jar (or whatever is appropriate for your chosen logging implementation), and the XML parser jar file or files (e.g., xerces.jar).  These examples do this by adding these files to AXISCLASSPATH and then specifying the AXISCLASSPATH when you run them. Also for these examples, we have copied the xml-apis.jar and xercesImpl.jar files into the AXIS_LIB directory.  An alternative would be to add your XML parser's jar file directly to the AXISCLASSPATH variable or to add all these files to your CLASSPATH variable.</p>

<p>On Windows, this can be done via the following. For this document we assume that you have installed Axis in C:\axis. To store this information permanently in WinNT/2000/XP you will need to right click on "My Computer" and select "Properties". Click the "Advanced" tab and create the new environmental variables.  It is often better to use WordPad to create the variable string and then paste it into the appropriate text field.</p>

<source>set AXIS_HOME=c:\axis
set AXIS_LIB=%AXIS_HOME%\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.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar;
  %AXIS_LIB%\wsdl4j.jar
</source>

<p>Unix users have to do something similar. Below we have installed AXIS into /usr/axis and are using the bash shell. See your shell's documentation for differences. To make variables permanent you will need to add them to your shell's startup (dot) files. Again, see your shell's documentation.</p>

<source>set AXIS_HOME=/usr/axis
set AXIS_LIB=$AXIS_HOME/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.8.jar:$AXIS_LIB/xml-apis.jar:$AXIS_LIB/xercesImpl.jar:
  $AXIS_LIB/wsdl4j.jar
export AXIS_HOME; export AXIS_LIB; export AXISCLASSPATH</source>

<p>To use Axis client code, you can select AXISCLASSPATH when invoking Java by entering</p>

<source>java -cp %AXISCLASSPATH% ...</source>

<p>or</p>

<source>java -cp "$AXISCLASSPATH" ...</source>

<p>depending on the platform. You may omit the quotes if your CLASSPATH doesn't have spaces in it.</p>

<p>Also, it is probably a good time to add the AXISCLASSPATH variable to your CLASSPATH variable.  This will enable you to not include the AXISCLASSPATH variable when launching the examples in this guide.  This document assumes that you have NOT done this.</p>

</subsection>

<subsection name="Find the deployment descriptor">

<p>Look in axis/samples/stock for the file deploy.wsdd. This is the deployment descriptor we want to tell Axis about. Deployment descriptors are an Axis-specific XML file that tells Axis how to deploy (or undeploy) a Web Service, and how to configure Axis itself. The Axis Administration Web Service lets the AdminClient program and its Ant task counterpart submit a new WSDD file for interpretation. The Axis 'engine' will update its configuration, then save its state.</p>

<p>By default Axis saves it state into the global configuration file axis/WEB-INF/server-config.wsdd. Sometimes you see a warning message about such a file not being found--don't worry about this, because Axis auto-creates the file after you deploy something to it. You can check in the webapp to see what this file looks like--and even copy it to other systems if you want to give them identical configurations. Note that Axis needs an expanded web application <i>and</i> write access to the WEB-INF dir to save its state in this location.</p>

</subsection>

<subsection name="Run the admin client">

<p>Execute the following command from the samples/stock directory.  If you are not in this directory you will get a "java.io.FileNotFoundException: deploy.wsdd (The system cannot find the file specified)" exception.</p>

<table>
  <tr>
    <td><b>On Windows</b>
<source>java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient
     -lhttp://localhost:8080/axis/services/AdminService deploy.wsdd</source>
<b>On UNIX</b>
<source>java -cp $AXISCLASSPATH org.apache.axis.client.AdminClient
     -lhttp://localhost:8080/axis/services/AdminService deploy.wsdd</source>
    </td>
  </tr>
</table>

<p>If you get some java client error (like ClassNotFoundException), then you haven't set up your AXISCLASSPATH (or CLASSPATH) variable right, mistyped the classname, or did some other standard error. Tracking down such problems are foundational Java development skills--if you don't know how to do these things, learn them now!</p>

<p><b>Note:</b> You may need to replace localhost with your host name, and 8080 with the port number used by your web server. If you have renamed the web application to something other than "axis" change the URL appropriately.</p>

<p>If you get some AxisFault listing, then the client is working, but the deployment was unsuccessful. This is where the knowledge of the sockets API to TCP and the basics of the HTTP that Web Service development requires begins to be needed. If you got some socket error like connection refused, the computer at the far end isn't talking to you, so find the cause of that and fix it. If you get an HTTP error code back find out what the error means and correct the problem.  These skills are fundamental to using web services.</p>

<p>The <a href="user-guide.html">user's guide</a> covers the AdminClient in more detail, and there is also an <a href="ant/axis-admin.html">Ant task</a> to automate the use of Axis in your Ant build scripts.</p>

</subsection>

</section>

<section name="Step 7: Testing">

<p>This step is optional, but highly recommended. For illustrative purposes, it is presumed that you have installed and deployed the stock quote demo.</p>

<ul>
  <li>Change directory to the distribution directory for xml-axis and execute the following command (or its Unix equivalent):
<table>
  <tr>
    <td><b>On Windows</b>
<source>java -cp .;%AXISCLASSPATH% samples.stock.GetQuote
     -lhttp://localhost:8080/axis/servlet/AxisServlet
     -uuser1 -wpass1 XXX</source>
<b>On UNIX</b>
<source>java -cp .:$AXISCLASSPATH samples.stock.GetQuote
     -lhttp://localhost:8080/axis/servlet/AxisServlet
     -uuser1 -wpass1 XXX</source>
    </td>
  </tr>
</table>
  </li>

  <li>You should get back "55.25" as a result.</li>
</ul>

<p><b>Note:</b> Again, you may need to replace localhost with your host name, and 8080 with the port number used by your web server. If you have renamed the web application to something other than "axis" change the URL appropriately.</p>

</section>

<section name="Advanced Installation: adding Axis to your own Webapp">

<p>If you are experienced in web application development, and especially if you wish to add web services to an existing or complex webapp, you can take an alternate approach to running Axis. Instead of adding your classes to the Axis webapp, you can add Axis to your application.</p>

<p>The core concepts are</p>

<ol>
  <li>Add axis.jar, wsdl.jar, saaj.jar, jaxrpc.jar and the other dependent libraries to your WAR file.</li>

  <li>Copy all the Axis Servlet declarations and mappings from axis/WEB-INF/web.xml and add them to your own web.xml</li>

  <li>Build and deploy your webapp.</li>

  <li>Run the Axis AdminClient against your own webapp, instead of Axis, by changing the URL you invoke it with.</li>
</ol>

<p>The process is also covered in Chapter 15 of <a href="http://www.manning.com/hatcher">Java Development with Ant</a>, which can be downloaded as a <a href="http://www.manning-source.com/books/hatcher/hatcher_ch15.pdf">PDF file</a>.</p>

</section>

<section name="What if it doesn't work?">

<p>Axis is a complicated system to install. This is because it depends on the underlying functionality of your app server, has a fairly complex configuration, and, like all distributed applications, depends upon the network too.</p>

<p>We see a lot of people posting their problems on the axis-user mailing list, and other Axis users as well as the Axis developers do their best to help when they can. But before you rush to post your own problems to the mailing list, a word of caution:</p>

<p>Axis is free. This means nobody gets paid to man the support lines. All the help you get from the community is voluntary and comes from the kindness of their hearts. They may be other users, willing to help you get past the same hurdles they had to be helped over, or they may be the developers themselves. But it is all voluntary, so you may need to keep your expectations low!</p>

<ol>
  <li>Post to the <a href="mailto:axis-user@ws.apache.org">user mail</a> list, not the developer list. You may think the developer mail list is a short cut to higher quality answers. But the developers are also on the user list along with many other skilled users--so more people will be able to answer your questions. Also, it is helpful for all user issues to be on one list to help build the searchable mailing list archive.</li>

  <li>Don't ask non-Axis-related questions. The list is not the place to ask about non-Axis, non-SOAP, problems. Even questions about the MS Soap toolkit or .NET client side, don't get many positive answers--we avoid them. That also goes for the Sun Java Web Services Developer Pack, or the Jboss.net stuff that they've done with Axis.</li>

  <li>Never bother posting to the soapbuilders mailing list either, that is only for people developing SOAP toolkits, not using them--all off-topic messages are pointedly ignored.</li>

  <li>There is no guarantee that anyone will be able to solve your problem. The usual response in such a situation is silence, for a good reason: if everybody who didn't know the answer to a question said "I don't know", the list would be overflowed with noise. Don't take silence personally.</li>

  <li>Never expect an immediate answer. Even if someone knows the answer, it can take a day or two before they read their mail. So if you don't get an answer in an hour or two, don't panic and resend. Be patient. And put the time to use by trying to solve your problems yourself.</li>

  <li>Do your homework first. This document lists the foundational stuff you need to understand. It has also warned you that it can take a day to get a reply. Now imagine you get a HTTP Error '404' on a SOAP call. Should you rush to post a 'help' request, or should you try and find out what an HTTP error code is, what #404 usually means and how to use a Java debugger. We provide the source to make that debugging easier :)</li>

  <li>Post meaningful subject lines. You want your message read, not deleted unread. A subject line of 'Axis problem', 'Help with Axis', etc. is not meaningful, and is not likely to get many readers.</li>

  <li>Search the <a href="http://mail-archives.apache.org/eyebrowse/SummarizeList?listId=209">mailing list archives</a> FIRST to see if someone had the same problem. This list is searchable--and may save you much time in getting an answer to your problem.</li>

  <li>Use the <a href="http://issues.apache.org/jira/">jira</a> database to search for Axis bugs, both open and closed.</li>

  <li>Consult the <a href="http://wiki.apache.org/ws/FrontPage/Axis">Axis Wiki</a> for its Frequently Asked Questions (FAQ), installation notes, interoperability issues lists, and other useful information.</li>

  <li>Don't email people for help directly, unless you know them. It's rude and presumptuous. Messages sent over the mail list benefit the whole community--both the original posters and people who search the list. Personal messages just take up the recipients time, and are unwelcome. Usually, if not ignored outright, recipients of personal requests will just respond 'ask the mail list' anyway!</li>

  <li>Know that configuration problems are hard to replicate, and so can be difficult to get help on. We have tried with the happyaxis.jsp demo to automate the diagnostics gathering for you, but it can be hard for people to be of help here, especially for obscure platforms.</li>

  <li>Keep up to date with Axis releases, even the beta copies of forthcoming releases. You wouldn't want your problem to be a bug that was already known and fixed in a more recent release. Often the common response to any question is 'have you tried the latest release'.</li>

  <li>Study and use the source, and fix it when you find defects. Even fix the documentation when you find defects. It is only through the participation of Axis' users that it will ever get better.</li>
</ol>

<p>Has this put you off joining and participating in the Axis user mail list? We hope not--this list belongs to the people who use Axis and so will be your peers as your project proceeds. We just need for you to be aware that it is not a 24x7 support line for people new to server side Java development, and that you will need to be somewhat self sufficient in this regard. It is not a silver bullet. However, knowing how to make effective use of the list will help you develop better with Axis. </p>

</section>

<section name="Summary">

<p>Axis is simply an implementation of SOAP which can be added to your own webapp, and a webapp which can host your own web services. Installing it can be a bit fiddly, especially given Java 1.4's stricter requirements. If you follow a methodical process, including testing along the way, using happyaxis and the bundled test services, you will find it easier to get started with Axis.</p>

</section>

<section name="Appendix: Enabling the SOAP Monitor">

<p>SOAP Monitor allows for the monitoring of SOAP requests and responses via a web browser with Java plug-in 1.3 or higher. For a more comprehensive explanation of its usage, read <a href="user-guide.html#AppendixUsingTheSOAPMonitor">Using the SOAP Monitor</a> in the User's Guide.</p>

<p>By default, the SOAP Monitor is not enabled. The basic steps for enabling it are compiling the SOAP Monitor java applet, deploying the SOAP Monitor web service and adding request and response flow definitions for each monitored web service. In more detail:</p>

<ol> 
  <li>Go to $AXIS_HOME/webapps/axis (or %AXIS_HOME%\webapps\axis) and compile SOAPMonitorApplet.java.<br/>
    <table>
      <tr>
        <td>
          <b>On Windows</b>
          <source>javac -classpath %AXIS_HOME%\lib\axis.jar SOAPMonitorApplet.java</source>
          <b>On Unix</b>
          <source>javac -classpath $AXIS_HOME/lib/axis.jar SOAPMonitorApplet.java</source>
        </td>
      </tr>
    </table>
    <p>Copy all resulting class files (i.e. SOAPMonitorApplet*.class) to the root directory of the web application using the SOAP Monitor (e.g. .../tomcat/webapps/axis)</p>
  </li> 
  <li>Deploy the SOAPMonitorService web service with the admin client and the deploy-monitor.wsdd file (shown below).<br/>
    <p>Go to the directory deploy-monitor.wsdd is located and execute the command below. The command assume that /axis is the intended web application and it is available on port 8080.</p>
    <table>
      <tr>
        <td>
          <b>On Windows</b>
          <source>java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient 
     -lhttp://localhost:8080/axis/services/AdminService deploy-monitor.wsdd</source>
          <b>On UNIX</b>
          <source>java -cp $AXISCLASSPATH org.apache.axis.client.AdminClient
     -lhttp://localhost:8080/axis/services/AdminService deploy-monitor.wsdd</source>
        </td>
      </tr>
    </table>
    <b>SOAPMonitorService Deployment Descriptor (deploy-monitor.wsdd)</b>
    <source>&lt;deployment xmlns=&quot;http://xml.apache.org/axis/wsdd/&quot; 
            xmlns:java=&quot;http://xml.apache.org/axis/wsdd/providers/java&quot;&gt; 
  &lt;handler name=&quot;soapmonitor&quot; 
           type=&quot;java:org.apache.axis.handlers.SOAPMonitorHandler&quot;&gt; 
    &lt;parameter name=&quot;wsdlURL&quot; 
               value=&quot;/axis/SOAPMonitorService-impl.wsdl&quot;/&gt; 
    &lt;parameter name=&quot;namespace&quot; 
               value=&quot;http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl&quot;/&gt; 
    &lt;parameter name=&quot;serviceName&quot; value=&quot;SOAPMonitorService&quot;/&gt; 
    &lt;parameter name=&quot;portName&quot; value=&quot;Demo&quot;/&gt; 
  &lt;/handler&gt; 
  &lt;service name=&quot;SOAPMonitorService&quot; provider=&quot;java:RPC&quot;&gt; 
    &lt;parameter name=&quot;allowedMethods&quot; value=&quot;publishMessage&quot;/&gt; 
    &lt;parameter name=&quot;className&quot; 
               value=&quot;org.apache.axis.monitor.SOAPMonitorService&quot;/&gt; 
    &lt;parameter name=&quot;scope&quot; value=&quot;Application&quot;/&gt; 
  &lt;/service&gt;
&lt;/deployment&gt;</source>
  </li> 
  <li>For each service that is to be monitored, add request and response flow definitions to the service's deployment descriptor and deploy (or redeploy) the service. The <span style="font-weight: bold;">requestFlow</span> and <span style="font-weight: bold;"> responseFlow</span> definitions follow the start tag of the <span style="font-weight: bold;"> &lt;service&gt;</span> element. If a service is already deployed, undeploy it and deploy it with the modified deployment descriptor. An example is shown below:
    <source>... 
   &lt;service name=&quot;xmltoday-delayed-quotes&quot; provider=&quot;java:RPC&quot;&gt; 
     &lt;requestFlow&gt; 
       &lt;handler type=&quot;soapmonitor&quot;/&gt; 
     &lt;/requestFlow&gt; 
     &lt;responseFlow&gt; 
       &lt;handler type=&quot;soapmonitor&quot;/&gt; 
     &lt;/responseFlow&gt; 
       ...</source> 
  </li> 
  <li>With a web browser, go to http[s]://host[:port][/webapp]/SOAPMonitor (e.g. http://localhost:8080/axis/SOAPMonitor) substituting the correct values for your web application. This will show the SOAP Monitor applet for viewing service requests and responses. Any requests to services that have been configured and deployed correctly should show up in the applet.</li> 
</ol> 

</section>

  </body>
</document>
