<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at May 1, 2013
 | Rendered using Apache Maven Fluido Skin 1.3.0
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20130501" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis - 
    Installation instructions</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.3.0.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />

      
    <script type="text/javascript" src="./js/apache-maven-fluido-1.3.0.min.js"></script>

    
            </head>
        <body class="topBarDisabled">
          
                
                    
    
        <div class="container-fluid">
          <div id="banner">
        <div class="pull-left">
                                <div id="bannerLeft">
                <h2>Axis</h2>
                </div>
                      </div>
        <div class="pull-right">                                <a href="./" id="bannerRight">
                                                                                                <img src="images/axis-small.png"  alt="Apache Axis"/>
                </a>
      </div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
                
                    
                              <li class="">
                    <a href="http://www.apache.org/" class="externalLink" title="Apache">
        Apache</a>
        </li>
      <li class="divider ">/</li>
            <li class="">
                    <a href="../../" title="Axis">
        Axis</a>
        </li>
      <li class="divider ">/</li>
            <li class="">
                    <a href="../" title="Axis 1.x">
        Axis 1.x</a>
        </li>
      <li class="divider ">/</li>
            <li class="">
                    <a href="./" title="Java">
        Java</a>
        </li>
      <li class="divider ">/</li>
        <li class="">
    Installation instructions</li>
        
                
                    
                  <li id="publishDate" class="pull-right">Last Published: 2013-05-01</li> <li class="divider pull-right">|</li>
              <li id="projectVersion" class="pull-right">Version: 1.4.1-SNAPSHOT</li>
            
                            </ul>
      </div>

            
      <div class="row-fluid">
        <div id="leftColumn" class="span3">
          <div class="well sidebar-nav">
                
                    
                <ul class="nav nav-list">
                    <li class="nav-header">About</li>
                                
      <li>
    
                          <a href="index.html" title="Introduction">
          <i class="none"></i>
        Introduction</a>
            </li>
                  
      <li>
    
                          <a href="issue-tracking.html" title="Issue Tracking">
          <i class="none"></i>
        Issue Tracking</a>
            </li>
                  
      <li>
    
                          <a href="mail-lists.html" title="Mailing Lists">
          <i class="none"></i>
        Mailing Lists</a>
            </li>
                  
      <li>
    
                          <a href="source-repository.html" title="Source Repository">
          <i class="none"></i>
        Source Repository</a>
            </li>
                  
      <li>
    
                          <a href="artifacts.html" title="Artifacts & Dependencies">
          <i class="none"></i>
        Artifacts & Dependencies</a>
            </li>
                  
      <li>
    
                          <a href="apiDocs/index.html" title="Javadocs">
          <i class="none"></i>
        Javadocs</a>
            </li>
                              <li class="nav-header">Downloads</li>
                                
      <li>
    
                          <a href="releases.html" title="Releases">
          <i class="none"></i>
        Releases</a>
            </li>
                                                                                                                                            
      <li>
    
                          <a href="changelog.html" title="Changelogs">
          <i class="icon-chevron-right"></i>
        Changelogs</a>
                  </li>
                  
      <li>
    
                          <a href="snapshots.html" title="Snapshots">
          <i class="none"></i>
        Snapshots</a>
            </li>
                              <li class="nav-header">Documentation</li>
                                
      <li>
    
                          <a href="overview.html" title="Overview">
          <i class="none"></i>
        Overview</a>
            </li>
                  
      <li class="active">
    
            <a href="#"><i class="none"></i>Installation</a>
          </li>
                  
      <li>
    
                          <a href="user-guide.html" title="User's Guide">
          <i class="none"></i>
        User's Guide</a>
            </li>
                  
      <li>
    
                          <a href="developers-guide.html" title="Developer's Guide">
          <i class="none"></i>
        Developer's Guide</a>
            </li>
                  
      <li>
    
                          <a href="integration-guide.html" title="Integration Guide">
          <i class="none"></i>
        Integration Guide</a>
            </li>
                  
      <li>
    
                          <a href="architecture-guide.html" title="Architecture Guide">
          <i class="none"></i>
        Architecture Guide</a>
            </li>
                  
      <li>
    
                          <a href="reference.html" title="Reference Guide">
          <i class="none"></i>
        Reference Guide</a>
            </li>
                  
      <li>
    
                          <a href="reading.html" title="Reading Guide">
          <i class="none"></i>
        Reading Guide</a>
            </li>
                              <li class="nav-header">More...</li>
                                
      <li>
    
                          <a href="ant/ant.html" title="Ant Tasks">
          <i class="none"></i>
        Ant Tasks</a>
            </li>
                  
      <li>
    
                          <a href="maven/index.html" title="Maven Plugins">
          <i class="none"></i>
        Maven Plugins</a>
            </li>
                  
      <li>
    
                          <a href="castor/index.html" title="Castor Databinding">
          <i class="none"></i>
        Castor Databinding</a>
            </li>
                  
      <li>
    
                          <a href="xmlbeans/index.html" title="XmlBeans Databinding">
          <i class="none"></i>
        XmlBeans Databinding</a>
            </li>
                  
      <li>
    
                          <a href="transports/jms/index.html" title="JMS Transport">
          <i class="none"></i>
        JMS Transport</a>
            </li>
                  
      <li>
    
                          <a href="transports/http-hc3/index.html" title="HttpClient 3 Transport">
          <i class="none"></i>
        HttpClient 3 Transport</a>
            </li>
                  
      <li>
    
                          <a href="transports/http-javanet/index.html" title="java.net HTTP Transport">
          <i class="none"></i>
        java.net HTTP Transport</a>
            </li>
                  
      <li>
    
                          <a href="standalone-server/index.html" title="Stand-alone Server">
          <i class="none"></i>
        Stand-alone Server</a>
            </li>
                              <li class="nav-header">Apache</li>
                                
      <li>
    
                          <a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License">
          <i class="none"></i>
        License</a>
            </li>
                  
      <li>
    
                          <a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">
          <i class="none"></i>
        Sponsorship</a>
            </li>
                  
      <li>
    
                          <a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">
          <i class="none"></i>
        Thanks</a>
            </li>
                  
      <li>
    
                          <a href="http://www.apache.org/security/" class="externalLink" title="Security">
          <i class="none"></i>
        Security</a>
            </li>
            </ul>
                
                    
                            <form id="search-form" action="http://www.google.com/search" method="get" >
    
  <input value="ws.apache.org/axis/java" name="sitesearch" type="hidden"/>
  <input class="search-query" name="q" id="query" type="text" />
