<!--
  ~ 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.
  -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
<meta http-equiv="content-type" content="" />
<title>Axis2 FAQ</title>
<link href="css/axis-docs.css" rel="stylesheet" type="text/css"
media="all" />
</head>
<body lang="en" xml:lang="en">
<h1>Frequently Asked Questions on Apache Axis2</h1>
<p>Got a question to be answered on Axis2? Then this document is
just what the doctor ordered.</p>
<h2>Ask your Questions Here</h2>
<p>If you have any other doubts/issues, e-mail your questions
to:</p>
<ul>
<li>Developers : <a href=
"mailto:axis-dev@ws.apache.org">axis-dev@ws.apache.org</a></li>
<li>Users : <a href=
"mailto:axis-user@ws.apache.org">axis-user@ws.apache.org</a></li>
</ul>
<p>Prefix subject with [Axis2]. <a href=
"http://ws.apache.org/axis2/mail-lists.html">Subscribe</a> to our
mailing lists.<a href=
"http://ws.apache.org/axis2/mail-lists.html"></a></p>
<h2>Content of Questions and Answers</h2>
<ul>
<li>General
<ul>
<li><a href="#a1">I'm having a problem using Axis2. What should I
do?</a></li>
</ul>
</li>
<li>Class Loading Issues
<ul>
<li><a href="#b1">How do I access resources in my service /module
archive file?</a></li>
</ul>
</li>
<li>Client API
<ul>
<li><a href="#c1">I want to do Request Response Messaging, Where
should I look?<br /></a></li>
<li><a href="#c2">I want to do One Way Messaging, Where should I
look?</a></li>
<li><a href="#c3">Error: 'to do two Transport Channels the
Addressing Modules must be engaged'</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 Axis Repository?</a></li>
</ul>
</li>
<li>Services
<ul>
<li><a href="#e1">How do I have multiple services in one service
archive?</a></li>
</ul>
</li>
<li>Web Archive/ Server Side
<ul>
<li><a href="#f1">I see an internal server error page when I try to
view the WSDL file.<br /></a></li>
</ul>
</li>
</ul>
<h2>General</h2>
<ol>
<li><a name="a1" id="a1"></a><strong>I'm having a problem using
Axis2. What should I do?</strong><br />
<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. <a href=
"http://ws.zones.apache.org/dist/axis2/nightly/">Download Axis2
nightly builds</a> and test again.</p>
<p>If the problem still persists, then try to search for your
question in our <a href=
"http://marc.theaimsgroup.com/?l=axis-dev&amp;r=1&amp;w=2">developer</a>
or <a 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. If
you think it is a bug, please fill a bug report in <a 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>
<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 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 "URGENT" 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>
</li>
</ol>
<h2>Class Loading Issues</h2>
<ol>
<li><a name="b1" id="b1"></a><strong>How do I access resources that
I put into my service /module archive file?</strong></li>
<li style="list-style: none; display: inline">
<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>
<p>1. A third party module wants to access your resources. Then the
scenario is as follows:</p>
<pre>
   AxisService myService =
   messageContext.getAxisConfiguration().getAxisService("serviceName"); 
</pre>
<p>or</p>
<pre>
   AxisService myService = msgCtx.getAxisService();
</pre>
<p>Then you can use the service class loader through which you can
access its resources</p>
<pre>
   ClassLoader clsLoader = myService.getServiceClassLoader();
   clsLoader.getResourceAsStream("myResource");
</pre>
<p>2. To initialize the service implementation class at the
MessageReceiver level, the following steps need to be taken</p>
<pre>
   AxisService service = msgCtx.getAxisService();
   ClassLoader clsLoader = service.getServiceClassLoader();
   Class.forName("serviceName",clsLoader,true);
</pre>
<p>NOTE : Axis2 default MessageReciver uses the same technique to
initialize service implementations</p>
<p>3. If you want to load your resources at the service
implementation class, then the scenario is as follows</p>
<pre>
   getClass().getClassLoader().getResourceAsStream("myResource");
</pre></li>
</ol>
<h2>Client API</h2>
<ol>
<li><a name="c1" id="c1"></a><strong>I want to do Request-Response
Messaging, Where should I look?</strong><br />
<p>Look at the <a href=
"https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/client/ServiceClient.java"
target="_blank">ServiceClient</a> class, for more information
please read the <a href="@axis2_version_dir@/adv-userguide.html"
target="_blank">User's Guide</a></p>
</li>
<li><a name="c2" id="c2"></a><strong>I want to do One Way
Messaging, Where should I look?</strong><br />
<p>From Axis2 0.94 onwards, both request-response and one way
messaging will be handled by <a href=
"https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/client/ServiceClient.java"
target="_blank">ServiceClient</a>.</p>
</li>
<li><strong>When I try to do a non blocking call with</strong>
useSeparateListener=true
<p>I get the error <i>to do two Transport Channels the Addressing
Modules must be engaged</i>, Why is this?<br /></p>
<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 Call.engageModule(QName). However,
addressing is enabled by default.</p>
</li>
<li><a name="c4" id="c4"></a><strong>I have engaged addressing, and
when I try to invoke a service I get an exception</strong><br />
<p>If you have engaged addressing, then you must have wsa:action,
the required WS-Addressing header. You have to call<br />
<code>option.setAction("urn:myaction");</code>. Note that the
action should be a URI.</p>
</li>
<li><a name="c5" id="c5"></a><strong>What is Axis2
Repository?</strong><br />
<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" />
<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>
</li>
</ol>
<h2>Services</h2>
<ol>
<li><a name="e1" id="e1"></a><strong>How do I have multiple
services in one service archive?</strong></li>
<li style="list-style: none; display: inline">
<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>
<pre>
   &lt;serviceGroup&gt;
   &lt;service <strong>name="myService1"</strong>&gt;
   ...........................
   &lt;/service&gt;

   &lt;service <strong>name="myService2"</strong>&gt;
   ...........................
   &lt;/service&gt;
   &lt;serviceGroup&gt;
</pre>
<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>
<pre>
   &lt;service&gt;
   ...............
   &lt;service&gt;
</pre></li>
</ol>
<h2>Web Archive / Server side</h2>
<ol>
<li><a name="f1" id="f1"></a><strong>I see an internal server error
page when I try to view the WSDL file.</strong><br />
<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 href=
"http://www.apache.org/dist/java-repository/xalan/jars/">xalan-2.7.0.jar</a>
into the axis2/WEB-INF/lib directory</p>
</li>
</ol>
</body>
</html>
