<html>
<head>
  <meta http-equiv="content-type" content="">
  <title>Axis2 FAQ</title>
</head>

<body lang="en">
<h1>General</h1>
<ol>
  <li><strong>I see OMElements in all the signatures, in the stubs, Client
    API and in skeletons. Where is data binding?</strong><br>

    <p>Axis2 supports databinding using XML-Beans from 0.9 release. For more
    information please read the <a href="userguide.html">user guide</a></p>
  </li>
  <li><a name="a2"><strong>What is OMElement, What does it
    represents?</strong></a><br>

    <p>OMElement is Axis2 representation of XML, it provide a tree model like
    DOM. If you are familiar with DOM or JDOM you can soon get familiarize
    with OM quickly. For more information read<a href="OMTutorial.html">
    Axiom Tutorial</a></p>
  </li>
</ol>

<h1>Client API</h1>
<ol>
  <li><strong>I want to do request response Messaging, Where should I
    look?</strong><br>

    <p>Look at the <a
    href="../modules/core/src/org/apache/axis2/clientapi/Call.java">Call</a>
    class, for more information please read the <a href="userguide.html">user
    guide</a></p>
  </li>
  <li><strong>I want to do One Way Messaging, Where should I
    look?</strong><br>

    <p>Look at the <a
    href="../modules/core/src/org/apache/axis2/clientapi/MessageSender.java">MessageSender</a>
    class, for more information please read the <a href="userguide.html">user
    guide</a></p>
  </li>
  <li><strong>Why can not I set the Addressing properties in the
    Call?</strong><br>

    <p>Only in the case of the Message Sender the user allowed to edit the
    Message Properties, In the case of Call the Message correlation is taken
    care by the Client API and the Addressing Headers are under the Control
    of Axis2.</p>
  </li>
  <li><strong>When I try to do a non blocking call with use Separate Listener
    true I get the error <i>to do two Transport Channels the Addressing
    Modules must be engaged</i>, Why is this?</strong><br>

    <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).</p>
  </li>
  <li><a name="b5"><strong>What is the Axis Repository?</strong></a><br>

    <p>Repository store the configuration of Axis2, the users should specify
    the repository folder starting the Axis Server (HTTP or TCP). In the case
    of tomcat it is the webapps/axis2/WEB-INF folder. Following picture shows
    a sample repository.</p>
    <img src="images/faq/1.jpg">
    <p>Modules and services have a archive format defined and they are
    automatically picked up by Axis2 when they are copied to corresponding
    folders.</p>

    <h1>Maven</h1>
    <ol>
      <li><strong>I just installed maven and it gives an error when I was
        trying to run maven on Axis2 ......</strong>
        <p>Axis2 requires itest plugin to run some of the tests. Better get
        it using following command.</p>
        <ul>
          <li>maven plugin:download -DgroupId=maven-itest-plugin
            -DartifactId=maven-itest-plugin -Dversion=1.0
            -Dmaven.repo.remote=http://www.openejb.org/maven,http://www.ibiblio.org/maven</li>
        </ul>
      </li>
      <li><p><strong>I have problems building with maven 1.1</strong> ....<br>
        </p>
        <p>It seems that maven 1.1 doesn't come bundled with the required
        artifact plugin. Run following to get it updated<br>
        </p>
        <ul>
          <li>maven plugin:Download -DgroupId=maven
            -DartifactId=maven-artifact-plugin -Dversion=1.6.</li>
          <p>You may need to update the itest plugin too, using the above
          command in #1.</p>
        </ul>
      </li>
      <li><strong>What are the frequently used maven commands ?</strong></li>
      <p></p>

      <table border="1" align="center">
        <tbody>
          <tr>
            <th scope="col">
              <div align="left">
              Command</div>
            </th>
            <th scope="col">
              <div align="left">
              Description</div>
            </th>
          </tr>
          <tr>
            <td>
              <div align="left">
              maven</div>
            </td>
            <td>
              <div align="left">
              download relevant jars, if not available and compile and run
              tests of the system.</div>
            </td>
          </tr>
          <tr>
            <td>maven clean</td>
            <td>Clean all the stuff build so far, that are in the target
              folder. This will not clean the jar repository</td>
          </tr>
          <tr>
            <td>
              <div align="left">
              maven test</div>
            </td>
            <td>
              <div align="left">
              run only the tests. Will do automatic compilation of changed
              sources as well. This will not run soap interop tests</div>
            </td>
          </tr>
          <tr>
            <td>
              <div align="left">
              maven clean all-tests</div>
            </td>
            <td>
              <div align="left">
              Clean up and run all off line and on line tests</div>
            </td>
          </tr>
          <tr>
            <td>
              <div align="left">
              maven itest</div>
            </td>
            <td>
              <div align="left">
              To run the online-mode tests for say the modules/integration
              Run "maven itest" from modules/integration</div>
            </td>
          </tr>
          <tr>
            <td>
              <div align="left">
              maven test itest</div>
            </td>
            <td>
              <div align="left">
              To run all tests for say the modules/integration     Run "maven
              test itest" from modules/integration</div>
            </td>
          </tr>
          <tr>
            <td>
              <div align="left">
              maven -g</div>
            </td>
            <td>
              <div align="left">
              List down all the commands available with maven</div>
            </td>
          </tr>
          <tr>
            <td>
              <div align="left">
              maven multiproject</div>
            </td>
            <td>
              <div align="left">
              generate this site</div>
            </td>
          </tr>
          <tr>
            <td>
              <div align="left">
              maven idea:multiproject</div>
            </td>
            <td>
              <div align="left">
              generate IDEA .ipr, .iml and .iws project files</div>
            </td>
          </tr>
          <tr>
            <td>
              <div align="left">
              maven -Dmaven.test.skip=true</div>
            </td>
            <td>Builds Axis2 and skips all the tests</td>
          </tr>
        </tbody>
      </table>
      <br>
    </ol>
    <p></p>
  </li>
</ol>
</body>
</html>