</form>
<script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=search-form"></script>
          
          <hr class="divider" />

           <div id="poweredBy">
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
      </a>
                  </div>
          </div>
        </div>
        
                
        <div id="bodyColumn"  class="span9" >
                                  
            <!-- ~ 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. -->
  

<div class="section"><h2>Table of Contents<a name="Table_of_Contents"></a></h2>

<ul><li><a href="#Table_of_Contents">Table of Contents</a></li><li><a href="#Introduction">Introduction</a></li><li><a href="#Things_you_have_to_know">Things you have to know</a></li><li><a href="#Step_0:_Concepts">Step 0: Concepts</a></li><li><a href="#Step_1:_Preparing_the_webapp">Step 1: Preparing the webapp</a></li><li><a href="#Step_2:_Setting_up_the_libraries">Step 2: Setting up the libraries</a><ul><li><a href="#Tomcat_4.x_and_Java_1.4">Tomcat 4.x and Java 1.4</a></li><li><a href="#WebLogic_8.1">WebLogic 8.1</a></li></ul></li><li><a href="#Step_3:_starting_the_web_server">Step 3: starting the web server</a></li><li><a href="#Step_4:_Validate_the_Installation">Step 4: Validate the Installation</a><ul><li><a href="#Look_for_the_start_page">Look for the start page</a></li><li><a href="#Validate_Axis_with_happyaxis">Validate Axis with happyaxis</a></li><li><a href="#Look_for_some_services">Look for some services</a></li><li><a href="#Test_a_SOAP_Endpoint">Test a SOAP Endpoint</a></li><li><a href="#Test_a_JWS_Endpoint">Test a JWS Endpoint</a></li></ul></li><li><a href="#Step_5:_Installing_new_Web_Services">Step 5: Installing new Web Services</a></li><li><a href="#Step_6:_Deploying_your_Web_Service">Step 6: Deploying your Web Service</a><ul><li><a href="#Classpath_setup">Classpath setup</a></li><li><a href="#Find_the_deployment_descriptor">Find the deployment descriptor</a></li><li><a href="#Run_the_admin_client">Run the admin client</a></li></ul></li><li><a href="#Step_7:_Testing">Step 7: Testing</a></li><li><a href="#Advanced_Installation:_adding_Axis_to_your_own_Webapp">Advanced Installation: adding Axis to your own Webapp</a></li><li><a href="#What_if_it_doesnt_work">What if it doesn't work?</a></li><li><a href="#Summary">Summary</a></li><li><a href="#Appendix:_Enabling_the_SOAP_Monitor">Appendix: Enabling the SOAP Monitor</a></li></ul>

</div>

<div class="section"><h2>Introduction<a name="Introduction"></a></h2>

<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 class="externalLink" 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>

</div>

<div class="section"><h2>Things you have to know<a name="Things_you_have_to_know"></a></h2>

