<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.11.1 at 2022-07-14 
 | 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="20220714" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; Frequently Asked Questions on Apache Axis2</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>
      </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-07-14<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.8.2<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 ">Frequently Asked Questions on Apache Axis2</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>
    <li><a href="release-notes/1.8.2.html" title="1.8.2"><span class="none"></span>1.8.2</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><a href="docs/migration.html" title="Migration Guide (from Axis1)"><span class="none"></span>Migration Guide (from Axis1)</a>  </li>
          <li class="nav-header">Resources</li>
    <li class="active"><a href="#"><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" >
<section>
<h2><a name="Frequently_Asked_Questions_on_Apache_Axis2"></a><a name="top">Frequently Asked Questions on Apache Axis2</a></h2>
<p><b>General</b></p>
<ol style="list-style-type: decimal">
<li><a href="#a1">
                I'm having a problem using Axis2. What should I do?
            </a></li>
<li><a href="#mailinglists">
                How to ask a question on the mailing list?
            </a></li></ol>
<p><b>Class Loading Issues</b></p>
<ol style="list-style-type: decimal">
<li><a href="#b1">
                How do I access resources that I put into my service or module archive file?
            </a></li></ol>
<p><b>Client API</b></p>
<ol style="list-style-type: decimal">
<li><a href="#c1">
                I want to do Request-Response Messaging, Where should I look?
            </a></li>
<li><a href="#c2">
                I want to do One Way Messaging, Where should I look?
            </a></li>
<li><a href="#c3">
                When I try to do a non blocking call with <tt>useSeparateListener=true</tt> I get the error <i>to do two Transport Channels the Addressing
                Modules must be engaged</i>, Why is this?
            </a></li>
<li><a href="#c4">
                I have engaged addressing, and
                when I try to invoke a service I get an exception
            </a></li>
<li><a href="#c5">
                What is Axis2 Repository?
            </a></li></ol>
<p><b>Services</b></p>
<ol style="list-style-type: decimal">
<li><a href="#e1">
                How do I have multiple services in one service archive?
            </a></li>
<li><a href="#f1">
                I see an internal server error page when I try to view the WSDL file.
            </a></li></ol>
<p><b>Databindings</b></p>
<ol style="list-style-type: decimal">
<li><a href="#unexpected_subelement">
                When using ADB, I get an &quot;Unexpected subelement&quot; exception. Is this a bug?
            </a></li></ol></section><section>
<h2><a name="General"></a>General</h2>
<dl>
<dt><a name="a1">
                I'm having a problem using Axis2. What should I do?
            </a></dt>
<dd>
                
<p>First make sure you go through the user guide and this FAQ. If
                you are using a released version of Axis2, then there is a
                possibility that your problem has already being fixed in the latest
                code. Download Axis2 nightly builds and test again. You can download
                the complete snapshot distributions from our
                <a class="externalLink" href="https://hudson.apache.org/hudson/job/Axis2/lastStableBuild/org.apache.axis2$distribution">Hudson
                continuous integration server</a> and individual JARs from our
                <a class="externalLink" href="http://repository.apache.org/snapshots/org/apache/axis2/">snapshot repository</a>. The
                snapshot repository is also the best choice if you are using Maven to build your project.
               </p>
                
<p>If the problem still persists, then try to search for your
                question in our <a class="externalLink" href="http://marc.theaimsgroup.com/?l=axis-dev&amp;r=1&amp;w=2">developer</a>
                or <a class="externalLink" href="http://marc.theaimsgroup.com/?l=axis-user&amp;r=1&amp;w=2">user</a>
                mailing archives as it might have already being answered.</p>
                
<p>If your problem is not answered in the mailing list, now is the
                best time to post your question to the axis-user mailing list (see next question). If
                you think it is a bug, please fill a bug report in <a class="externalLink" href="http://issues.apache.org/jira/browse/AXIS2">JIRA</a>. Please
                attach all the supportive information, like your wsdl, schema,
                clients, services, stacktraces, etc., to the JIRA issue you
                created, as it will help one of our contributors to re-create the
                problem. <b>PLEASE DO NOT ASK QUESTIONS USING JIRA; USE IT ONLY AS
                AN ISSUE TRACKER.</b></p>
                
<p>If you are asking for an explanation of a feature in Axis2,
                there is a possibility that there is an article or FAQ written on
                it. Please search the web as there are lots of articles written and
                hosted by various sources on the web.</p>
            <hr /></dd>
