<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.11.1 at 2022-06-07 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<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="20220607" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; Migrating from Axis 1.x</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.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.6.min.js"></script>
<meta name="generator" content="HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /><meta http-equiv="content-type" content="" />      </head>
    <body class="topBarDisabled">
      <div class="container-fluid">
      <div id="banner">
        <div class="pull-left"><a href="http://www.apache.org/" id="bannerLeft"><img src="http://www.apache.org/images/asf_logo_wide.png"  alt="Apache Axis2"/></a></div>
        <div class="pull-right"><a href=".././" id="bannerRight"><img src="../images/axis.jpg" /></a></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li id="publishDate">Last Published: 2022-06-07<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.8.1<span class="divider">|</span></li>
        <li class=""><a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
      <li class=""><a href="../index.html" title="Axis2/Java">Axis2/Java</a><span class="divider">/</span></li>
    <li class="active ">Migrating from Axis 1.x</li>
        </ul>
      </div>
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
<ul class="nav nav-list">
          <li class="nav-header">Axis2/Java</li>
    <li><a href="../index.html" title="Home"><span class="none"></span>Home</a>  </li>
    <li><a href="../download.html" title="Downloads"><span class="none"></span>Downloads</a>  </li>
    <li><a href="javascript:void(0)" title="Release Notes"><span class="icon-chevron-down"></span>Release Notes</a>
      <ul class="nav nav-list">
    <li><a href="../release-notes/1.6.1.html" title="1.6.1"><span class="none"></span>1.6.1</a>  </li>
    <li><a href="../release-notes/1.6.2.html" title="1.6.2"><span class="none"></span>1.6.2</a>  </li>
    <li><a href="../release-notes/1.6.3.html" title="1.6.3"><span class="none"></span>1.6.3</a>  </li>
    <li><a href="../release-notes/1.6.4.html" title="1.6.4"><span class="none"></span>1.6.4</a>  </li>
    <li><a href="../release-notes/1.7.0.html" title="1.7.0"><span class="none"></span>1.7.0</a>  </li>
    <li><a href="../release-notes/1.7.1.html" title="1.7.1"><span class="none"></span>1.7.1</a>  </li>
    <li><a href="../release-notes/1.7.2.html" title="1.7.2"><span class="none"></span>1.7.2</a>  </li>
    <li><a href="../release-notes/1.7.3.html" title="1.7.3"><span class="none"></span>1.7.3</a>  </li>
    <li><a href="../release-notes/1.7.4.html" title="1.7.4"><span class="none"></span>1.7.4</a>  </li>
    <li><a href="../release-notes/1.7.5.html" title="1.7.5"><span class="none"></span>1.7.5</a>  </li>
    <li><a href="../release-notes/1.7.6.html" title="1.7.6"><span class="none"></span>1.7.6</a>  </li>
    <li><a href="../release-notes/1.7.7.html" title="1.7.7"><span class="none"></span>1.7.7</a>  </li>
    <li><a href="../release-notes/1.7.8.html" title="1.7.8"><span class="none"></span>1.7.8</a>  </li>
    <li><a href="../release-notes/1.7.9.html" title="1.7.9"><span class="none"></span>1.7.9</a>  </li>
    <li><a href="../release-notes/1.8.0.html" title="1.8.0"><span class="none"></span>1.8.0</a>  </li>
    <li><a href="../release-notes/1.8.1.html" title="1.8.1"><span class="none"></span>1.8.1</a>  </li>
      </ul>
  </li>
    <li><a href="../modules/index.html" title="Modules"><span class="none"></span>Modules</a>  </li>
    <li><a href="../tools/index.html" title="Tools"><span class="none"></span>Tools</a>  </li>
          <li class="nav-header">Documentation</li>
    <li><a href="../docs/toc.html" title="Table of Contents"><span class="none"></span>Table of Contents</a>  </li>
    <li><a href="../docs/installationguide.html" title="Installation Guide"><span class="none"></span>Installation Guide</a>  </li>
    <li><a href="../docs/quickstartguide.html" title="QuickStart Guide"><span class="none"></span>QuickStart Guide</a>  </li>
    <li><a href="../docs/userguide.html" title="User Guide"><span class="none"></span>User Guide</a>  </li>
    <li><a href="../docs/jaxws-guide.html" title="JAXWS Guide"><span class="none"></span>JAXWS Guide</a>  </li>
    <li><a href="../docs/pojoguide.html" title="POJO Guide"><span class="none"></span>POJO Guide</a>  </li>
    <li><a href="../docs/spring.html" title="Spring Guide"><span class="none"></span>Spring Guide</a>  </li>
    <li><a href="../docs/webadminguide.html" title="Web Administrator's Guide"><span class="none"></span>Web Administrator's Guide</a>  </li>
    <li class="active"><a href="#"><span class="none"></span>Migration Guide (from Axis1)</a>
  </li>
          <li class="nav-header">Resources</li>
    <li><a href="../faq.html" title="FAQ"><span class="none"></span>FAQ</a>  </li>
    <li><a href="../articles.html" title="Articles"><span class="none"></span>Articles</a>  </li>
    <li><a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki"><span class="none"></span>Wiki</a>  </li>
    <li><a href="../refLib.html" title="Reference Library"><span class="none"></span>Reference Library</a>  </li>
    <li><a href="../apidocs/index.html" title="Online Java Docs"><span class="none"></span>Online Java Docs</a>  </li>
          <li class="nav-header">Get Involved</li>
    <li><a href="../overview.html" title="Overview"><span class="none"></span>Overview</a>  </li>
    <li><a href="../git.html" title="Checkout the Source"><span class="none"></span>Checkout the Source</a>  </li>
    <li><a href="../mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a>  </li>
    <li><a href="../release-process.html" title="Release Process"><span class="none"></span>Release Process</a>  </li>
    <li><a href="../guidelines.html" title="Developer Guidelines"><span class="none"></span>Developer Guidelines</a>  </li>
    <li><a href="../siteHowTo.html" title="Build the Site"><span class="none"></span>Build the Site</a>  </li>
          <li class="nav-header">Project Information</li>
    <li><a href="../team-list.html" title="Project Team"><span class="none"></span>Project Team</a>  </li>
    <li><a href="../issue-tracking.html" title="Issue Tracking"><span class="none"></span>Issue Tracking</a>  </li>
    <li><a href="http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/" class="externalLink" title="Source Code"><span class="none"></span>Source Code</a>  </li>
    <li><a href="../thanks.html" title="Acknowledgements"><span class="none"></span>Acknowledgements</a>  </li>
          <li class="nav-header">Apache</li>
    <li><a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License"><span class="none"></span>License</a>  </li>
    <li><a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship"><span class="none"></span>Sponsorship</a>  </li>
    <li><a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks"><span class="none"></span>Thanks</a>  </li>
    <li><a href="http://www.apache.org/security/" class="externalLink" title="Security"><span class="none"></span>Security</a>  </li>
  </ul>
          <hr />
          <div id="poweredBy">
              <div class="clear"></div>
              <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="span10" >