<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 style="list-style-type: decimal">
  <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 &quot;ClassNotFoundException&quot;.</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 class="externalLink" 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 class="externalLink" 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 &quot;how to write internet scale distributed applications&quot;. Nobody knows how to do that properly yet, so that you have to learn this by doing.</p>

</div>

<div class="section"><h2>Step 0: Concepts<a name="Step_0:_Concepts"></a></h2>

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

</div>

<div class="section"><h2>Step 1: Preparing the webapp<a name="Step_1:_Preparing_the_webapp"></a></h2>

<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 (&quot;webapps&quot;) 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, &quot;axis&quot; has been used; rename these references if appropriate. </p>

</div>

<div class="section"><h2>Step 2: Setting up the libraries<a name="Step_2:_Setting_up_the_libraries"></a></h2>

<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 class="externalLink" 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>

<div class="section"><h3>Tomcat 4.x and Java 1.4<a name="Tomcat_4.x_and_Java_1.4"></a></h3>

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

</div>

<div class="section"><h3>WebLogic 8.1<a name="WebLogic_8.1"></a></h3>

<p>WebLogic 8.1 ships with <tt>webservices.jar</tt> that conflicts with Axis' <tt>saaj.jar</tt> and prevents Axis 1.4 from working right out of the box. This conflict exists because WebLogic uses an older definition of <tt>javax.xml.soap.*</tt> package from <a class="externalLink" 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 <tt>WEB-INF/weblogic.xml</tt> to true.  An example of <tt>weblogic.xml</tt> is shown below:
<div class="source"><pre class="prettyprint">&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;</pre></div>
<p>If set to <tt>true</tt>, the <tt>&lt;prefer-web-inf-classes&gt;</tt> 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 <tt>CLASSPATH</tt> property by placing Axis's <tt>saaj.jar</tt> library in front of WebLogic's <tt>webservices.jar</tt>.
<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 class="externalLink" href="http://e-docs.bea.com/wls/docs81/programming/classloading.html">WebLogic Server Application Classloading</a>.</p>

</div>

</div>

<div class="section"><h2>Step 3: starting the web server<a name="Step_3:_starting_the_web_server"></a></h2>

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

</div>

<div class="section"><h2>Step 4: Validate the Installation<a name="Step_4:_Validate_the_Installation"></a></h2>

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

<div class="section"><h3>Look for the start page<a name="Look_for_the_start_page"></a></h3>

<p>Navigate to the start page of the webapp, usually <a class="externalLink" 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>

</div>

<div class="section"><h3>Validate Axis with happyaxis<a name="Validate_Axis_with_happyaxis"></a></h3>

<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 class="externalLink" 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>

</div>

<div class="section"><h3>Look for some services<a name="Look_for_some_services"></a></h3>

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

</div>

<div class="section"><h3>Test a SOAP Endpoint<a name="Test_a_SOAP_Endpoint"></a></h3>

<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 <tt>getVersion</tt> method:</p>

<p><a class="externalLink" 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>

<div class="source"><pre class="prettyprint">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
&lt;soapenv:Envelope
 xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;
 xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;
 xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;
  &lt;soapenv:Body&gt;
    &lt;getVersionResponse
     soapenv:encodingStyle=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot;&gt;
      &lt;getVersionReturn
       xsi:type=&quot;xsd:string&quot;&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;</pre></div>

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

</div>

<div class="section"><h3>Test a JWS Endpoint<a name="Test_a_JWS_Endpoint"></a></h3>

<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 class="externalLink" 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>

<div class="source"><pre class="prettyprint">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
&lt;soapenv:Envelope
 xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;
 xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;
 xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;
  &lt;soapenv:Body&gt;
    &lt;listResponse
     soapenv:encodingStyle=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot;&gt;
      &lt;listReturn xsi:type=&quot;soapenc:Array&quot;
       soapenc:arrayType=&quot;xsd:string[6]&quot;
       xmlns:soapenc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot;&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;</pre></div>

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

</div>

</div>

<div class="section"><h2>Step 5: Installing new Web Services<a name="Step_5:_Installing_new_Web_Services"></a></h2>

<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 &quot;classes&quot; 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>

</div>

<div class="section"><h2>Step 6: Deploying your Web Service<a name="Step_6:_Deploying_your_Web_Service"></a></h2>

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

<div class="section"><h3>Classpath setup<a name="Classpath_setup"></a></h3>

<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 &quot;My Computer&quot; and select &quot;Properties&quot;. Click the &quot;Advanced&quot; 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>

<div class="source"><pre class="prettyprint">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
</pre></div>

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

<div class="source"><pre class="prettyprint">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</pre></div>

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

<div class="source"><pre class="prettyprint">java -cp %AXISCLASSPATH% ...</pre></div>