<dt><a name="mailinglists">
                How to ask a question on the mailing list?
            </a></dt>
<dd>
                
<p>
                    If you have a question that has not been answered elsewhere (see previous question),
                    you may ask it on one of the mailing lists:
               </p>
                
<ul>
                    
<li>Users : <a class="externalLink" href="mailto:java-user@axis.apache.org">java-user@axis.apache.org</a></li>
                    
<li>Developers : <a class="externalLink" href="mailto:java-dev@axis.apache.org">java-dev@axis.apache.org</a></li>
               </ul>
                
<p>
                    Before posting to a list, you need to <a href="mail-lists.html">subscribe</a> first.
                    Since the mailing lists are shared with other subprojects (such as Rampart), please
                    prefix the subject with <tt>[Axis2]</tt>. 
               </p>
                
<p><b>Note</b> : When you ask questions in the mailing list, please
                remember that everyone working in our project are volunteers.
                No-one can be forced to fix your bugs (See <a class="externalLink" href="http://www.apache.org/foundation/faq.html#what-is-apache-NOT-about">
                What is Apache not about?</a> ).</p>
                
<p>Make sure you add enough information about your problem with
                stacktraces and any other supportive information. It will improve
                the chances of your question being answered. Prefixing your mail
                subject with prefixes like &quot;URGENT&quot; will not help you in any means.
                Yes we also accept all the blames about Axis2 in these mailing
                lists, as those will definitely help us to improve Axis2 :) .</p>
            </dd></dl></section><section>
<h2><a name="Class_Loading_Issues"></a>Class Loading Issues</h2>
<dl>
<dt><a name="b1">
                How do I access resources that I put into my service or module archive file?
            </a></dt>
<dd>
                
<p>Axis2 has the notion of service isolation where each service or
                module gets its own class loader. Using this class loader you can
                access any resource that you put into your service archive file.
                You may want to access your resources from different locations. For
                example,</p>
                
<ol style="list-style-type: decimal">
                    
<li>
                        
<p>A third party module wants to access your resources. Then the
                        scenario is as follows:</p>

<div>
<pre>
AxisService myService =
messageContext.getAxisConfiguration().getAxisService(&quot;serviceName&quot;); 
</pre></div>
                        
<p>or</p>

<div>
<pre>
AxisService myService = msgCtx.getAxisService();
</pre></div>
                        
<p>Then you can use the service class loader through which you can
                        access its resources</p>

<div>
<pre>
ClassLoader clsLoader = myService.getServiceClassLoader();
clsLoader.getResourceAsStream(&quot;myResource&quot;);
</pre></div>
                   </li>
                    
<li>
                        
<p>To initialize the service implementation class at the
                        MessageReceiver level, the following steps need to be taken</p>

<div>
<pre>
AxisService service = msgCtx.getAxisService();
ClassLoader clsLoader = service.getServiceClassLoader();
Class.forName(&quot;serviceName&quot;,clsLoader,true);
</pre></div>
                        
<p>NOTE : Axis2 default MessageReciver uses the same technique to
                        initialize service implementations</p>
                   </li>
                    
<li>
                        
<p>If you want to load your resources at the service
                        implementation class, then the scenario is as follows</p>

<div>
<pre>
getClass().getClassLoader().getResourceAsStream(&quot;myResource&quot;);
</pre></div>
                   </li>
               </ol>
            </dd></dl></section><section>
<h2><a name="Client_API"></a>Client API</h2>
<dl>
<dt><a name="c1">
                I want to do Request-Response Messaging, Where should I look?
            </a></dt>
<dd>
                
<p>Look at the <a class="externalLink" href="https://svn.apache.org/repos/asf/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/client/ServiceClient.java">ServiceClient</a> class, for more information
                please read the <a href="docs/adv-userguide.html">User's Guide</a></p>
            <hr /></dd>
<dt><a name="c2">
                I want to do One Way Messaging, Where should I look?
            </a></dt>
<dd>
                
<p>From Axis2 0.94 onwards, both request-response and one way
                messaging will be handled by <a class="externalLink" href="https://svn.apache.org/repos/asf/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/client/ServiceClient.java">ServiceClient</a>.</p>
            <hr /></dd>
<dt><a name="c3">
                When I try to do a non blocking call with <tt>useSeparateListener=true</tt> I get the error <i>to do two Transport Channels the Addressing
                Modules must be engaged</i>, Why is this?
            </a></dt>
