<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-11-16 
 | 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="20181116" />
    <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: 2018-11-16<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.7.9<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>
      </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="svn.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" >
<div class="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></div>
<div class="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></div>
<div class="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></div>
<div class="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 <tt>Call.engageModule(QName)</tt>. 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
                <tt>option.setAction(&quot;urn:myaction&quot;);</tt>. 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></div>
<div class="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 <b>must</b> look as follows,</p>

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

  &lt;service <b>name=&quot;myService2&quot;</b>&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></div>
<div class="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></div>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright &copy;2004&#x2013;2018
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>