<html xmlns="http://www.w3.org/1999/xhtml">


<h1>Migrating from Apache Axis 1.x to Axis2</h1>

<p>This document is intended for helping Axis 1.x users migrate to
the Axis2 series. We'll begin by listing the improvements in Axis2
in comparison with Axis1. This will be followed by guidelines for
migration to the new version.</p>

<p><i>Send your feedback or questions to: <a class="externalLink" href="mailto:java-user@axis.apache.org?subject=[Axis2]">java-user@axis.apache.org</a></i>.
(Subscription details are available on the <a href="../mail-lists.html">Axis2 site</a>.)
Kindly prefix subject with [Axis2].</p>
<section>
<h2><a name="Content"></a>Content</h2>

<ul>

<li><a href="#comp">Compatibility</a></li>

<li><a href="#start">Getting Started</a></li>

<li><a href="#custom_deployment">Custom Deployment of Services,
Handlers and Modules</a></li>

<li><a href="#transports">Transports for HTTP Connection</a></li>

<li><a href="#data_binding">Data Binding Support</a></li>

<li><a href="#best">Best Usage</a></li>
</ul>
<a name="comp" id="comp"></a>
<section>
<h2><a name="Compatibility"></a>Compatibility</h2>

<p>Axis1.x and Axis2 have evolved from different architectures.</p>

<p><b>Speed</b> - Axis2 is based on the StAX API, which
gives greater speed than the SAX event based parsing used in
Axis1.x.</p>

<p><b>Stability</b> - Axis2 has fixed phases as well as
user-defined phases for extensions. This allows far more stability
as well as flexibility than Axis1.x.</p>

<p><b>Transport framework</b> - Transports (i.e., senders
and listeners for SOAP over various protocols such as HTTP, SMTP,
etc.), have been abstracted away from the Axis2 engine. Having a
transport-independent Axis engine allows far more flexibility in
transport options.</p>

<p><b>WSDL 2.0 support</b> - Axis2 supports both WSDL
versions 1.1 and 2.0, which are used by Axis2's code generation
tools to create web service skeletons and client stubs.</p>

<p><b>Component-oriented architecture</b> - Axis2
components consist of handlers and modules in .mar and .aar
archives. These easily reusable components allow extended
functionality such as pattern processing for your applications or
distribution to partners. Axis2 emphasizes the &quot;Module&quot; concept
over the &quot;Handler&quot; concept of Axis 1.x. Modules contain handlers
that are ordered by phase rules. These are attached to specific
service(s).</p>
<a name="start" id="start"></a>
<section>
<h2><a name="Getting_Started"></a>Getting Started</h2>

<p>Let's look at a simple example of echoing at client API.</p>

<p><b>Axis 1.x</b></p>

<div>
<pre>
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
   