<dd>
                
<p>To do the two transport channel invocation, you need to engage
                the addressing module. You can enable it by un-commenting the entry
                in the axis2.xml file or <code>Call.engageModule(QName)</code>. However,
                addressing is enabled by default.</p>
            <hr /></dd>
<dt><a name="c4">
                I have engaged addressing, and
                when I try to invoke a service I get an exception
            </a></dt>
<dd>
                
<p>If you have engaged addressing, then you must have wsa:action,
                the required WS-Addressing header. You have to call
                <code>option.setAction(&quot;urn:myaction&quot;);</code>. Note that the
                action should be a URI.</p>
            <hr /></dd>
<dt><a name="c5">
                What is Axis2 Repository?
            </a></dt>
<dd>
                
<p>The Repository stores the configuration of Axis2. The users
                should specify the repository folder of the Axis Server (HTTP or
                TCP). In the case of Tomcat, it is the webapps/axis2/WEB-INF
                folder. The following picture shows a sample repository.</p>
                <img src="images/faq/1.jpg" alt="Sample repository" /></img>
                
<p>Modules and services have an archive format defined and they are
                automatically picked up by Axis2 when they are copied to
                corresponding folders.</p>
            </dd></dl></section><section>
<h2><a name="Services"></a>Services</h2>
<dl>
<dt><a name="e1">
                How do I have multiple services in one service archive?
            </a></dt>
<dd>
                
<p>It's just a matter of writing a services.xml file to configure
                the service or services in an archive file. The corresponding
                services.xml <strong>must</strong> look as follows,</p>

<div>
<pre>
&lt;serviceGroup&gt;
  &lt;service <strong>name=&quot;myService1&quot;</strong>&gt;
  ...........................
  &lt;/service&gt;

  &lt;service <strong>name=&quot;myService2&quot;</strong>&gt;
  ...........................
  &lt;/service&gt;
&lt;serviceGroup&gt;
</pre></div>
                
<p>NOTE : The name attribute is a compulsory attribute that will
                become the name of the services. If you want to have one service in
                the archive file, then there are two options. You can either have
                one service inside the serviceGroup tag or have only one service
                tag, as shown below, in your services.xml, in which case, the name
                of the service will be the name of the archive file, which you
                cannot override.</p>

<div>
<pre>
&lt;service&gt;
...............
&lt;service&gt;
</pre></div>
            <hr /></dd>
<dt><a name="f1">
                I see an internal server error page when I try to view the WSDL file.
            </a></dt>
<dd>
                
<p>This happens specifically with Tomcat 4.x and 5.0 in a JDK 1.5
                environment. The reason is that the system picks up a wrong
                transformer factory class. This can be solved simply by putting the
                <a class="externalLink" href="http://www.apache.org/dist/java-repository/xalan/jars/">xalan-2.7.0.jar</a>
                into the axis2/WEB-INF/lib directory</p>
            </dd></dl></section><section>
<h2><a name="Databindings"></a>Databindings</h2>
<dl>
<dt><a name="unexpected_subelement">
                When using ADB, I get an &quot;Unexpected subelement&quot; exception. Is this a bug?
            </a></dt>
<dd>
                
<p>
                    In general, &quot;Unexpected subelement&quot; means that the message being processed
                    doesn't conform to the WSDL that was used to generate the ADB code. If you are getting
                    this exception on the client side, it means that the response from the server
                    is invalid. If you are seeing the error on the server side, it means that the
                    request received by the service is invalid.
               </p>
                
<p>
                    If you are sure that the message conforms to the WSDL and believe that there
                    is an issue with the code generated by Axis2, you should do the following before
                    opening a JIRA issue:
               </p>
                
<ol style="list-style-type: decimal">
                    
<li>
                        Test the scenario with the latest Axis2 snapshot version. This includes
                        regenerating the code with the latest codegen version.
                   </li>
                    
<li>
                        Provide the WSDL that causes the issue, or if for legal reasons you are not
                        allowed to provide the original WSDL, provide a minimal WSDL that reproduces
                        the problem.
                   </li>
                    
<li>
                        Provide some hard evidence that this is indeed an issue in Axis2. This means
                        at least a transcript of the SOAP message that proves that it conforms to the WSDL.
                   </li>
               </ol>
            </dd></dl></section>
        </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>