<p>or</p>

<div class="source"><pre class="prettyprint">java -cp &quot;$AXISCLASSPATH&quot; ...</pre></div>

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

</div>

<div class="section"><h3>Find the deployment descriptor<a name="Find_the_deployment_descriptor"></a></h3>

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

</div>

<div class="section"><h3>Run the admin client<a name="Run_the_admin_client"></a></h3>

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

<table border="0" class="table table-striped">
  <tr class="a">
    <td><b>On Windows</b>
<div class="source"><pre class="prettyprint">java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient
     -lhttp://localhost:8080/axis/services/AdminService deploy.wsdd</pre></div>
<b>On UNIX</b>
<div class="source"><pre class="prettyprint">java -cp $AXISCLASSPATH org.apache.axis.client.AdminClient
     -lhttp://localhost:8080/axis/services/AdminService deploy.wsdd</pre></div>
    </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 &quot;axis&quot; 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>

</div>

</div>

<div class="section"><h2>Step 7: Testing<a name="Step_7:_Testing"></a></h2>

<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 border="0" class="table table-striped">
  <tr class="a">
    <td><b>On Windows</b>
<div class="source"><pre class="prettyprint">java -cp .;%AXISCLASSPATH% samples.stock.GetQuote
     -lhttp://localhost:8080/axis/servlet/AxisServlet
     -uuser1 -wpass1 XXX</pre></div>
<b>On UNIX</b>
<div class="source"><pre class="prettyprint">java -cp .:$AXISCLASSPATH samples.stock.GetQuote
     -lhttp://localhost:8080/axis/servlet/AxisServlet
     -uuser1 -wpass1 XXX</pre></div>
    </td>
  </tr>
</table>
  </li>

  <li>You should get back &quot;55.25&quot; 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 &quot;axis&quot; change the URL appropriately.</p>

</div>

<div class="section"><h2>Advanced Installation: adding Axis to your own Webapp<a name="Advanced_Installation:_adding_Axis_to_your_own_Webapp"></a></h2>

<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 style="list-style-type: decimal">
  <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 class="externalLink" href="http://www.manning.com/hatcher">Java Development with Ant</a>, which can be downloaded as a <a class="externalLink" href="http://www.manning-source.com/books/hatcher/hatcher_ch15.pdf">PDF file</a>.</p>

</div>

<div class="section"><h2>What if it doesn't work?<a name="What_if_it_doesnt_work"></a></h2>

<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 style="list-style-type: decimal">
  <li>Post to the <a class="externalLink" 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 &quot;I don't know&quot;, 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 class="externalLink" 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 class="externalLink" href="http://issues.apache.org/jira/">jira</a> database to search for Axis bugs, both open and closed.</li>

  <li>Consult the <a class="externalLink" 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>

</div>

<div class="section"><h2>Summary<a name="Summary"></a></h2>

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

</div>

<div class="section"><h2>Appendix: Enabling the SOAP Monitor<a name="Appendix:_Enabling_the_SOAP_Monitor"></a></h2>

<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 style="list-style-type: decimal"> 
  <li>Go to $AXIS_HOME/webapps/axis (or %AXIS_HOME%\webapps\axis) and compile SOAPMonitorApplet.java.<br />
    <table border="0" class="table table-striped">
      <tr class="a">
        <td>
          <b>On Windows</b>
          <div class="source"><pre class="prettyprint">javac -classpath %AXIS_HOME%\lib\axis.jar SOAPMonitorApplet.java</pre></div>
          <b>On Unix</b>
          <div class="source"><pre class="prettyprint">javac -classpath $AXIS_HOME/lib/axis.jar SOAPMonitorApplet.java</pre></div>
        </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 border="0" class="table table-striped">
      <tr class="a">
        <td>
          <b>On Windows</b>
          <div class="source"><pre class="prettyprint">java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient 
     -lhttp://localhost:8080/axis/services/AdminService deploy-monitor.wsdd</pre></div>
          <b>On UNIX</b>
          <div class="source"><pre class="prettyprint">java -cp $AXISCLASSPATH org.apache.axis.client.AdminClient
     -lhttp://localhost:8080/axis/services/AdminService deploy-monitor.wsdd</pre></div>
        </td>
      </tr>
    </table>
    <b>SOAPMonitorService Deployment Descriptor (deploy-monitor.wsdd)</b>
    <div class="source"><pre class="prettyprint">&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;</pre></div>
  </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:
    <div class="source"><pre class="prettyprint">... 
   &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; 
       ...</pre></div> 
  </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> 

</div>

  

                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
              <div class="row span12">Copyright &copy;                    2000-2013
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                    
      </div>

        
        
                </div>
    </footer>
  </body>
</html>