public class TestClient {
  public static void main(String [] args) {
    try {
      String endpoint =&quot;http://ws.apache.org:5049/axis/services/echo&quot;;
      Service  service = new Service();
      Call     call    = (Call) service.createCall();
      call.setTargetEndpointAddress( new java.net.URL(endpoint) );
      call.setOperationName(new QName(&quot;http://soapinterop.org/&quot;, &quot;echoString&quot;));
      String ret = (String) call.invoke( new Object[] { &quot;Hello!&quot; } );
      System.out.println(&quot;Sent 'Hello!', got '&quot; + ret + &quot;'&quot;);
    } catch (Exception e) {
       System.err.println(e.toString());
    }
  }
}
</pre></div>

<p><b>Axis 2</b></p>

<div>
<pre>
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;


public class EchoBlockingClient {
        private static EndpointReference targetEPR = new EndpointReference(
                        &quot;http://127.0.0.1:8080/axis2/services/MyService&quot;);
        public static void main(String[] args) {
                try {
                        OMFactory fac = OMAbstractFactory.getOMFactory();
                        OMNamespace ns = fac.createOMNamespace(&quot;http://soapinterop.org/&quot;, &quot;ns1&quot;);
                        OMElement payload = fac.createOMElement(&quot;echoString&quot;, ns);
                        payload.setText(&quot;Hello!&quot;);
                        Options options = new Options();
                        ServiceClient client = new ServiceClient();
                        options.setTo(targetEPR);
                        client.setOptions(options); 
                        //Blocking invocation
                        OMElement result = client.sendReceive(payload);
                        System.out.println(&quot;Sent Hello, got : &quot; + result.toString());

                } catch (AxisFault axisFault) {
                        axisFault.printStackTrace();
                }

        }
}
</pre></div>

<p>The above code demonstrates that Axis2 service invocations deal
with the SOAP body element itself. The simple shows a synchronous
invocation, but Axis2 can handle asynchronous invocations as well.
The &quot;payload&quot; variable above contains the SOAP body element which
will go in the SOAP envelope.</p>

<p>Once the service is called by the client stub in Axis2, the
&quot;payload&quot; will be bound according to the data binding framework in
use. So the extra work of parsing the &quot;payload&quot; will vanish.</p>

<p>Axis2 supports asynchronous invocation through
sendReceiveNonblocking(). Synchronous/Asynchronous invocations can
handle both single and double HTTP connections.</p>

<p>With this advanced architecture, Axis2 is capable of handling
megabytes of requests and responses, well above the capabilities of
Axis1.x.</p>
<a name="custom_deployment" id="custom_deployment"></a>
<section>
<h2><a name="Custom_Deployment_of_Services.2C_Handlers.2C_and_Modules"></a>Custom Deployment of Services, Handlers, and Modules</h2>

<p>In Axis 1.x, the deployment of services was via the rather
cumbersome WSDD. Service deployment in Axis2 is straightforward and
dynamic using the web-based Axis2 Admin application. Deployment is
just a matter of creating the service archive (.aar) file and
deploying it. More details regarding this is given in the Axis2
user guide.</p>

<p>Axis2 has moved away from the &quot;Handler concept&quot; and is more into
the &quot;Module concept&quot;. Abstractly speaking, the module concept is a
collection of handlers with rules that govern which modules are
created as .mar files. It uses a module.xml file to specify handler
configuration and activation.</p>

<p>When a service is called through a handler, it is just a matter
of giving a reference to the module that includes the handler in
the services.xml (using &lt;module ref=&quot;foo/&gt;&quot;).</p>

<p>Services are hot deployable in Axis2, but modules are not. This
is one feature which is unique to Axis2.</p>

<p>Let's take a detailed look at what it takes to migrate the Axis
1.x handlers to the Axis 2 modules via the &quot;SOAP Monitor&quot;. The SOAP
monitor is really a combination of three components: An applet
which displays responses/requests, a servlet which binds to a
default port of 5001 and connects to the applet, and a handler
chain used to intercept the SOAP messages. Here we'll focus on the
handler.</p>

<p><b>Axis 1.x required two WSDD's to use the SOAP Monitor. First,
the SOAP Monitor Handler itself:</b></p>

<div>
<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;/wzs/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>

<p><b>Axis 1.x requires a reference to the handler in the user's
WSDD that defines their Web Service:</b></p>

<div>
<pre>
&lt;deployment name=&quot;example&quot; xmlns=&quot;http://xml.apache.org/axis/wsdd/&quot; 
    xmlns:java=&quot;http://xml.apache.org/axis/wsdd/providers/java&quot;&gt;
  
  &lt;service name=&quot;urn:myService&quot; provider=&quot;java:RPC&quot;&gt;
    &lt;parameter name=&quot;className&quot; value=&quot;org.MyService&quot;/&gt;
    &lt;parameter name=&quot;allowedMethods&quot; value=&quot;*&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;

  &lt;/service&gt;
&lt;/deployment&gt;
</pre></div>

<p><b>Axis 2 requires a module.xml, placed inside a jar with a .mar
extension under WEB-INF/modules, to define a Handler:</b></p>

<div>
<pre>
&lt;module name=&quot;soapmonitor&quot; class=&quot;org.apache.axis2.handlers.soapmonitor.SOAPMonitorModule&quot;&gt;
    &lt;inflow&gt;
        &lt;handler name=&quot;InFlowSOAPMonitorHandler&quot; class=&quot;org.apache.axis2.handlers.soapmonitor.SOAPMonitorHandler&quot;&gt;
            &lt;order phase=&quot;soapmonitorPhase&quot;/&gt;
        &lt;/handler&gt;
    &lt;/inflow&gt;

    &lt;outflow&gt;
        &lt;handler name=&quot;OutFlowSOAPMonitorHandler&quot; class=&quot;org.apache.axis2.handlers.soapmonitor.SOAPMonitorHandler&quot;&gt;
            &lt;order phase=&quot;soapmonitorPhase&quot;/&gt;
        &lt;/handler&gt;
    &lt;/outflow&gt;

    &lt;Outfaultflow&gt;
        &lt;handler name=&quot;FaultOutFlowSOAPMonitorHandler&quot; class=&quot;org.apache.axis2.handlers.soapmonitor.SOAPMonitorHandler&quot;&gt;
            &lt;order phase=&quot;soapmonitorPhase&quot;/&gt;
        &lt;/handler&gt;
    &lt;/Outfaultflow&gt;

    &lt;INfaultflow&gt;
        &lt;handler name=&quot;FaultInFlowSOAPMonitorHandler&quot; class=&quot;org.apache.axis2.handlers.soapmonitor.SOAPMonitorHandler&quot;&gt;
            &lt;order phase=&quot;soapmonitorPhase&quot;/&gt;
        &lt;/handler&gt;
    &lt;/INfaultflow&gt;
&lt;/module&gt;
</pre></div>

<p>The SOAPMonitorModule referenced above simply implements the
org.apache.axis2.modules.Module, and is used for any additional
tasks needed to initialize the module and shutdown the module. In
this situation, nothing is needed and the implemented interface
methods have blank bodies. Furthermore, the 'soapmonitorPhase' will
be used later (below) in the axis2.xml .</p>

<p><b>Axis 1.x the SOAPMonitorHandler has the class signature
as:</b></p>

<div>
<pre>
public class SOAPMonitorHandler extends BasicHandler
</pre></div>

<p><b>Axis 2 the SOAPMonitorHandler has the class signature
as:</b></p>

<div>
<pre>
public class SOAPMonitorHandler extends AbstractHandler 
</pre></div>

<p><b>In Axis2, you need to reference the module that contains the
handler chain that you want to use inside your
services.xml:</b></p>

<div>
<pre>
&lt;service name=&quot;ExampleService&quot;&gt;
    &lt;module ref=&quot;soapmonitor&quot;/&gt;
    &lt;description&gt;
       This service has the SOAP Monitor wired in 
    &lt;/description&gt;
    &lt;parameter name=&quot;ServiceClass&quot;&gt;org.ExampleService&lt;/parameter&gt;
    &lt;operation name=&quot;myExecute&quot;&gt;
        &lt;messageReceiver class=&quot;org.apache.axis2.receivers.RawXMLINOutMessageReceiver&quot;/&gt;
    &lt;/operation&gt;
&lt;/service&gt;
</pre></div>

<p><b>Finally, Axis2 requires you to make some changes to
axis2.xml. Start by adding a global module:</b></p>

<div>
<pre>
    &lt;module ref=&quot;soapmonitor&quot;/&gt;
</pre></div>

<p><b>Then define your phase orders for the 'soapmonitorPhase'
referenced in the module.xml :</b></p>

<div>
<pre>
    &lt;phaseOrder type=&quot;inflow&quot;&gt;
        &lt;!--  Global Phases       --&gt;
        &lt;phase name=&quot;TransportIn&quot;/&gt;
        &lt;phase name=&quot;PreDispatch&quot;/&gt;
        &lt;phase name=&quot;Dispatch&quot; class=&quot;org.apache.axis2.engine.DispatchPhase&quot;&gt;
            &lt;handler name=&quot;AddressingBasedDispatcher&quot;
                     class=&quot;org.apache.axis2.dispatchers.AddressingBasedDispatcher&quot;&gt;
                &lt;order phase=&quot;Dispatch&quot;/&gt;
            &lt;/handler&gt;

            &lt;handler name=&quot;RequestURIBasedDispatcher&quot;
                     class=&quot;org.apache.axis2.dispatchers.RequestURIBasedDispatcher&quot;&gt;
                &lt;order phase=&quot;Dispatch&quot;/&gt;
            &lt;/handler&gt;

            &lt;handler name=&quot;SOAPActionBasedDispatcher&quot;
                     class=&quot;org.apache.axis2.dispatchers.SOAPActionBasedDispatcher&quot;&gt;
                &lt;order phase=&quot;Dispatch&quot;/&gt;
            &lt;/handler&gt;

            &lt;handler name=&quot;SOAPMessageBodyBasedDispatcher&quot;
                     class=&quot;org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher&quot;&gt;
                &lt;order phase=&quot;Dispatch&quot;/&gt;
            &lt;/handler&gt;
            &lt;handler name=&quot;InstanceDispatcher&quot;
                     class=&quot;org.apache.axis2.engine.InstanceDispatcher&quot;&gt;
                &lt;order phase=&quot;Dispatch&quot;/&gt;
            &lt;/handler&gt;
        &lt;/phase&gt;
        &lt;!--    Global Phases     --&gt;
        &lt;!--   After Dispatch phase module author or service author can add any phase he wants      --&gt;
        &lt;phase name=&quot;userphase1&quot;/&gt;
        &lt;phase name=&quot;soapmonitorPhase&quot;/&gt;
    &lt;/phaseOrder&gt;
    &lt;phaseOrder type=&quot;outflow&quot;&gt;
        &lt;!--   user can add his own phases to this area  --&gt;
        &lt;!--   Global phases   --&gt;
        &lt;!--   these phases will run irrespective of the service   --&gt;
        &lt;phase name=&quot;MessageOut&quot;/&gt;
        &lt;phase name=&quot;userphase1&quot;/&gt;
        &lt;phase name=&quot;soapmonitorPhase&quot;/&gt;
        &lt;phase name=&quot;PolicyDetermination&quot;/&gt;
        &lt;!--   Global phases   --&gt;
    &lt;/phaseOrder&gt;
    &lt;phaseOrder type=&quot;INfaultflow&quot;&gt;
        &lt;phase name=&quot;userphase1&quot;/&gt;
        &lt;phase name=&quot;soapmonitorPhase&quot;/&gt;
        &lt;!--   user can add his own phases to this area  --&gt;
    &lt;/phaseOrder&gt;
    &lt;phaseOrder type=&quot;Outfaultflow&quot;&gt;
        &lt;!--   user can add his own phases to this area  --&gt;
        &lt;!--   Global phases   --&gt;
        &lt;phase name=&quot;MessageOut&quot;/&gt;
        &lt;phase name=&quot;userphase1&quot;/&gt;
        &lt;phase name=&quot;soapmonitorPhase&quot;/&gt;
        &lt;phase name=&quot;PolicyDetermination&quot;/&gt;
        &lt;!--   Global phases   --&gt;
    &lt;/phaseOrder&gt;
</pre></div>

<p>See the user guide for more information on Axis2 modules.</p>
<a name="transports" id="transports"></a>
<section>
<h2><a name="Transports_for_HTTP_Connection"></a>Transports for HTTP Connection</h2>

<p>Axis2 comes with the HTTPClient4TransportSender which is based
on Apache Httpcomponents.</p>

<p>It should be noted that axis2.xml should be configured to call
the commons transports in this manner:</p>

<div>
<pre>
...
&lt;transportSender name=&quot;http&quot; class=&quot;org.apache.axis2.transport.http.impl.httpclient4.HTTPClient4TransportSender&quot;&gt; 
   &lt;parameter name=&quot;PROTOCOL&quot;&gt;HTTP/1.1&lt;/parameter&gt;
   &lt;parameter name=&quot;Transfer-Encoding&quot;&gt;chunked&lt;/parameter&gt;
&lt;/transportSender&gt;
...
</pre></div>
<a name="data_binding" id="data_binding"></a>
<section>
<h2><a name="Data_Binding_Support"></a>Data Binding Support</h2>

<p>ADB is used to provide data binding support. In Axis2, XML is
manipulated via AXIOM, which is based on the StAX API. AXIOM
provides full XML schema support. Thus, serialization and
de-serialization of XML is handled in Axis2 via the xml-data
binding framework.</p>

<p>Below is an example of migrating a WSDL based Axis 1.x Web
Service to Axis2.</p>

<p>First, let's take a look at a simple document/literal style WSDL
used in an Axis 1.x Web Service. This example assumes the name
simple.wsdl for the WSDL below:</p>

<div>
<pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

&lt;definitions name=&quot;SimpleService&quot; targetNamespace=&quot;http://simpleNS&quot; xmlns:tns=&quot;http://simpleNS&quot; 
xmlns=&quot;http://schemas.xmlsoap.org/wsdl/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; 
xmlns:soap=&quot;http://schemas.xmlsoap.org/wsdl/soap/&quot; xmlns:ns2=&quot;http://simpleNS/types&quot;&gt;
  &lt;types&gt;
    &lt;schema targetNamespace=&quot;http://simpleNS/types&quot; xmlns:tns=&quot;http://simpleNS/types&quot; 
xmlns:soap11-enc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; 
xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:wsdl=&quot;http://schemas.xmlsoap.org/wsdl/&quot; 
xmlns=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;
      &lt;import namespace=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot;/&gt;
      &lt;element name=&quot;simpleLogin&quot;&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
            &lt;element name=&quot;user_name&quot; type=&quot;xsd:string&quot;/&gt;
            &lt;element name=&quot;user_password&quot; type=&quot;xsd:string&quot;/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;
      &lt;element name=&quot;simpleLoginResponse&quot;&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
            &lt;element name=&quot;soap_session_id&quot; type=&quot;xsd:string&quot;/&gt;
            &lt;element name=&quot;web_user_name&quot; type=&quot;xsd:string&quot;/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;
&lt;/schema&gt;&lt;/types&gt;
  &lt;message name=&quot;SimpleEndpoint_simpleLogin&quot;&gt;
     &lt;part name=&quot;parameters&quot; element=&quot;ns2:simpleLogin&quot;/&gt;
  &lt;/message&gt;
  &lt;message name=&quot;SimpleEndpoint_simpleLoginResponse&quot;&gt;
    &lt;part name=&quot;result&quot; element=&quot;ns2:simpleLoginResponse&quot;/&gt;
  &lt;/message&gt;
  &lt;portType name=&quot;SimpleEndpoint&quot;&gt;
    &lt;operation name=&quot;simpleLogin&quot;&gt;
      &lt;input message=&quot;tns:SimpleEndpoint_simpleLogin&quot; name=&quot;SimpleEndpoint_simpleLogin&quot;/&gt;
      &lt;output message=&quot;tns:SimpleEndpoint_simpleLoginResponse&quot; name=&quot;SimpleEndpoint_simpleLoginResponse&quot;/&gt;
    &lt;/operation&gt;
  &lt;/portType&gt;
  &lt;binding name=&quot;SimpleEndpointBinding&quot; type=&quot;tns:SimpleEndpoint&quot;&gt;
    &lt;soap:binding transport=&quot;http://schemas.xmlsoap.org/soap/http&quot; style=&quot;document&quot;/&gt;
    &lt;operation name=&quot;simpleLogin&quot;&gt;
      &lt;soap:operation soapAction=&quot;simpleLogin&quot;/&gt;
      &lt;input name=&quot;SimpleEndpoint_simpleLogin&quot;&gt;
        &lt;soap:body use=&quot;literal&quot;/&gt;
      &lt;/input&gt;
      &lt;output name=&quot;SimpleEndpoint_simpleLoginResponse&quot;&gt;
        &lt;soap:body use=&quot;literal&quot;/&gt;
      &lt;/output&gt;
    &lt;/operation&gt;
  &lt;/binding&gt;
  &lt;service name=&quot;SimpleService&quot;&gt;
    &lt;port name=&quot;SimpleEndpointPort&quot; binding=&quot;tns:SimpleEndpointBinding&quot;&gt;
      &lt;soap:address location=&quot;http://localhost:8080/axis/services/SimpleEndpointPort&quot;/&gt;&lt;/port&gt;&lt;/service&gt;&lt;/definitions&gt;
</pre></div>

<p>The next step is to run WSDL2Java on the wsdl. For axis 1.x,
this example uses the following Ant task:</p>

<div>
<pre>
&lt;target name=&quot;wsdl2java&quot; description=&quot;axis 1.x&quot;&gt;
       &lt;delete dir=&quot;output&quot; /&gt;
       &lt;mkdir dir=&quot;output&quot; /&gt;
       &lt;axis-wsdl2java
         output=&quot;output&quot;
         verbose=&quot;true&quot;
         url=&quot;wsdl/simple.wsdl&quot;
         serverside=&quot;true&quot;
         skeletondeploy=&quot;true&quot;
         nowrapped=&quot;true&quot;&gt;
       &lt;/axis-wsdl2java&gt;
   &lt;/target&gt;
</pre></div>

<p>The Axis 1.x Ant task above takes the simple.wsdl under the
directory 'wsdl' , and from that creates files under the directory
'output'. The files created are shown below:</p>

<div>
<pre>
output/
output/simpleNS
output/simpleNS/types
output/simpleNS/types/SimpleLoginResponse.java
output/simpleNS/types/SimpleLogin.java
output/simpleNS/SimpleEndpoint.java
output/simpleNS/SimpleEndpointBindingStub.java
output/simpleNS/SimpleEndpointBindingSkeleton.java
output/simpleNS/SimpleEndpointBindingImpl.java
output/simpleNS/SimpleService.java
output/simpleNS/SimpleServiceLocator.java
output/simpleNS/deploy.wsdd
output/simpleNS/undeploy.wsdd
</pre></div>

<p>Now let's run WSDL2Java with Axis2. In this example, the only
change to simple.wsdl required for Axis2 is that 'soap:address
location' be changed to:</p>

<div>
<pre>
&lt;soap:address location=&quot;http://localhost:8080/axis2/services/SimpleEndpoint&quot;/&gt;&lt;/port&gt;&lt;/service&gt;&lt;/definitions&gt;
</pre></div>

<p>In Axis2, the default databinding uses ADB. However, XMLBeans,
JiBX and JAXB-RI are also supported. This example uses XMLBeans. For
Axis2, our example uses the following Ant task:</p>

<div>
<pre>
&lt;target name=&quot;wsdl2java&quot;&gt;
      &lt;delete dir=&quot;output&quot; /&gt;
      &lt;java classname=&quot;org.apache.axis2.wsdl.WSDL2Java&quot; fork=&quot;true&quot;&gt;
          &lt;classpath refid=&quot;axis.classpath&quot;/&gt; 
          &lt;arg value=&quot;-d&quot;/&gt;
          &lt;arg value=&quot;xmlbeans&quot;/&gt;
          &lt;arg value=&quot;-uri&quot;/&gt;
          &lt;arg file=&quot;wsdl/simple.wsdl&quot;/&gt;
          &lt;arg value=&quot;-ss&quot;/&gt;
          &lt;arg value=&quot;-g&quot;/&gt;
          &lt;arg value=&quot;-sd&quot;/&gt;
          &lt;arg value=&quot;-o&quot;/&gt;
          &lt;arg file=&quot;output&quot;/&gt;
          &lt;arg value=&quot;-p&quot;/&gt;
          &lt;arg value=&quot;org.simple.endpoint&quot;/&gt;
      &lt;/java&gt;

      &lt;!-- Move the schema folder to classpath--&gt;
      &lt;move todir=&quot;${build.classes}&quot;&gt;
          &lt;fileset dir=&quot;output/resources&quot;&gt;
              &lt;include name=&quot;*schema*/**/*.class&quot;/&gt;
              &lt;include name=&quot;*schema*/**/*.xsb&quot;/&gt;
          &lt;/fileset&gt;
      &lt;/move&gt;

  &lt;/target&gt;
</pre></div>

<p>For an explanation of the Axis2 WSDL2Java Ant task and its
options, see the <a href="../tools/CodegenToolReference.html">CodegenToolReference
Guide.</a></p>

<p>A feature of XMLBeans is that there is one class file created
with WSDL2java, and a series of .xsb files. They must be referenced
when compiling, and as the example shows, these files are moved to
a build directory.</p>

<p>The Axis2 WSDL2Java example also takes the simple.wsdl, which is
under the directory 'wsdl', and creates files under the directory
'output'. The relevant non-xmlbean files created are shown
below:</p>

<div>
<pre>
output/resources/services.xml
output/src/org/simple
output/src/org/simple/endpoint
output/src/org/simple/endpoint/SimpleEndpointSkeleton.java
output/src/org/simple/endpoint/SimpleEndpointMessageReceiverInOut.java
output/src/org/simple/endpoint/SimpleEndpointCallbackHandler.java
output/src/org/simple/endpoint/SimpleEndpointStub.java
output/src/simplens
output/src/simplens/types
output/src/simplens/types/SimpleLoginDocument.java
output/src/simplens/types/impl
output/src/simplens/types/impl/SimpleLoginDocumentImpl.java
output/src/simplens/types/impl/SimpleLoginResponseDocumentImpl.java
output/src/simplens/types/SimpleLoginResponseDocument.java
</pre></div>

<p>The first important distinction is that while the Axis 1.x
example generated deploy.wsdd and undeploy.wsdd, the Axis2 example
created a services.xml. The files deploy.wsdd and services.xml are
a breed apart, coming from different architectures. There is no
direct parallel between them. See the Axis2 user guide for an
explanation about services.xml</p>

<p>Now we're ready to code. We'll start with Axis 1.x on the
service side. To implement the business logic, we'll change
simpleNS/SimpleEndpointBindingImpl.java from:</p>

<div>
<pre class="code">
package simpleNS;

public class SimpleEndpointBindingImpl implements simpleNS.SimpleEndpoint{
    public simpleNS.types.SimpleLoginResponse simpleLogin(simpleNS.types.SimpleLogin parameters) 
        throws java.rmi.RemoteException {
        return null;
    }

}
</pre></div>

<p>To:</p>

<div>
<pre class="code">
package simpleNS;

public class SimpleEndpointBindingImpl implements simpleNS.SimpleEndpoint{
    public simpleNS.types.SimpleLoginResponse simpleLogin(simpleNS.types.SimpleLogin parameters) 
        throws java.rmi.RemoteException {

        String userName = parameters.getUser_name();
        String password = parameters.getUser_password();
        // do something with those vars...
        return new simpleNS.types.SimpleLoginResponse(&quot;mySessionID&quot;, &quot;username&quot;);
    }

}
</pre></div>

<p>In Axis 1.x, the next step is to compile the classes and put
them in the Axis.war, and then run the admin client with the
generated deploy.wsdd. You then look at the happy axis page to
verify that the service has been installed correctly.</p>

<p>Now let's code Axis2. In Axis 1.x, while the Ant task shown in
the example created a skeleton, a peek inside shows that the
skeleton calls the binding implementation class. In Axis2, we work
with the skeleton directly. To implement the business logic in the
generated Axis2 classes, we'll change
org/simple/endpoint/SimpleEndpointSkeleton.java from:</p>

<div>
<pre class="code">
package org.simple.endpoint;
    /**
     *  SimpleEndpointSkeleton java skeleton for the axisService
     */
    public class SimpleEndpointSkeleton {

        /**
         * Auto generated method signature
          * @param param0
         */
        public  simplens.types.SimpleLoginResponseDocument simpleLogin
                  (simplens.types.SimpleLoginDocument param0 ) throws Exception {
                //Todo fill this with the necessary business logic
                throw new  java.lang.UnsupportedOperationException();
        }
}
</pre></div>

<p>To:</p>

<div>
<pre class="code">
package org.simple.endpoint;
    
    import simplens.types.*;
    import simplens.types.SimpleLoginResponseDocument.*;
    import simplens.types.SimpleLoginDocument.*;
    /**
     *  SimpleEndpointSkeleton java skeleton for the axisService
     */
    public class SimpleEndpointSkeleton {
     
        /**
         * Modified 
          * @param simpleLoginDocument
         */
        public SimpleLoginResponseDocument simpleLogin
                  (simplens.types.SimpleLoginDocument simpleLoginDocument){
  
                SimpleLoginResponseDocument retDoc =
                    SimpleLoginResponseDocument.Factory.newInstance();
                 
                SimpleLoginResponse retElement =
                    SimpleLoginResponse.Factory.newInstance();
  
                // Get parameters passed in 
                SimpleLogin simpleLogin = simpleLoginDocument.getSimpleLogin();
                String userName = simpleLogin.getUserName();
                String password = simpleLogin.getUserPassword();

                // do something with those variables...

                retElement.setWebUserName(userName);
                retElement.setSoapSessionId(&quot;my random string&quot;);
                retDoc.setSimpleLoginResponse(retElement);
                return retDoc; 
        }
}
</pre></div>

<p>In Axis2, the next step is to compile the classes, put them
along with the generated services.xml in an AAR, and then hot
deploy the AAR by placing it in the Axis2.war under
WEB-INF/services. Point a browser to
http://localhost:8080/axis2/listServices, and you should see the
service 'SimpleService' ready for action. See the Axis2 user guide
for more info.</p>

<p>The last step is constructing the client. Our Axis 1.x client
for this example is:</p>

<div>
<pre>
package org;

import simpleNS.*;
import simpleNS.types.*;

public class Tester {
  public static void main(String [] args) throws Exception {
    // Make a service
    SimpleService service = new SimpleServiceLocator();

    // Now use the service to get a stub which implements the SDI.
    SimpleEndpoint port =  service.getSimpleEndpointPort();

    // set the params
    SimpleLogin parameters = new SimpleLogin(&quot;username&quot;,&quot;password&quot;);
    // Make the actual call
    SimpleLoginResponse simpleLoginResponse = port.simpleLogin(parameters);
    String session = simpleLoginResponse.getSoap_session_id();
    String user = simpleLoginResponse.getWeb_user_name();
    System.out.println(&quot;simpleLoginResponse, session: &quot; + session + &quot;, user: &quot; + user);
  }
}
</pre></div>

<p>Finally, our Axis2 client for this example is:</p>

<div>
<pre>
package org;
import simplens.types.*;
import simplens.types.SimpleLoginDocument.*;
import simplens.types.SimpleLoginResponseDocument.*;
import simplens.types.impl.*;
import org.simple.endpoint.*;

public class Tester {
  public static void main(String [] args) throws Exception {

    // you may not need to pass in the url to the constructor - try the default no arg one
    SimpleEndpointStub stub =
         new SimpleEndpointStub(null, &quot;http://localhost:8080/axis2/services/SimpleService&quot;);

    SimpleLogin simpleLogin = SimpleLogin.Factory.newInstance();
    simpleLogin.setUserName(&quot;userName&quot;);
    simpleLogin.setUserPassword(&quot;password&quot;);

    SimpleLoginDocument simpleLoginDocument =
        SimpleLoginDocument.Factory.newInstance();

    simpleLoginDocument.setSimpleLogin(simpleLogin);

    SimpleLoginResponseDocument simpleLoginResponseDocument
        = stub.simpleLogin(simpleLoginDocument);

    SimpleLoginResponse simpleLoginResponse =
        simpleLoginResponseDocument.getSimpleLoginResponse();

    String session = simpleLoginResponse.getSoapSessionId();
    String user = simpleLoginResponse.getWebUserName();
    System.out.println(&quot;simpleLoginResponse, session: &quot; + session + &quot;, user: &quot; + user);

  }
}
</pre></div>

<p>Axis2 clients also have asynchronous options via a Callback and
alternatively a 'Fire and forget'. See the user guide for more
details.</p>
<a name="best" id="best"></a>
<section>
<h2><a name="Best_Usage"></a>Best Usage</h2>

<p>Axis1.x and Axis2 have different ways of seeing the SOAP stack.
So the best way to migrate is to follow the <a href="userguide.html">User's Guide</a> and the <a href="Axis2ArchitectureGuide.html">Architecture Guide</a> of Axis2
properly. We are confident you will find Axis2 very straightforward
and more friendly to use than its predecessor.</p>

</html>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright &copy;2004&#x2013;2022
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>
