<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2015-07-03
 | 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="20150703" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis &#x2013; 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: 2015-07-03</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><a name="Table_of_Contents"></a>Table of Contents</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><a name="Introduction"></a>Introduction</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><a name="Things_you_have_to_know"></a>Things you have to know</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><a name="Step_0:_Concepts"></a>Step 0: Concepts</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><a name="Step_1:_Preparing_the_webapp"></a>Step 1: Preparing the webapp</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><a name="Step_2:_Setting_up_the_libraries"></a>Step 2: Setting up the libraries</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><a name="Tomcat_4.x_and_Java_1.4"></a>Tomcat 4.x and Java 1.4</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><a name="WebLogic_8.1"></a>WebLogic 8.1</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>&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><a name="Step_3:_starting_the_web_server"></a>Step 3: starting the web server</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><a name="Step_4:_Validate_the_Installation"></a>Step 4: Validate the Installation</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><a name="Look_for_the_start_page"></a>Look for the start page</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><a name="Validate_Axis_with_happyaxis"></a>Validate Axis with happyaxis</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><a name="Look_for_some_services"></a>Look for some services</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><a name="Test_a_SOAP_Endpoint"></a>Test a SOAP Endpoint</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>&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><a name="Test_a_JWS_Endpoint"></a>Test a JWS Endpoint</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>&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><a name="Step_5:_Installing_new_Web_Services"></a>Step 5: Installing new Web Services</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><a name="Step_6:_Deploying_your_Web_Service"></a>Step 6: Deploying your Web Service</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><a name="Classpath_setup"></a>Classpath setup</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>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>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>java -cp %AXISCLASSPATH% ...</pre></div>


<p>or</p>


<div class="source">
<pre>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><a name="Find_the_deployment_descriptor"></a>Find the deployment descriptor</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><a name="Run_the_admin_client"></a>Run the admin client</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>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>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><a name="Step_7:_Testing"></a>Step 7: Testing</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>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>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><a name="Advanced_Installation:_adding_Axis_to_your_own_Webapp"></a>Advanced Installation: adding Axis to your own Webapp</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><a name="What_if_it_doesnt_work"></a>What if it doesn't work?</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><a name="Summary"></a>Summary</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><a name="Appendix:_Enabling_the_SOAP_Monitor"></a>Appendix: Enabling the SOAP Monitor</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>javac -classpath %AXIS_HOME%\lib\axis.jar SOAPMonitorApplet.java</pre></div>
          <b>On Unix</b>
          
<div class="source">
<pre>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>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>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>&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>... 
   &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-2015
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                    
      </div>

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