<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2016-05-30 
 | Rendered using Apache Maven Fluido Skin 1.4
-->
<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="20160530" />
    <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.4.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.4.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: 2016-05-30
                      <span class="divider">|</span>
                   </li>
                  <li id="projectVersion">Version: 1.7.3
                          <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>
              </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" >
                                  
            <!-- ~ 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="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;2016
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All rights reserved.      
                    
      </p>
                </div>

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