You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ws.apache.org by ch...@apache.org on 2006/01/05 09:58:37 UTC

svn commit: r366125 [2/6] - in /webservices/site/trunk/targets/axis2: ./ 0_93/ 0_93/adb/ 0_93/adb/images/ 0_93/sec-conf/ 0_93/tools/ M1/ adb/ api/ sec-conf/ tools/

Added: webservices/site/trunk/targets/axis2/0_93/CodegenToolReference.html
URL: http://svn.apache.org/viewcvs/webservices/site/trunk/targets/axis2/0_93/CodegenToolReference.html?rev=366125&view=auto
==============================================================================
--- webservices/site/trunk/targets/axis2/0_93/CodegenToolReference.html (added)
+++ webservices/site/trunk/targets/axis2/0_93/CodegenToolReference.html Thu Jan  5 00:55:38 2006
@@ -0,0 +1,601 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>Code Generator Wizard - Eclipse Plug-in - Axis 2.0</title><style type="text/css" media="all">
+          @import url("./style/maven-base.css");
+          
+          @import url("./style/maven-theme.css");</style><link rel="stylesheet" href="./style/print.css" type="text/css" media="print"></link><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta></head><body class="composite"><div id="banner"><a href="http://www.apache.org/" id="organizationLogo"><img alt="Apache Software Foundation" src="http://www.apache.org/images/asf-logo.gif"></img></a><a href="http://ws.apache.org/axis2/" id="projectLogo"><img alt="Apache Axis 2.0" src="http://ws.apache.org/axis2/images/axis.jpg"></img></a><div class="clear"><hr></hr></div></div><div id="breadcrumbs"><div class="xleft">Last published: 20 December 2005
+                <span class="separator">|</span> Doc for  0.94-dev
+                </div><div class="xright"></div><div class="clear"><hr></hr></div></div><div id="leftColumn"><div id="navcolumn"><div id="menuAxis_2_0"><h5>Axis 2.0</h5><ul><li class="none"><a href="index.html">Home</a></li><li class="expanded"><a href="">Download Axis2</a><ul><li class="none"><a href="download.cgi">Releases</a></li><li class="none"><a href="http://svn.apache.org/viewcvs.cgi/webservices/axis2/trunk/?root=Apache-SVN" class="externalLink" title="External Link">Source Code</a></li></ul></li><li class="expanded"><a href="">Getting Started with Axis2</a><ul><li class="none"><a href="installationguide.html">Installation Guide</a></li><li class="none"><a href="userguide.html">User Guide</a></li><li class="none"><a href="webadminguide.html">Web Administration Guide</a></li></ul></li><li class="expanded"><a href="docs.html">Additional Reference</a><ul><li class="none"><a href="http://wiki.apache.org/ws/FrontPage/Axis2" class="externalLink" title="External Link">Axis2
  Wiki</a></li><li class="none"><a href="Axis2ArchitectureGuide.html">Architecture Guide</a></li><li class="none"><a href="OMTutorial.html">AXIOM Tutorial</a></li><li class="none"><a href="CodegenToolReference.html">Code Generation Tutorial</a></li><li class="none"><a href="rest-ws.html">REST Support</a></li><li class="none"><a href="mtom-guide.html">Handling Binary Data with Axis2</a></li><li class="none"><a href="axis2config.html">Axis2 Configuration Guide</a></li><li class="none"><a href="migration.html">Migrating from Axis 1.x</a></li><li class="none"><a href="api.html">Online Java Docs</a></li><li class="none"><a href="adb/adb-howto.html">ADB How-to</a></li><li class="none"><a href="security-module.html">WS-Security How-to</a></li><li class="none"><a href="otherTutorials.html">Other Tutorials</a></li></ul></li><li class="expanded"><a href="overview.html">Get Invloved</a><ul><li class="none"><a href="svn.html">Checkout the Source</a></li><li class="none"><a href="siteHowT
 o.html">Build the Site</a></li><li class="none"><a href="guidelines.html">Developer Guidelines</a></li><li class="none"><a href="refLib.html">Reference Library</a></li><li class="none"><a href="mail-lists.html">Mailing Lists</a></li><li class="none"><a href="faq.html">FAQ</a></li><li class="none"><a href="thanks.html">Thanks</a></li></ul></li><li class="expanded"><a href="">Project Information</a><ul><li class="none"><a href="mail-lists.html">Mailing Lists</a></li><li class="none"><a href="team-list.html">Project Team</a></li><li class="none"><a href="issue-tracking.html">Issue Tracking</a></li></ul></li></ul></div><div id="legend"><h5>Legend</h5><ul><li class="externalLink">External Link</li><li class="newWindow">Opens in a new window</li></ul></div><a href="http://maven.apache.org/" title="Built by Maven" id="poweredBy"><img alt="Built by Maven" src="./images/logos/maven-button-1.png"></img></a></div></div><div id="bodyColumn"><div class="contentBox"><div class="section"><
 a name="Code_Generator_Wizard_-_Command_Line_Tool"></a><h2>Code Generator Wizard - Command Line Tool</h2><div class="subsection"><a name="Introduction"></a><h3>Introduction</h3><p>Just as old times there will be users who wish to use the command line
+version of the tool. This basic tool is implemented by the WSDL2Code class
+and just for the convenience in the java case (which would be the majority)
+there is another WSDL2Java class. One can choose to run the main classes
+directly or use one of the scripts to run the WSDL2Code and WSDL2Java
+appropriately. (the scripts are found in the bin directory of the binary
+distribution)</p></div><div class="subsection"><a name="Option_Reference"></a><h3>Option Reference</h3><table class="bodyTable">
+  <tbody>
+    <tr class="b">
+      <td width="50%">-uri &lt;Location of WSDL&gt;</td>
+      <td width="50%">WSDL file location. This should point to a WSDL file in
+        the local file system</td>
+    </tr>
+    <tr class="a">
+      <td width="50%">-o &lt;output Location&gt; :</td>
+      <td width="50%">output file location. This is where the files would be
+        copied once the code generation is done. If this option is omitted
+        the generated files would be copied to the working directory.</td>
+    </tr>
+    <tr class="b">
+      <td width="50%">-l &lt;language&gt;</td>
+      <td width="50%">Output language. Currently the code generator can
+        generate code in Java and CSharp. (CSharp support is limited) When
+        omitted defaults to Java.
+
+        <p>Allowed options are</p>
+        <ul>
+          <li>java</li>
+          <li>cs</li>
+        </ul>
+      </td>
+    </tr>
+    <tr class="a">
+      <td width="50%">-p &lt;package name&gt;</td>
+      <td width="50%">The target package name. If omitted, a default package
+        (formed using the target  namespace of the WSDL) will be used.</td>
+    </tr>
+    <tr class="b">
+      <td width="50%">-a</td>
+      <td width="50%">Generate code only for async style . when this option
+        is used the generated stubs will have only the asynchronous
+        invocation methods. Switched off by default.</td>
+    </tr>
+    <tr class="a">
+      <td width="50%">-s</td>
+      <td width="50%">Generate code only for sync style . When this option is
+        used the generated stubs will have only the  synchronous invocation
+        methods. Switched off by default. When used with the -a option, this
+        takes precedence.</td>
+    </tr>
+    <tr class="b">
+      <td width="50%">-t</td>
+      <td width="50%">Generates a test case. In the case of Java it would be
+        a junit test case. This test case will generate a dummy
+        implementation of the service and a relevant service.xml and will
+        deploy this particular service in a SimpleHttpServer. Then looking at
+        the WSDL it will generate test methods that will do web service
+        invocation both synchronously and asynchronously and test the
+        deployed service.</td>
+    </tr>
+    <tr class="a">
+      <td width="50%">-ss</td>
+      <td width="50%">Generates server side code (i.e. skeletons). Default is
+        off</td>
+    </tr>
+    <tr class="b">
+      <td width="50%">-sd</td>
+      <td width="50%">Generates the service descriptor (i.e. server.xml).
+        Default is off. only valid with -ss</td>
+    </tr>
+  <tr class="a">
+      <td width="50%">-d</td>
+      <td width="50%">Specifies the Databinding framwork. valid values are xmlbeans,adb and none.
+      Default is xmlbeans.
+</td>
+    </tr>
+  </tbody>
+</table></div></div><div class="section"><a name="Code_Generator_Wizard_-_Ant_Task"></a><h2>Code Generator Wizard - Ant Task</h2><p>The code generator also comes bundled with an Ant task. The ant task is
+implemented by the org.apache.axis2.tool.ant.AntCodegenTask class. Following
+are the ant task attributes.</p><div class="subsection"><a name="Ant_Task_Reference"></a><h3>Ant Task Reference</h3><table class="bodyTable">
+  <tbody>
+    <tr class="b">
+      <td width="50%" height="19">wsdlfilename</td>
+      <td width="50%" height="19">WSDL file location. Maps to the uri option
+        of the command line tool</td>
+    </tr>
+    <tr class="a">
+      <td width="50%" height="76">output</td>
+      <td width="50%" height="76">output file location. This is where the
+        files would be copied once the code generation is done. If this
+        option is omitted the generated files would be copied to the working
+        directory. . Maps to the -o option of the command line tool</td>
+    </tr>
+    <tr class="b">
+      <td width="50%" height="171">language</td>
+      <td width="50%" height="171">Output language. Currently the code
+        generator can generate code in Java and CSharp. (CSharp support is
+        limited) When omitted defaults to Java.
+
+        <p>Allowed options are</p>
+        <ul>
+          <li>java</li>
+          <li>cs</li>
+        </ul>
+
+        <p>Maps to the -l option of the command line tool</p>
+      </td>
+    </tr>
+    <tr class="a">
+      <td width="50%" height="57">packagename</td>
+      <td width="50%" height="57">The target package name. If omitted, a
+        default package (formed using the target  namespace of the WSDL) will
+        be used.  Maps to the -p option of the command line tool.</td>
+    </tr>
+    <tr class="b">
+      <td width="50%" height="75">asynconly</td>
+      <td width="50%" height="75">Generate code only for async style . when
+        this option is used the generated stubs will have only the
+        asynchronous invocation methods. Defaults to false if omitted Only
+        true and false are applicable as values. Maps to the -a option of the
+        command line tool.</td>
+    </tr>
+    <tr class="a">
+      <td width="50%" height="16">testcase</td>
+      <td width="50%" height="16">Generates a test case</td>
+    </tr>
+    <tr class="b">
+      <td width="50%" height="19">synconly</td>
+      <td width="50%" height="19">Generate code only for sync style . when
+        this option is used the generated stubs will have only the
+        synchronous invocation methods. Defaults to false if omitted. Only
+        true and false are applicable as values. Maps to the -s option of the
+        command line tool.</td>
+    </tr>
+    <tr class="a">
+      <td width="50%" height="19">serverside</td>
+      <td width="50%" height="19">Generates server side code (i.e.
+        skeletons). Only true and false are applicable as values. Default is
+        false. Maps to the -ss option of the command line tool</td>
+    </tr>
+    <tr class="b">
+      <td width="50%" height="18">generateserverxml</td>
+      <td width="50%" height="18">Generates server side code (i.e.
+        skeletons). Only true and false are applicable as values. Default is
+        false. Maps to the -sd option of the command line tool.</td>
+    </tr>
+  </tbody>
+</table></div><div class="subsection"><a name="Example_build_file_using_the_custom_Ant_task"></a><h3>Example build file using the custom Ant task</h3><p>Following is an example ant build file that uses the custom Ant task.</p><p></p>
+    <div class="source"><pre>&lt;?xml version="1.0"?&gt;
+&lt;project name="CodegenExample" default="main" basedir="."&gt;
+&lt;target name="declare" &gt;
+&lt;taskdef name="codegen"
+        classname="org.apache.axis2.tool.ant.AntCodegenTask"
+        classpath="classes"/&gt;
+&lt;/target&gt;
+&lt;target name="main" depends="declare"&gt;
+&lt;codegen 
+    wsdlfilename="C:\test\wsdl\CombinedService.wsdl"
+    output="C:\"
+    serverside="true"
+    generateserverxml="true"
+/&gt;
+&lt;/target&gt;
+&lt;/project&gt;
+
+</pre></div>
+  <p>Notice the main target that uses the "codegen" task which will use the
+org.apache.axis2.tool.ant.AntCodegenTask class and run the code generation
+tool internally while passing the relevant arguments and do the proper
+generation. If a user types</p><p>&gt;ant or &gt;ant main</p><p>it will generate the serverside code and service.xml for the given WSDL
+file(C:\test\wsdl\CombinedService.wsdl) and the generated code will be
+written to C:\ directory.</p><p>For this Ant task to work the following jars need to be in the class
+path.</p><ul>
+  <li>axis-M2.jar (from the Axis2 distribution)</li>
+  <li>axis-wsdl4j-1.2.jar (The WSDL4J implementation jar. Bundled with the
+    Axis2 distribution)</li>
+  <li>stax-api-1.0.jar (The StAX API's that contain the
+    javax.xml.namespace.QName class. This jar may be replaced by any other
+    jar that contains the javax.xml.namespace.QName implementation. However
+    Axis2 uses this class from the stax-api-1.0.jar which comes bundled with
+    the Axis2 distribution)
+    <p></p>
+  </li>
+</ul></div></div><div class="section"><a name="Invoking_the_Code_Generator_from_Ant"></a><h2>Invoking the Code Generator from Ant</h2><p>Since the users may find altering their ant class path a bit daunting they
+can also follow an easier technique. The code generator main class can be
+invoked directly through the build file.</p><p>Below is an example of a full build.xml needed to run WSDL2Java and
+generate the Java source files, compile the sources, and build an AAR file
+ready for deployment:</p>
+    <div class="source"><pre>&lt;!DOCTYPE project&gt;
+
+&lt;project name="wsdl2java-example" default="usage" basedir="."&gt;
+
+  &lt;property name="project-name" value="wsdl2java-example"/&gt;
+  &lt;property file="build.properties"/&gt;
+  
+  &lt;property name="build" value="build"/&gt;
+
+  &lt;property name="src" value="src"/&gt;
+  &lt;property name="build.classes"      value="build/classes" /&gt;
+
+  &lt;path id="axis.classpath"&gt;
+     &lt;pathelement location="build/classes" /&gt;
+     &lt;fileset dir="${axis.home}/lib"&gt;
+       &lt;include name="**/*.jar" /&gt;
+
+     &lt;/fileset&gt;
+     &lt;pathelement location="${build.classes}" /&gt;
+  &lt;/path&gt;
+
+  &lt;target name="usage" description="Build file usage info (default task)"&gt;
+    &lt;echo message=" " /&gt;
+    &lt;echo message="${project-name} " /&gt;
+
+    &lt;echo message="-------------------------------------------------------" /&gt;
+    &lt;echo message=" " /&gt;
+    &lt;echo message="Available Targets:" /&gt;
+    &lt;echo message=" " /&gt;
+    &lt;echo message=" Compiling:" /&gt;
+    &lt;echo message="  compile           - Compiles the WSDL2Java source code" /&gt;
+
+    &lt;echo message=" " /&gt;
+    &lt;echo message=" Compiling client:" /&gt;
+    &lt;echo message="  compile_client           - Compiles the client source code" /&gt;
+    &lt;echo message=" " /&gt;
+    &lt;echo message=" Cleaning up:" /&gt;
+    &lt;echo message="  clean             - Delete class files" /&gt;
+
+    &lt;echo message=" " /&gt;
+    &lt;echo message=" WSDL:" /&gt;
+    &lt;echo message="  wsdl2java               - Generate source from WSDL" /&gt;
+    &lt;echo message=" " /&gt;
+    &lt;echo message=" AAR:" /&gt;
+    &lt;echo message="  aar               - Generate an .aar for deployment into WEB-INF/services" /&gt;
+
+    &lt;echo message=" " /&gt;
+    &lt;echo message=" Executing:" /&gt;
+    &lt;echo message="  runLogin               - Execute the runLogin client" /&gt;
+  &lt;/target&gt;
+
+  &lt;target name="prepare" &gt;
+    &lt;mkdir dir="${build.classes}" /&gt;
+
+  &lt;/target&gt;
+
+  &lt;target name="clean" &gt;
+     &lt;delete dir="${build}" /&gt;
+     &lt;delete dir="${dist}" /&gt;
+  &lt;/target&gt;
+
+  &lt;target name="compile"&gt;
+    &lt;echo message="Compiling wsdl2 files"/&gt;
+
+    &lt;javac
+     srcdir="output"
+     destdir="${build.classes}"
+     deprecation="true"
+     failonerror="true" debug="true"
+    &gt;
+
+     &lt;classpath refid="axis.classpath"/&gt; 
+    &lt;/javac&gt;
+
+  &lt;/target&gt;
+
+  &lt;target name="wsdl2java" depends="clean,prepare"&gt;
+      &lt;delete dir="output" /&gt;
+      &lt;java classname="org.apache.axis2.wsdl.WSDL2Java" fork="true"&gt;
+          &lt;classpath refid="axis.classpath"/&gt; 
+          &lt;arg value="-uri"/&gt;
+
+          &lt;arg file="wsdl/LoginEndpoint.wsdl"/&gt;
+          &lt;arg value="-ss"/&gt;
+          &lt;arg value="-sd"/&gt;
+          &lt;arg value="-o"/&gt;
+          &lt;arg file="output"/&gt;
+          &lt;arg value="-p"/&gt;
+
+          &lt;arg value="org.example.types"/&gt;
+      &lt;/java&gt;
+
+      &lt;!-- Move the schema folder to classpath--&gt;
+      &lt;move todir="${build.classes}"&gt;
+          &lt;fileset dir="output"&gt;
+              &lt;include name="**/*schema*/**/*.class"/&gt;
+
+              &lt;include name="**/*schema*/**/*.xsb"/&gt;
+          &lt;/fileset&gt;
+      &lt;/move&gt;
+
+  &lt;/target&gt;
+
+  &lt;target name="jar_wsdl" depends="compile"&gt;
+
+  &lt;jar jarfile="lib/axis2_example_wsdl.jar" &gt;
+  &lt;fileset dir="${build}/classes" /&gt;
+  &lt;/jar&gt;
+  &lt;/target&gt;
+  
+  &lt;!-- build an .aar file for axis2 web services --&gt;
+  &lt;target name="aar" depends="compile"&gt;
+
+     &lt;delete dir="${build.classes}/META-INF" /&gt;
+     &lt;mkdir dir="${build.classes}/META-INF" /&gt;
+     &lt;copy todir="${build.classes}/META-INF" &gt;
+       &lt;fileset dir="output/service_descriptors/LoginEndpoint" &gt;
+         &lt;!-- axis2 web services definitions file --&gt;
+         &lt;include name="services.xml"/&gt;
+
+       &lt;/fileset&gt;
+       &lt;fileset dir="wsdl" &gt;
+         &lt;include name="LoginEndpoint.wsdl"/&gt;
+       &lt;/fileset&gt;
+     &lt;/copy&gt;
+     &lt;jar jarfile="dist/LoginEndpoint.aar" &gt;
+
+       &lt;fileset dir="${build.classes}" /&gt;
+     &lt;/jar&gt;
+  &lt;/target&gt;
+
+  &lt;target name="compile_client"&gt;
+    &lt;echo message="Compiling client files"/&gt;
+
+    &lt;javac
+     srcdir="src"
+     destdir="${build.classes}"
+     deprecation="true"
+     failonerror="true" debug="true"
+    &gt;
+
+     &lt;classpath refid="axis.classpath"/&gt; 
+    &lt;/javac&gt;
+
+  &lt;/target&gt;
+
+  &lt;target name="runLogin" depends="compile_client" description="run webLogin client"&gt;
+
+     &lt;echo message="running the webLogin client" /&gt;
+     &lt;java classname="org.client.LoginClient" &gt;
+      &lt;classpath refid="axis.classpath"/&gt; 
+    &lt;/java&gt;
+  &lt;/target&gt;
+
+&lt;/project&gt;
+
+
+</pre></div>
+  <p>The above build.xml depends on a build.properties file which defines
+'axis.home', such as:</p><p>axis.home=/home/username/axis2-0.93-bin/</p><p>The above build.xml example also assumes three empty directories exist,
+'dist', 'lib', and 'src'.</p><p>Below is a validated WSDL Document following the Document/Literal Style.
+The name of this file matches the name used in the WSDL2Java ant task above,
+LoginEndpoint.wsdl</p>
+    <div class="source"><pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;definitions name="LoginService" targetNamespace="http://login" xmlns:tns="http://login" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://login/types"&gt;
+
+  &lt;types&gt;
+    &lt;schema targetNamespace="http://login/types" xmlns:tns="http://login/types" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://www.w3.org/2001/XMLSchema"&gt;
+      &lt;import namespace="http://schemas.xmlsoap.org/soap/encoding/"/&gt;
+      &lt;element name="returnWebLoginElement"&gt;
+        &lt;complexType&gt;
+          &lt;sequence&gt;
+
+            &lt;element ref="tns:soap_session_idElement"/&gt;
+            &lt;element ref="tns:web_user_nameElement"/&gt;
+          &lt;/sequence&gt;
+        &lt;/complexType&gt;
+      &lt;/element&gt;
+      &lt;element name="webLoginElement"&gt;
+
+        &lt;complexType&gt;
+          &lt;sequence&gt;
+            &lt;element ref="tns:user_nameElement"/&gt;
+            &lt;element ref="tns:user_passwordElement"/&gt;
+          &lt;/sequence&gt;
+        &lt;/complexType&gt;
+
+      &lt;/element&gt;
+      &lt;element name="user_nameElement" type="xsd:string"/&gt;
+      &lt;element name="user_passwordElement" type="xsd:string"/&gt;
+      &lt;element name="soap_session_idElement" type="xsd:string"/&gt;
+      &lt;element name="web_user_nameElement" type="xsd:string"/&gt;
+&lt;/schema&gt;&lt;/types&gt;
+
+  &lt;message name="LoginEndpoint_webLogin"&gt;
+     &lt;part name="parameters" element="ns2:webLoginElement"/&gt;
+  &lt;/message&gt;
+  &lt;message name="LoginEndpoint_webLoginResponse"&gt;
+    &lt;part name="result" element="ns2:returnWebLoginElement"/&gt;
+  &lt;/message&gt;
+
+  &lt;portType name="LoginEndpoint"&gt;
+    &lt;operation name="webLogin"&gt;
+      &lt;input message="tns:LoginEndpoint_webLogin" name="LoginEndpoint_webLogin"/&gt;
+      &lt;output message="tns:LoginEndpoint_webLoginResponse" name="LoginEndpoint_webLoginResponse"/&gt;
+    &lt;/operation&gt;
+  &lt;/portType&gt;
+
+  &lt;binding name="LoginEndpointBinding" type="tns:LoginEndpoint"&gt;
+    &lt;soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/&gt;
+    &lt;operation name="webLogin"&gt;
+      &lt;soap:operation soapAction="webLogin"/&gt;
+      &lt;input name="LoginEndpoint_webLogin"&gt;
+        &lt;soap:body use="literal"/&gt;
+
+      &lt;/input&gt;
+      &lt;output name="LoginEndpoint_webLoginResponse"&gt; 
+        &lt;soap:body use="literal"/&gt;
+      &lt;/output&gt;
+    &lt;/operation&gt;
+  &lt;/binding&gt;
+
+  &lt;service name="LoginService"&gt;
+    &lt;port name="LoginEndpointPort" binding="tns:LoginEndpointBinding"&gt;
+      &lt;soap:address location="http://localhost:8080/axis2/services/LoginEndpoint"/&gt;&lt;/port&gt;&lt;/service&gt;&lt;/definitions&gt;
+
+</pre></div>
+  <p>Place the above file, named LoginEndpoint.wsdl, in the directory 'wsdl'
+below the build.xml file. Run the WSDL2Java command via the ant task defined
+above, and there will be a directory called 'output' created. This directory
+contains the WSDL2Java generated source. An important detail is that an
+XMLBean class file is also generated by WSDL2Java, TypeSystemHolder.class.
+That file is placed into build/classes by the above ant task and will be
+needed to compile the generated sources.</p><p>The next step is to modify the generated Skeleton Java Source file - the
+Web Service. This file as generated returns null and needs to be updated to
+contain the business logic.</p><p>After the WSDL2Java command runs the file LoginEndpoint.wsdl, edit the
+following file:</p><p>output/org/example/types/LoginEndpointSkeleton.java. You should see the
+following code:</p>
+    <div class="source"><pre>package org.example.types;
+    /**
+     *  Auto generated java skeleton for the service by the Axis code generator
+     */
+    public class LoginEndpointSkeleton {
+     
+ 
+        /**
+         * Auto generated method signature
+         
+          * @param param0
+         
+         */
+        public  org.example.types.databinding.login.ReturnWebLoginElementDocument webLogin
+                  (org.example.types.databinding.login.WebLoginElementDocument param0 ){
+                //Todo fill this with the necessary business logic
+                return null;
+        }
+     
+    }
+
+</pre></div>
+  <p>Replace the contents of this file with the following, which uses the
+complex types generated by WSDL2Java and the example wsdl file:</p>
+    <div class="source"><pre>package org.example.types;
+import org.example.types.databinding.login.ReturnWebLoginElementDocument;
+import org.example.types.databinding.login.WebLoginElementDocument.WebLoginElement;
+
+/**
+ *  Auto generated java skeleton for the service by the Axis code generator
+ */
+public class LoginEndpointSkeleton {
+ 
+    /**
+     * Auto generated method signature
+     
+      * @param webLoginElementDocument changed from param0
+     
+     */
+    public  org.example.types.databinding.login.ReturnWebLoginElementDocument webLogin
+              (org.example.types.databinding.login.WebLoginElementDocument webLoginElementDocument ){
+
+            //Todo fill this with the necessary business logic
+            System.out.println("LoginEndpointSkeleton.webLogin reached successfully!");
+
+            // Get parameters passed in 
+            WebLoginElement webLoginElement = webLoginElementDocument.getWebLoginElement();
+            String userName = webLoginElement.getUserNameElement();
+            String password = webLoginElement.getUserPasswordElement();
+            System.out.println("LoginEndpointSkeleton.webLogin userName: " + userName);
+            System.out.println("LoginEndpointSkeleton.webLogin password: " + password);
+     
+            // input paramaters would be used here 
+    
+            // prepare output
+            org.example.types.databinding.login.ReturnWebLoginElementDocument retDoc =
+                org.example.types.databinding.login.ReturnWebLoginElementDocument.Factory.newInstance();
+            
+            org.example.types.databinding.login.ReturnWebLoginElementDocument.ReturnWebLoginElement
+            retElement =
+             org.example.types.databinding.login.ReturnWebLoginElementDocument.ReturnWebLoginElement.Factory.newInstance();
+            
+            retElement.setWebUserNameElement("joe sixpack");
+            retElement.setSoapSessionIdElement("some_random_string");
+            System.out.println("validate retElement: " + retElement.validate());
+
+            retDoc.setReturnWebLoginElement(retElement);
+            System.out.println("validate retDoc: " + retDoc.validate());
+            
+            System.out.println("LoginEndpointSkeleton.webLogin returning...");
+    
+            return retDoc; 
+    
+
+    }
+ 
+}
+
+
+</pre></div>
+  <p>The next steps assume the axis2.war has been deployed and has expanded in
+a servlet container.</p><p>Run the 'jar_wsdl' ant task from the example build.xml, which generates a
+jar file lib/axis2_example_wsdl.jar in the 'lib' directory under the
+build.xml . This jar will be used to compile the client, and also will be
+placed in the servlet container. Next, run the 'aar' ant task from the
+example build.xml, which generates the deployable axis2 web service. Place
+dist/LoginEndpoint.aar into axis2/WEB-INF/services . Place
+lib/axis2_example_wsdl.jar into axis2/WEB-INF/lib . Verify the happy axis
+page loaded the services correctly - there should be the service
+'LoginEndpoint' with the available operation 'webLogin' displayed.</p><p>The last step is to create and run the client. In the src directory create
+the file org.client.LoginClient.java, with the contents below:</p>
+    <div class="source"><pre>package org.client;
+
+import org.apache.axis2.AxisFault;
+
+import org.example.types.LoginEndpointStub;
+import org.example.types.databinding.login.WebLoginElementDocument;
+import org.example.types.databinding.login.WebLoginElementDocument.WebLoginElement;
+import org.example.types.databinding.login.ReturnWebLoginElementDocument;
+import org.example.types.databinding.login.WebLoginElementDocument;
+import org.example.types.databinding.login.WebLoginElementDocument.WebLoginElement;
+
+/**
+ * Login.
+ *
+ */
+public class LoginClient {
+
+    public static void main(String[] args) {
+        try {
+
+            System.out.println("webLogin, firing...");
+            LoginEndpointStub stub = 
+                new LoginEndpointStub(null, 
+                    "http://localhost:8080/axis2/services/LoginEndpoint");
+                    
+            WebLoginElementDocument webLoginElementDocument 
+                = WebLoginElementDocument.Factory.newInstance();
+            WebLoginElement webLoginElement = 
+                WebLoginElement.Factory.newInstance();
+            webLoginElement.setUserNameElement("joe");
+            webLoginElement.setUserPasswordElement("sixpack");
+            
+            webLoginElementDocument.setWebLoginElement(webLoginElement);
+            
+            System.out.println("validate: " +  webLoginElement.validate());
+             stub.webLogin(webLoginElementDocument);
+ 
+            ReturnWebLoginElementDocument returnWebLoginElementDocument = 
+                stub.webLogin(webLoginElementDocument);
+
+            System.out.println("Client returned");
+
+            org.example.types.databinding.login.ReturnWebLoginElementDocument.ReturnWebLoginElement
+                retElement = returnWebLoginElementDocument.getReturnWebLoginElement();
+
+            System.out.println("WebUserName: " + retElement.getWebUserNameElement());
+            System.out.println("SOAPSessionId: " + retElement.getSoapSessionIdElement());
+            System.out.println("webLogin, completed!!!");
+
+        } catch (AxisFault axisFault) {
+            axisFault.printStackTrace();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+}
+
+
+
+</pre></div>
+  <p>Now run the ant task 'ant runLogin' . The following output should
+appear:</p>
+    <div class="source"><pre>runLogin:
+     [echo] running the webLogin client
+     [java] webLogin, firing...
+     [java] validate: true
+     [java] Client returned
+     [java] WebUserName: joe sixpack
+     [java] SOAPSessionId: some_random_string
+     [java] webLogin, completed!!!
+
+</pre></div>
+  <p></p></div><div class="section"><a name="Appendix"></a><h2>Appendix</h2><ul>
+  <li>Eclipse reference - <a href="http://www.eclipse.org/" class="externalLink" title="External Link">
+    http://www.eclipse.org/</a></li>
+  <li>Custom Ant Tasks  - <a href="http://ant.apache.org/manual/develop.html" class="externalLink" title="External Link">
+    http://ant.apache.org/manual/develop.html</a></li>
+</ul><p> </p><p> </p><p> </p><p> </p><p> </p></div></div></div><div class="clear"><hr></hr></div><div id="footer"><div class="xright">© 2004-2005, Apache Software Foundation</div><div class="clear"><hr></hr></div></div></body></html>
\ No newline at end of file

Added: webservices/site/trunk/targets/axis2/0_93/CodegenToolReference.pdf
URL: http://svn.apache.org/viewcvs/webservices/site/trunk/targets/axis2/0_93/CodegenToolReference.pdf?rev=366125&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/site/trunk/targets/axis2/0_93/CodegenToolReference.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/site/trunk/targets/axis2/0_93/CodegenTools-EclipsePlugin.html
URL: http://svn.apache.org/viewcvs/webservices/site/trunk/targets/axis2/0_93/CodegenTools-EclipsePlugin.html?rev=366125&view=auto
==============================================================================
--- webservices/site/trunk/targets/axis2/0_93/CodegenTools-EclipsePlugin.html (added)
+++ webservices/site/trunk/targets/axis2/0_93/CodegenTools-EclipsePlugin.html Thu Jan  5 00:55:38 2006
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>Codegen Eclipse Wizard - Eclipse Plugin - Axis 2.0</title><style type="text/css" media="all">
+          @import url("./style/maven-base.css");
+          
+          @import url("./style/maven-theme.css");</style><link rel="stylesheet" href="./style/print.css" type="text/css" media="print"></link><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta></head><body class="composite"><div id="banner"><a href="http://www.apache.org/" id="organizationLogo"><img alt="Apache Software Foundation" src="http://www.apache.org/images/asf-logo.gif"></img></a><a href="http://ws.apache.org/axis2/" id="projectLogo"><img alt="Apache Axis 2.0" src="http://ws.apache.org/axis2/images/axis.jpg"></img></a><div class="clear"><hr></hr></div></div><div id="breadcrumbs"><div class="xleft">Last published: 20 December 2005
+                <span class="separator">|</span> Doc for  0.94-dev
+                </div><div class="xright"></div><div class="clear"><hr></hr></div></div><div id="leftColumn"><div id="navcolumn"><div id="menuAxis_2_0"><h5>Axis 2.0</h5><ul><li class="none"><a href="index.html">Home</a></li><li class="expanded"><a href="">Download Axis2</a><ul><li class="none"><a href="download.cgi">Releases</a></li><li class="none"><a href="http://svn.apache.org/viewcvs.cgi/webservices/axis2/trunk/?root=Apache-SVN" class="externalLink" title="External Link">Source Code</a></li></ul></li><li class="expanded"><a href="">Getting Started with Axis2</a><ul><li class="none"><a href="installationguide.html">Installation Guide</a></li><li class="none"><a href="userguide.html">User Guide</a></li><li class="none"><a href="webadminguide.html">Web Administration Guide</a></li></ul></li><li class="expanded"><a href="docs.html">Additional Reference</a><ul><li class="none"><a href="http://wiki.apache.org/ws/FrontPage/Axis2" class="externalLink" title="External Link">Axis2
  Wiki</a></li><li class="none"><a href="Axis2ArchitectureGuide.html">Architecture Guide</a></li><li class="none"><a href="OMTutorial.html">AXIOM Tutorial</a></li><li class="none"><a href="CodegenToolReference.html">Code Generation Tutorial</a></li><li class="none"><a href="rest-ws.html">REST Support</a></li><li class="none"><a href="mtom-guide.html">Handling Binary Data with Axis2</a></li><li class="none"><a href="axis2config.html">Axis2 Configuration Guide</a></li><li class="none"><a href="migration.html">Migrating from Axis 1.x</a></li><li class="none"><a href="api.html">Online Java Docs</a></li><li class="none"><a href="adb/adb-howto.html">ADB How-to</a></li><li class="none"><a href="security-module.html">WS-Security How-to</a></li><li class="none"><a href="otherTutorials.html">Other Tutorials</a></li></ul></li><li class="expanded"><a href="overview.html">Get Invloved</a><ul><li class="none"><a href="svn.html">Checkout the Source</a></li><li class="none"><a href="siteHowT
 o.html">Build the Site</a></li><li class="none"><a href="guidelines.html">Developer Guidelines</a></li><li class="none"><a href="refLib.html">Reference Library</a></li><li class="none"><a href="mail-lists.html">Mailing Lists</a></li><li class="none"><a href="faq.html">FAQ</a></li><li class="none"><a href="thanks.html">Thanks</a></li></ul></li><li class="expanded"><a href="">Project Information</a><ul><li class="none"><a href="mail-lists.html">Mailing Lists</a></li><li class="none"><a href="team-list.html">Project Team</a></li><li class="none"><a href="issue-tracking.html">Issue Tracking</a></li></ul></li></ul></div><div id="legend"><h5>Legend</h5><ul><li class="externalLink">External Link</li><li class="newWindow">Opens in a new window</li></ul></div><a href="http://maven.apache.org/" title="Built by Maven" id="poweredBy"><img alt="Built by Maven" src="./images/logos/maven-button-1.png"></img></a></div></div><div id="bodyColumn"><div class="contentBox"><div class="section"><
 a name="Code_Generator_Wizard_-_Eclipse_Plug-in"></a><h2>Code Generator Wizard - Eclipse Plug-in</h2><div class="subsection"><a name="Introduction"></a><h3>Introduction</h3><p>The Axis2 code generator comes built-in with an <a href="http://www.eclipse.org" class="externalLink" title="External Link">Eclipse</a> plug-in. This document explains the
+installation and usage of the Axis2 code generator plug-in.</p></div><div class="subsection"><a name="Installation"></a><h3>Installation</h3><p>The easiest way to obtain the plug-in would be the binary distribution.
+The full Axis binary distribution contains the compiled version of this
+plug-in under the tools directory.</p><p>If one needs to build the plugin from source it is not as trivial as
+running the Maven build. The reason is that the plug-in depends heavily on
+the Eclipse classes, which are only available in an Eclipse environment. The
+recommended procedure is to run the create-project.xml (in the "modules\tool"
+directory of the source distribution) build file which will create two
+folders (the other one for the Service Archiver tool) and copy the necessary
+files to relevant folders. Then Eclipse should be configured to open the
+contents in a PDE project. Please go through the Eclipse documentation to
+learn how to open projects in the PDE format.</p><p>Once you've obtained the plug-in just unzip the content of the plug-in
+archive to the eclipse plug-in directory (if it is the zipped-binary version)
+or copy the necessary folders to the eclipse plug-in directory and restart
+Eclipse.</p><p><i>Note - This plug-in works on Eclipse version 3.0 and upwards</i></p></div><div class="subsection"><a name="Operation"></a><h3>Operation</h3><p>If the plug-in is properly installed you should see a new wizard under the
+"New" section.(use the File -&gt; New -&gt; Other or Ctrl + N )</p><p><img src="images/tools/wsdl/wizardSelectionPage.jpg" width="500" height="500" alt=""></img></p><p>Selecting the wizard and pressing the next button will start the code
+generator wizard. Following is the first wizard page.</p><p><img src="images/tools/wsdl/toolSelectionpage.jpg" width="557" height="501" alt=""></img></p><p>Selecting the generate code from WSDL option leads to the next page. Note
+that the Java-to-WSDL tool is disabled.</p><p><img src="images/tools/wsdl/WSDLSelectionPage.jpg" width="518" height="500" alt=""></img></p><p>To move on to the next page the WSDL file location must be given. The
+browse button can be used to easily browse for a file rather than typing the
+whole path.</p><p>Once the WSDL file is selected, codegen options are to be selected. By far
+this is the most important page in this wizard, which determines the
+characteristics of the code being generated. Novices need not worry about
+these options since the most common options are defaulted, But advanced users
+will find it very easy to "turn the knobs" using these options.</p><p><img border="0" src="images/tools/wsdl/OptionsPage.jpg" width="518" height="500" alt=""></img></p><p>Once the options are taken care of, only the final step of the code
+generation is left. it is the selection of the output file location.</p><p><img border="0" src="images/tools/wsdl/OutputPage.jpg" width="518" height="500" alt=""></img></p><p>When the output file location is selected, the Finish button will be
+enabled. Pressing the finish button will generate the code and a message box
+will pop up acknowledging the success. Well Done! Now you are ready for Axis2
+Code generation.</p></div></div></div></div><div class="clear"><hr></hr></div><div id="footer"><div class="xright">© 2004-2005, Apache Software Foundation</div><div class="clear"><hr></hr></div></div></body></html>
\ No newline at end of file

Added: webservices/site/trunk/targets/axis2/0_93/OMTutorial.html
URL: http://svn.apache.org/viewcvs/webservices/site/trunk/targets/axis2/0_93/OMTutorial.html?rev=366125&view=auto
==============================================================================
--- webservices/site/trunk/targets/axis2/0_93/OMTutorial.html (added)
+++ webservices/site/trunk/targets/axis2/0_93/OMTutorial.html Thu Jan  5 00:55:38 2006
@@ -0,0 +1,516 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>OM Tutorial - Axis 2.0</title><style type="text/css" media="all">
+          @import url("./style/maven-base.css");
+          
+          @import url("./style/maven-theme.css");</style><link rel="stylesheet" href="./style/print.css" type="text/css" media="print"></link><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta></head><body class="composite"><div id="banner"><a href="http://www.apache.org/" id="organizationLogo"><img alt="Apache Software Foundation" src="http://www.apache.org/images/asf-logo.gif"></img></a><a href="http://ws.apache.org/axis2/" id="projectLogo"><img alt="Apache Axis 2.0" src="http://ws.apache.org/axis2/images/axis.jpg"></img></a><div class="clear"><hr></hr></div></div><div id="breadcrumbs"><div class="xleft">Last published: 20 December 2005
+                <span class="separator">|</span> Doc for  0.94-dev
+                </div><div class="xright"></div><div class="clear"><hr></hr></div></div><div id="leftColumn"><div id="navcolumn"><div id="menuAxis_2_0"><h5>Axis 2.0</h5><ul><li class="none"><a href="index.html">Home</a></li><li class="expanded"><a href="">Download Axis2</a><ul><li class="none"><a href="download.cgi">Releases</a></li><li class="none"><a href="http://svn.apache.org/viewcvs.cgi/webservices/axis2/trunk/?root=Apache-SVN" class="externalLink" title="External Link">Source Code</a></li></ul></li><li class="expanded"><a href="">Getting Started with Axis2</a><ul><li class="none"><a href="installationguide.html">Installation Guide</a></li><li class="none"><a href="userguide.html">User Guide</a></li><li class="none"><a href="webadminguide.html">Web Administration Guide</a></li></ul></li><li class="expanded"><a href="docs.html">Additional Reference</a><ul><li class="none"><a href="http://wiki.apache.org/ws/FrontPage/Axis2" class="externalLink" title="External Link">Axis2
  Wiki</a></li><li class="none"><a href="Axis2ArchitectureGuide.html">Architecture Guide</a></li><li class="none"><a href="OMTutorial.html">AXIOM Tutorial</a></li><li class="none"><a href="CodegenToolReference.html">Code Generation Tutorial</a></li><li class="none"><a href="rest-ws.html">REST Support</a></li><li class="none"><a href="mtom-guide.html">Handling Binary Data with Axis2</a></li><li class="none"><a href="axis2config.html">Axis2 Configuration Guide</a></li><li class="none"><a href="migration.html">Migrating from Axis 1.x</a></li><li class="none"><a href="api.html">Online Java Docs</a></li><li class="none"><a href="adb/adb-howto.html">ADB How-to</a></li><li class="none"><a href="security-module.html">WS-Security How-to</a></li><li class="none"><a href="otherTutorials.html">Other Tutorials</a></li></ul></li><li class="expanded"><a href="overview.html">Get Invloved</a><ul><li class="none"><a href="svn.html">Checkout the Source</a></li><li class="none"><a href="siteHowT
 o.html">Build the Site</a></li><li class="none"><a href="guidelines.html">Developer Guidelines</a></li><li class="none"><a href="refLib.html">Reference Library</a></li><li class="none"><a href="mail-lists.html">Mailing Lists</a></li><li class="none"><a href="faq.html">FAQ</a></li><li class="none"><a href="thanks.html">Thanks</a></li></ul></li><li class="expanded"><a href="">Project Information</a><ul><li class="none"><a href="mail-lists.html">Mailing Lists</a></li><li class="none"><a href="team-list.html">Project Team</a></li><li class="none"><a href="issue-tracking.html">Issue Tracking</a></li></ul></li></ul></div><div id="legend"><h5>Legend</h5><ul><li class="externalLink">External Link</li><li class="newWindow">Opens in a new window</li></ul></div><a href="http://maven.apache.org/" title="Built by Maven" id="poweredBy"><img alt="Built by Maven" src="./images/logos/maven-button-1.png"></img></a></div></div><div id="bodyColumn"><div class="contentBox"><div class="section"><
 p>
+
+</p></div><div class="section"><a name="OM_Tutorial"></a><h2>OM Tutorial</h2><div class="subsection"><a name="Section_1-Introduction"></a><h3>Section 1-Introduction</h3></div><div class="subsection"><a name="What_is_OM_"></a><h3>What is OM?</h3><p>OM stands for Object Model (also known as AXIOM - AXis Object Model) and
+refers to the XML infoset model that is developed for Axis 2. XML infoset
+refers to the information included inside the XML and for programmatical
+manipulation it is convenient to have a representation of this XML infoset in
+a language specific manner. For an object oriented language the obvious
+choice is a model made up of objects. DOM and JDOM are two such XML models.
+OM is conceptually similar to such an XML model by its external behavior but
+deep down it is very much different. The objective of this tutorial is to
+introduce the basics of OM and explain the best practices to follow while
+using OM. However before entering the deep ends of OM it is better to skim
+the surface and see what it is all about!</p></div><div class="subsection"><a name="For_whom_is_this_Tutorial_"></a><h3>For whom is this Tutorial?</h3><p>This tutorial can be used by anybody who is interested in OM and needs to
+go deeper in it. However it is assumed that the reader has a basic
+understanding of the concepts of XML (such as Namespaces) and a working
+knowledge of tools such as Ant.  Knowledge in similar object models such as
+DOM will be quite helpful in understanding but such knowledge is not assumed.
+Several Links are listed in the appendix/ links section that will help
+anybody who lacks the basic understanding of XML.</p></div><div class="subsection"><a name="What_is_pull_parsing__"></a><h3>What is pull parsing ?</h3><p>
+Pull parsing is a recent trend in XML processing. The previously popular XML
+processing frameworks such as SAX and DOM were "push-based" which means the
+control of the parsing was with the parser itself. This approach is fine and
+easy to use but it was not efficient in handling large XML documents since a
+complete memory model will be generated in the memory. Pull parsing inverts
+the control and hence the parser only proceeds at the users command. The user
+can decide to store or discard events generated from the parser. OM is based
+on pull parsing. To learn more about XML pull parsing see the <a href="http://www.bearcave.com/software/java/xml/xmlpull.html" class="externalLink" title="External Link">XML pull
+parsing introduction</a>.
+
+</p></div><div class="subsection"><a name="A_Bit_of_History"></a><h3>A Bit of History</h3><p>The original OM was proposed as a store for the pull parser events for
+later processing, at the Axis summit held at Colombo in September 2004.
+However this approach was soon improved and OM was pursued as a complete info
+set model due to its flexibility. Several implementation techniques were
+attempted during the initial phases. The two most promising techniques were
+the table based technique and the link list based technique. During the
+intermediate performance tests the link list based technique proved to be
+much more memory efficient for smaller and mid sized XML documents (the
+advantage of the table based OM was only visible for the large and very large
+XML documents) and hence the link list based technique was chosen as the most
+suitable. Initial efforts were focused on implementing the XML info set items
+which are relevant to the SOAP specification (DTD support, Processing
+Instruction support, etc were not considered).  The advantage of having a
+tight integration was evident at this stage and this resulted in having SOAP
+specific interfaces as part of OM rather than a layer on top of it. OM was
+deliberately made API centric. It allows the implementations to take place
+independently and swapped without affecting the program later.</p></div><div class="subsection"><a name="Features_of_OM"></a><h3>Features of OM</h3><p>OM is a lightweight, differed built XML info set representation based on
+StAX (<a href="http://www.jcp.org/aboutJava/communityprocess/first/jsr173/" class="externalLink" title="External Link">JSR
+173</a>), which is the standard streaming pull parser API. The object model
+can be manipulated as flexibly as any other object model (Such as <a href="http://www.jdom.org/" class="externalLink" title="External Link">JDOM</a>), but underneath the objects will be
+created only when they are absolutely required. This leads to much less
+memory intensive programming. Following is a short feature overview of OM.</p><ul>
+  <li>Lightweight ,  OM is specifically targeted to be lightweight. This is
+    achieved by reducing the depth of the hierarchy, number of methods and
+    the attributes enclosed in the objects. This makes the objects less
+    memory intensive.</li>
+  <li>Differed building , By far this is the most important feature of OM.
+    The objects are not made unless a need arises for them. This passes the
+    control of building over to the object model itself rather than an
+    external builder.</li>
+  <li>Pull based , For a differed building mechanism a pull based parser is
+    required. OM is based on StAX, the standard pull parser API.</li>
+</ul><p>
+
+</p><p class="special"></p><table class="bodyTable">
+  <tbody>
+    <tr class="a">
+      <td><img src="images/OM005.gif" alt="Rememeber this" width="35" height="57"></img></td>
+      <td class="special-td">OM is tightly bound to StAX API. To work with OM
+        a StAX compliant parser and the API <i>must</i> be present in the
+        classpath.</td>
+      <td></td>
+    </tr>
+  </tbody>
+</table><p>
+
+</p><p>The Following image shows how OM API is viewed by the user</p><p>
+
+</p><p align="center" class="img"><img src="images/archi006.jpg" alt="OM Structure" class="img" width="490" height="282"></img></p><p align="center" class="img-title">Figure 1</p><p>
+
+</p><p>OM Builder wraps the raw xml character stream through the StAX reader API.
+Hence the complexities of the pull event stream is covered</p></div><div class="subsection"><a name="A_bit_about_caching"></a><h3>A bit about caching</h3><p>Since OM is a differed built Object model, It incorporates the concept of
+caching. Caching refers to the creation of the objects while parsing the pull
+stream. The reason why this is so important is because caching can be turned
+off in certain situations. if so the  parser proceeds without building the
+object structure. User can extract the raw pull stream from OM and use that
+instead of the OM and in this case it is sometimes beneficial to switch off
+caching. The advanced operations section explains more on accessing the raw
+pull stream and switching the caching on and off.</p></div><div class="subsection"><a name="Where_does_SOAP_come_into_play_"></a><h3>Where does SOAP come into play?</h3><p>In a nutshell SOAP is a information exchange protocol based on XML. SOAP
+has a defined set of XML elements that should be used in messages. Since Axis
+is a "SOAP Engine" and OM is built for Axis, A set of SOAP specific objects
+were also defined along with OM. These SOAP Objects are extensions of the
+general OM objects. To <a href="http://www.w3schools.com/SOAP/soap_intro.asp" class="externalLink" title="External Link">learn more on SOAP</a></p><p>
+
+</p></div><div class="subsection"><a name="Section_2_-_Working_with_OM"></a><h3>Section 2 - Working with OM</h3></div><div class="subsection"><a name="Obtaining_the_OM_binary"></a><h3>Obtaining the OM binary</h3><p>OM is not a separate product but part of Axis2. However since Axis2 has a
+modular build structure It is possible to obtain an "OM only" jar.</p><p>The easiest way to obtain the OM binary is to download the Axis2 binary
+distribution. The lib directory will contain the axis2-xml-0.93.jar. However
+more adventurous users can build the OM from source. The next section
+describes how to build OM from source.</p><p>Detailed information on getting source from Axis2 SVN repository can be
+found <a href="svn.html" class="newWindow" title="New Window" target="_blank">here</a>.</p><p>After the source download OM-binary can be built. For both Windows and
+Linux move to the project directory and execute the command "maven jar". All
+other necessary jars will be automatically downloaded. When the build
+finishes successfully, the axis2-xml-0.93.jar can be found in the newly
+created "targets" directory in the XML module.</p><p>Once the OM-binary is obtained by any of the mentioned means , it should
+be included in the class path for any of the OM based programs to work. The
+subsequent parts of this tutorial assume that this build step is complete and
+the Axis-0.93.jar is correctly in the classpath along with the StAX API jar
+file and a StAX implementation.</p></div><div class="subsection"><a name="Creation"></a><h3>Creation</h3><p>Creation is the first and foremost action in using an Object
+representation. This part explains how OM can be built from an existing
+document or just programmatically. OM provides a notion of a factory and a
+builder to create objects. The factory helps to keep the code at the
+interface level and the implementations separately (Figure 2). Since OM is
+tightly bound to StAX, a StAX compliant reader should be created first with
+the desired input stream. Then the reader should be fed into the
+OMXMLBuilderFactory to instantiate a suitable builder. The interface provided
+by the builder is identical though the internal implementations vary.
+However, the types of the returned objects depend on the implementation of
+the builder. For example the SOAPModelBuilder returns SOAP specific objects
+(such as the SOAPEnvelope, which are sub classes of the OMElement) through
+its builder methods. The following piece of code shows the correct method of
+creating an OM document from an input stream. Note that the SOAP builder is
+used in this example.</p>
+    <div class="source"><pre><pre>//create the parser<br></br>        
+XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(new FileReader(file));
+<br></br>//create the builder<br></br>        
+OMXMLParserWrapper builder = OMXMLBuilderFactory.createStAXSOAPModelBuilder(OMAbstractFactory.getSOAP11Factory(), parser); 
+//get the root element (in this case the envelope)<br></br>
+        SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();</pre>
+</pre></div>
+  <div align="left">
+<b>Code listing 2.1</b></div><p>As the example shows, creating an OM from an input stream is pretty
+straightforward. However elements and nodes can be created programmatically
+to modify the structure as well. The recommended way to create OM objects
+programmatically is to use the factory. OMAbstractFactory.getOMFactory() will
+return the proper factory and the creator methods for each type should be
+called. Currently OM has two builders, namely the OM builder and the SOAP
+model builder. These builders provide the necessary information to the XML
+info set model to build itself.</p><p>
+
+</p><p class="img"><img src="images/archi007.jpg" alt="OM Structure 2" class="img" width="420" height="246"></img></p><p class="img-title">Figure 2</p><p>
+
+</p><p>A simple example is shown below.</p>
+    <div class="source"><pre>//create a factory
+OMFactory factory = OMAbstractFactory.getOMFactory();
+//use the factory to create two namespace objects
+OMNamespace ns1 = factory.createOMNamespace("bar","x");
+OMNamespace ns2 = factory.createOMNamespace("bar1","y");
+//use the factory to create three elements
+OMElement root = factory.createOMElement("root",ns1);
+OMElement elt11 = factory.createOMElement("foo1",ns1);
+OMElement elt12 = factory.createOMElement("foo2",ns1);
+
+</pre></div>
+  <div align="left">
+<b>Code listing 2.2</b></div><p>The reason to have a set of factory.createXXX methods is to cater for
+different implementations but keep the programmers code intact. Its highly
+recommend to use the factory for creating OM objects as this will ease the
+switching of different OM implementations. Several differences exist between
+a programmatically created OMNode and a conventionally built OMNode. The most
+important difference is that the former will have no builder object enclosed
+where as the latter always carries a reference to its builder. As stated
+earlier in this tutorial, since the object model is built as and when
+required, each and every OMNode should have a reference to its builder. If
+this information is not available, it is due to the Object being created
+without a builder. This difference becomes evident when the user tries to get
+a non caching pull parser from the OMElement. This will be discussed in more
+detail in the advanced operations section.</p><p>In order to understand the requirement of the builder reference in each
+and every OMNode, consider the following scenario. Assume that the parent
+element is built but the children elements are not. If the parent is asked to
+iterate through its children, this information is not readily available to
+the parent element and it should build its children first before attempting
+to iterate them. In order to provide a reference of the builder, each and
+every node of an OM structure should carry the reference to its builder. Each
+and every OMNode carries a flag that states its build status. Apart from this
+restriction there are no other constraints that keep the programmer away from
+mixing up programmatically made OMNode objects with OMNode objects built from
+builders.</p><p>The SOAP Object hierarchy is made in the most natural way for a
+programmer. An inspection of the API will show that it is quite close to the
+SAAJ API but with no bindings to DOM or any other model. The SOAP classes
+extend basic OM classes (such as the element) hence one can access a SOAP
+document either with the abstraction of SOAP or drill down to the underlying
+XML Object model with a simple casting.</p><p>
+
+</p></div><div class="subsection"><a name="Addition_of_Nodes"></a><h3>Addition of Nodes</h3><p>Addition and removal methods are primarily defined in the OMElement
+interface. The following are the most important in adding nodes.</p>
+    <div class="source"><pre>public void addChild(OMNode omNode);
+public void addAttribute(OMAttribute attr);
+
+</pre></div>
+  <div align="left">
+<b>Code listing 2.3</b></div><p>This code segment shows how the addition takes place. Note that it is
+related to the code segment shown in the creation section.</p>
+    <div class="source"><pre>//set the children
+elt11.addChild(elt21);
+elt12.addChild(elt22);
+root.addChild(elt11);
+root.addChild(elt12);
+
+</pre></div>
+  <div align="left">
+<b>Code listing 2.4</b></div><p>Note that AddChild method will always add the child as the first child of
+the parent. Removal of Nodes A given node can be removed from the tree by
+calling the detach() method. A node can also be removed from the tree by
+calling the remove method of the returned iterator which will also call the
+detach method of the particular node internally. Handling namespaces
+Namespaces are a tricky part of any XML object model and is the same in OM.
+However care has been taken to make the interface to the namespace very
+simple. OMNamespace is the class that represents a namespace with
+intentionally removed setter methods. This makes the OMNamespace immutable
+and allows the underlying implementation to share the objects without any
+difficulty. Following are the important methods available in OMElement to
+handle namespaces.</p>
+    <div class="source"><pre>public OMNamespace declareNamespace(String uri, String prefix);
+public OMNamespace declareNamespace(OMNamespace namespace);
+public OMNamespace findNamespace(String uri, String prefix) throws OMException;
+
+</pre></div>
+  <div align="left">
+<b>Code listing 2.5</b></div><p>The declareNamespaceXX methods are fairly straightforward. They add a
+namespace to namespace declarations section. Note that a namespace
+declaration that has already being added will not be added twice.
+FindNamespace is a very handy method to locate a namespace object higher up
+the object tree. It searches for a matching namespace in its own declarations
+section and jumps to the parent if it's not found. The search progresses up
+the tree until a matching namespace is found or the root has been reached.</p><p>During the serialization a directly created namespace from the factory
+will only be added to the declarations when that prefix is encountered by the
+serializer. More of the serialization matters will be discussed in the
+serializer section.</p><p>The following simple code segment shows how the namespaces are dealt with
+in OM</p>
+    <div class="source"><pre>OMFactory factory = OMAbstractFactory.getOMFactory();
+OMNamespace ns1 = factory.createOMNamespace("bar","x");
+OMElement root = factory.createOMElement("root",ns1);
+OMNamespace ns2 = root.declareNamespace("bar1","y");
+OMElement elt1 = factory.createOMElement("foo",ns1);
+OMElement elt2 = factory.createOMElement("yuck",ns2);
+OMText txt1 = factory.createText(elt2,"blah");
+elt2.addChild(txt1);
+elt1.addChild(elt2);
+root.addChild(elt1);
+
+</pre></div>
+  <div align="left">
+<b>Code listing 2.6</b></div><p>Serilization of the root element produces the following XML</p>
+    <div class="source"><pre>&lt;x:root xmlns:x="bar" xmlns:y="bar1"&gt;
+  &lt;x:foo&gt;
+        &lt;y:yuck&gt;blah&lt;/y:yuck&gt;
+  &lt;/x:foo&gt;
+&lt;/x:root&gt;
+
+</pre></div>
+  </div><div class="subsection"><a name="Traversing"></a><h3>Traversing</h3><p>Traversing the object structure can be done in the usual way by using the
+list of children. Note however that the child nodes are returned as an
+iterator. The Iterator supports the 'OM way' of accessing elements and is
+more convenient than a list for sequential access. The following code sample
+shows how the children can be accessed. The children are of the type OMNode
+that can either be OMText or OMElement.</p>
+    <div class="source"><pre>Iterator children = root.getChildren();
+While(children.hasNext()){
+        OMNode node = (OMNode)children.next();
+}
+
+</pre></div>
+  <div align="left">
+<b>Code listing 2.7</b></div><p>Apart from this every OMNode has links to its siblings. If more thorough
+navigation is needed the nextSibling() and PreviousSibling() methods can be
+used. A more selective set can be chosen by using the
+getChildrenWithName(QName) methods. The getChildWithName(Qname) method
+returns the first child that matches the given QName and
+getChildrenWithName(QName) returns a collection containing all the matching
+children. The advantage of these iterators is that they won't build the whole
+object structure at once, until its required.</p><p>
+
+</p><p class="special"></p><table class="bodyTable">
+  <tbody>
+    <tr class="b">
+      <td><img src="images/OM005.gif" alt="Rememeber this" width="35" height="57"></img></td>
+      <td class="special-td">All iterator implementations internally stay one
+        step ahead of their apparent location to provide the correct value
+        for the hasNext() method. This hidden advancement can build elements
+        that are not intended to be built at all. Hence these iterators are
+        recommended only when caching is not a concern.</td>
+      <td></td>
+    </tr>
+  </tbody>
+</table><p>
+
+</p><p>OM can be serialized either as the pure object model or the pull event
+stream. The serialization uses a XMLStreamWriter object to write out the
+output and hence the same serialization mechanism can be used to write
+different types of outputs (such as text, binary, etc.,).</p><p>A caching flag is provided by OM to control the building of the in-memory
+OM. The OMNode has two methods, serializeWithCache and serialize  When
+serialize is called the cache flag is reset and the serializer does not cache
+the stream. Hence the object model will not be built if the cache flag is not
+set.</p><p>The serializer serializes namespaces in the following way.</p><ol>
+  <li>When a namespace that is in the scope but not yet declared is
+    encountered, then it will be declared.</li>
+  <li>When a namespace that is in scope and already declared is encountered,
+    the existing declarations prefix is used.</li>
+  <li>When the namespaces are declared explicitly using the elements
+    declareNamespace() method, they will be serialized even if those
+    namespaces are not used in that scope.</li>
+</ol><p>Because of this behavior, if a fragment of the XML is serialized, it will
+also be <i>namespace qualified</i> with the necessary namespace
+declarations.</p><p>Here is an example that shows how to write the output to the console, with
+reference to the earlier code sample (Code listing  2.1 ) that created a SOAP
+envelope.</p><p></p>
+    <div class="source"><pre>XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
+//dump the output to console with caching
+envelope.serializeWithCache(writer); 
+writer.flush();
+ 
+
+</pre></div>
+  <div align="left">
+<b>Code listing 2.8</b></div><p>The above mentioned features of the serializer forces a correct
+serialization even if only a part of the OM tree is serialized. The following
+serializations show how the serialization mechanism takes the trouble to
+accurately figure out the namespaces. The example is from code listing 2.6
+which creates a small OM programmatically. Serialization of the root element
+produces</p>
+    <div class="source"><pre>&lt;x:root xmlns:x="bar" xmlns:y="bar1"&gt;
+ &lt;x:foo&gt;
+   &lt;y:yuck&gt;blah&lt;/y:yuck&gt;
+ &lt;/x:foo&gt;
+&lt;/x:root&gt;
+
+</pre></div>
+  <p>However serialization of only the foo element produces</p>
+    <div class="source"><pre>&lt;x:foo xmlns:x="bar"&gt;
+&lt;y:yuck xmlns:y="bar1"&gt;blah&lt;/y:yuck&gt;
+&lt;/x:foo&gt;
+
+
+</pre></div>
+  <p>Note how the serializer puts the relevant namespace declarations in place.
+Complete code for the OM based document building and serialization The
+following code segment shows how to use the OM for completely building a
+document and then serializing it into text pushing the output to the console.
+Only the important sections are shown here and the complete program listing
+can be found in the appendix.</p>
+    <div class="source"><pre>//create the parser
+XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(new FileReader(file));
+//create the builder
+OMXMLParserWrapper builder =   OMXMLBuilderFactory.createStAXSOAPModelBuilder(OMAbstractFactory.getOMFactory(),parser);
+//get the root element (in this case the envelope)
+SOAPEnvelope envelope = (SOAPEnvelope)builder.getDocumentElement();
+//get the writer
+XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
+//dump the out put to console with caching
+envelope.serialize(writer);
+writer.flush();
+
+</pre></div>
+  <div align="left">
+<b>Code listing 2.9</b></div></div><div class="subsection"><a name="Section_3_-_Advanced_Operations_with_OM"></a><h3>Section 3 - Advanced Operations with OM</h3></div><div class="subsection"><a name="Use_of_the_OMNavigator_for_Traversal"></a><h3>Use of the OMNavigator for Traversal</h3><p>OM provides a utility class to navigate the OM structure. The navigator
+provides an in-order traversal of the OM tree up to the last-built node. The
+Navigator has two states called the navigable state and the completion state.
+Since the navigator provides the navigation starting from an OMElement, it is
+deemed to have completed the navigation when the starting node is reached
+again. This state is known as the completion state. Once the navigator has
+reached the complete status its navigation is done and it cannot proceed
+anymore.</p><p>It is possible that the OM tree does not get built completely when it is
+navigated. The navigable status shows whether the tree structure is
+navigable. When the navigator is complete it is not navigable anymore.
+However it is possible for a navigator to become non-navigable without being
+complete. The following code sample shows how the navigator should be used
+and handled using its states.</p>
+    <div class="source"><pre>//Create a navigator
+OMNavigator navigator = new OMNavigator(envelope);
+OMNode node = null;
+while (navigator.isNavigable()) {
+     node = navigator.next();
+}
+
+</pre></div>
+  <div align="left">
+<b>Code listing 3.1</b></div></div><div class="subsection"><a name="Accessing_the_Pull_Parser"></a><h3>Accessing the Pull Parser</h3><p>OM is tightly integrated with StAX and the
+getXMLStreamReader()/getXMLStreamReaderWithoutCaching() methods in the
+OMElement provides a XMLStreamReader object. This XMLStreamReader instance
+has a special capability of switching between the underlying stream and the
+OM object tree if the cache setting is off. However this functionality is
+completely transparent to the user. This is further explained in the
+following paragraphs.</p><p> OM has the concept of caching, and OM is the actual cache of the
+events fired. However the requester can choose to get the pull events from
+the underlying stream rather than the OM tree. This can be achieved by
+getting the pull parser with the cache off. If the pull parser was obtained
+without switching off cache, the new events fired will be cached and the tree
+updated. This returned pull parser will switch between the object structure
+and the stream underneath and the users need not worry about the differences
+caused by the switching. The exact pull stream the original document would
+have provided would be produced even if the OM tree was fully/partially
+built. The getXMLStreamReaderWithoutCaching() method is very useful when the
+events need to be handled in a pull based manner without any intermediate
+models. This makes such operations faster and efficient. </p><p>
+
+</p><p class="special"></p><table class="bodyTable">
+  <tbody>
+    <tr class="a">
+      <td><img src="images/OM005.gif" alt="Rememeber this" width="35" height="57"></img></td>
+      <td class="special-td">For consistency reasons once the cache is
+        switched off it cannot be switched on again.</td>
+      <td></td>
+    </tr>
+  </tbody>
+</table><p>
+
+</p></div><div class="subsection"><a name=" "></a><h3> </h3></div><div class="subsection"><a name="Section_4_-_Known_Limitations_of_OM"></a><h3>Section 4 - Known Limitations of OM</h3></div><div class="subsection"><a name="Inefficient_Namespace_serialization"></a><h3>Inefficient Namespace serialization</h3><p>Although the serializer acts correctly in every situation, the code that
+it produces may not be efficient all the time. Take the following case where
+a similar code listing to 1.6 is used but with two elements having the same
+namespace. Note that the newly added items are in bold.</p>
+    <div class="source"><pre>OMFactory factory = OMAbstractFactory.getOMFactory();
+OMNamespace ns1 = factory.createOMNamespace("bar","x");
+OMElement root = factory.createOMElement("root",ns1);
+OMNamespace ns2 = root.declareNamespace("bar1","y");
+OMElement elt1 = factory.createOMElement("foo",ns1);
+OMElement elt2 = factory.createOMElement("yuck",ns2);
+
+OMText txt1 = factory.createText(elt2,"blah");
+
+elt2.addChild(txt1);
+elt1.addChild(elt2);
+
+root.addChild(elt1);
+
+</pre></div>
+  <div align="left">
+<b>Code listing 4.1</b></div><p>Serialization of the root element provides the following XML</p>
+    <div class="source"><pre>&lt;x:root xmlns:x="bar" xmlns:y="bar1"&gt;
+&lt;x:foo&gt;
+  &lt;y:yuck&gt;blahblah&lt;/y:yuck&gt;
+ &lt;y:yuck&gt;blah&lt;/y:yuck&gt;
+ &lt;/x:foo&gt;
+&lt;/x:root&gt;
+
+
+
+</pre></div>
+  <p>However if the serialization is carried on the foo element then the
+following XML is produced</p>
+    <div class="source"><pre>&lt;x:foo xmlns:x="bar" &gt;
+  &lt;y:yuck " xmlns:y="bar1"&gt;blahblah&lt;/y:yuck&gt;
+  &lt;y:yuck " xmlns:y="bar1"&gt;blah&lt;/y:yuck&gt;
+ &lt;/x:foo&gt;
+
+
+
+</pre></div>
+  <p>Note that the same Namespace is serialized twice. This XML is semantically
+correct but the same semantics could have been achieved by placing the y
+namespace declaration on the parent element. This behavior is due to the
+nature of the serialization where it tries to be accurate but not optimal. It
+is deliberately kept unchanged since such optimizations slow down the common
+case.</p></div><div class="subsection"><a name="Summary"></a><h3>Summary</h3><p>This is meant to be a small yet comprehensive introduction to AXIOM. AXIOM
+however is a lot more than what is described in this tutorial. Readers are
+welcome to explore AXIOM, specially it's capabilities to handle binary
+content.</p></div><div class="subsection"><a name="Appendix"></a><h3>Appendix</h3></div><div class="subsection"><a name="Program_listing_for_complete_OM_-_build_and_serialize"></a><h3>Program listing for complete OM - build and serialize</h3>
+    <div class="source"><pre>import org.apache.axis2.om.SOAPEnvelope;
+import org.apache.axis2.om.OMFactory;
+import org.apache.axis2.om.OMXMLParserWrapper;
+import org.apache.axis2.impl.llom.factory.OMXMLBuilderFactory;
+
+import javax.xml.stream.*;
+import java.io.FileReader;
+import java.io.FileNotFoundException;
+
+public class TestOMBuilder {
+
+    /**
+     * Pass the file name as an argument
+     * @param args
+     */
+    public static void main(String[] args) {
+        try {
+            //create the parser
+            XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(new FileReader(args[0]));
+            //create the builder
+            OMXMLParserWrapper builder = OMXMLBuilderFactory.createStAXSOAPModelBuilder(OMAbstractFactory.getOMFactory(), parser);
+            //get the root element (in this case the envelope)
+            SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
+            //get the writer
+            XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
+            //dump the out put to console with caching
+            envelope.serialize(writer);
+writer.flush();
+
+        } catch (XMLStreamException e) {
+            e.printStackTrace();
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+}
+
+</pre></div>
+  </div><div class="subsection"><a name="Links"></a><h3>Links</h3><p>
+For basics in XML
+<ul>
+  <li><a href="http://www-128.ibm.com/developerworks/xml/newto/index.html" class="externalLink" title="External Link">Developerworks
+    Introduction to XML</a></li>
+  <li><a href="http://www.bearcave.com/software/java/xml/xmlpull.html" class="externalLink" title="External Link">Introduction
+    to Pull parsing</a></li>
+</ul>
+</p></div></div><div class="section"><table class="bodyTable">
+  <tbody>
+    <tr class="b">
+      <td align="center">All rights reserved by Apache Software
+      Foundation</td>
+    </tr>
+  </tbody>
+</table></div></div></div><div class="clear"><hr></hr></div><div id="footer"><div class="xright">© 2004-2005, Apache Software Foundation</div><div class="clear"><hr></hr></div></div></body></html>
\ No newline at end of file

Added: webservices/site/trunk/targets/axis2/0_93/ServiceArchiveToolReference.html
URL: http://svn.apache.org/viewcvs/webservices/site/trunk/targets/axis2/0_93/ServiceArchiveToolReference.html?rev=366125&view=auto
==============================================================================
--- webservices/site/trunk/targets/axis2/0_93/ServiceArchiveToolReference.html (added)
+++ webservices/site/trunk/targets/axis2/0_93/ServiceArchiveToolReference.html Thu Jan  5 00:55:38 2006
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title> - Axis 2.0</title><style type="text/css" media="all">
+          @import url("./style/maven-base.css");
+          
+          @import url("./style/maven-theme.css");</style><link rel="stylesheet" href="./style/print.css" type="text/css" media="print"></link><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta></head><body class="composite"><div id="banner"><a href="http://www.apache.org/" id="organizationLogo"><img alt="Apache Software Foundation" src="http://www.apache.org/images/asf-logo.gif"></img></a><a href="http://ws.apache.org/axis2/" id="projectLogo"><img alt="Apache Axis 2.0" src="http://ws.apache.org/axis2/images/axis.jpg"></img></a><div class="clear"><hr></hr></div></div><div id="breadcrumbs"><div class="xleft">Last published: 20 December 2005
+                <span class="separator">|</span> Doc for  0.94-dev
+                </div><div class="xright"></div><div class="clear"><hr></hr></div></div><div id="leftColumn"><div id="navcolumn"><div id="menuAxis_2_0"><h5>Axis 2.0</h5><ul><li class="none"><a href="index.html">Home</a></li><li class="expanded"><a href="">Download Axis2</a><ul><li class="none"><a href="download.cgi">Releases</a></li><li class="none"><a href="http://svn.apache.org/viewcvs.cgi/webservices/axis2/trunk/?root=Apache-SVN" class="externalLink" title="External Link">Source Code</a></li></ul></li><li class="expanded"><a href="">Getting Started with Axis2</a><ul><li class="none"><a href="installationguide.html">Installation Guide</a></li><li class="none"><a href="userguide.html">User Guide</a></li><li class="none"><a href="webadminguide.html">Web Administration Guide</a></li></ul></li><li class="expanded"><a href="docs.html">Additional Reference</a><ul><li class="none"><a href="http://wiki.apache.org/ws/FrontPage/Axis2" class="externalLink" title="External Link">Axis2
  Wiki</a></li><li class="none"><a href="Axis2ArchitectureGuide.html">Architecture Guide</a></li><li class="none"><a href="OMTutorial.html">AXIOM Tutorial</a></li><li class="none"><a href="CodegenToolReference.html">Code Generation Tutorial</a></li><li class="none"><a href="rest-ws.html">REST Support</a></li><li class="none"><a href="mtom-guide.html">Handling Binary Data with Axis2</a></li><li class="none"><a href="axis2config.html">Axis2 Configuration Guide</a></li><li class="none"><a href="migration.html">Migrating from Axis 1.x</a></li><li class="none"><a href="api.html">Online Java Docs</a></li><li class="none"><a href="adb/adb-howto.html">ADB How-to</a></li><li class="none"><a href="security-module.html">WS-Security How-to</a></li><li class="none"><a href="otherTutorials.html">Other Tutorials</a></li></ul></li><li class="expanded"><a href="overview.html">Get Invloved</a><ul><li class="none"><a href="svn.html">Checkout the Source</a></li><li class="none"><a href="siteHowT
 o.html">Build the Site</a></li><li class="none"><a href="guidelines.html">Developer Guidelines</a></li><li class="none"><a href="refLib.html">Reference Library</a></li><li class="none"><a href="mail-lists.html">Mailing Lists</a></li><li class="none"><a href="faq.html">FAQ</a></li><li class="none"><a href="thanks.html">Thanks</a></li></ul></li><li class="expanded"><a href="">Project Information</a><ul><li class="none"><a href="mail-lists.html">Mailing Lists</a></li><li class="none"><a href="team-list.html">Project Team</a></li><li class="none"><a href="issue-tracking.html">Issue Tracking</a></li></ul></li></ul></div><div id="legend"><h5>Legend</h5><ul><li class="externalLink">External Link</li><li class="newWindow">Opens in a new window</li></ul></div><a href="http://maven.apache.org/" title="Built by Maven" id="poweredBy"><img alt="Built by Maven" src="./images/logos/maven-button-1.png"></img></a></div></div><div id="bodyColumn"><div class="contentBox"><div class="section"><
 a name="Service_Archive_Wizard_-_Eclipse_Plug-in"></a><h2>Service Archive Wizard - Eclipse Plug-in</h2><p>Axis2 comes with a simple service archiver tool. This tool provides easy to use functionality to develop a axis archive or an "aar" file or a "jar" file that can be deployed as a web service to the Axis2. This tool is in the form of 
+an Eclipse plug-in and can be downloaded from the downloads section. This document describes how the tool can be used.</p><div class="subsection"><a name="Installation"></a><h3>Installation</h3><p>
+Download the binary version of the plug-in and extract the content of the zip 
+file into the Eclipse installation folder. (The plug-in will actually go into 
+the plugins directory in the Eclipse installation root). Restarting Eclipse will set 
+the plug-in automatically.
+</p></div><div class="subsection"><a name="Operation"></a><h3>Operation</h3><p>If the plug-in is properly installed you should see a new wizard under the 
+"New" section.(use the File -&gt; New -&gt; Other or Ctrl + N ) </p><p align="center">
+<img border="0" src="images/tools/service/ServiceWizardSelection.jpg" width="500" height="500" alt=""></img></p><p>Selecting the wizard and pressing the next button will start the service
+generator wizard. Following is the first wizard page.</p><p align="center"><img border="0" src="images/tools/service/ServicePage1.jpg" width="500" height="500" alt=""></img></p><p>Once the class file folder  is given (which should be a folder in the file 
+system) the next button will be enabled. Page 2 of the wizard requires you to 
+locate the wsdl file. Note that the WSDL file cannot be skipped in this version of the tool</p><p align="center">
+<img border="0" src="images/tools/service/service_page2.JPG" width="500" height="500" alt=""></img></p><p align="center">Select the service.XML file in the next wizard page</p><p align="center"><img border="0" src="images/tools/service/service_page3.JPG" width="500" height="500" alt=""></img></p><p>Note that The service XML file can be generated if needed. To proceed
+to the service generaion page, check the "generate automatically" checkbox. </p><p align="center"><img border="0" src="images/tools/service/service_page3_hl.JPG" alt=""></img></p><p>If the automatic mode is not selected then the wizard
+will directly jump to the library selection page. However if the automatic mode is selected the wizard will show the
+following page</p><p align="center"><img border="0" src="images/tools/service/service_page4_plain.JPG" width="500" height="500" alt=""></img></p><p>This is a somewhat complicated page. The service name textbox should include the name of the service that you
+wish to give this service. 
+For the implementation class type in the fully qualified class name and hit the load button to view the operations</p><p align="center"><img border="0" src="images/tools/service/service_page4_load.JPG" alt=""></img></p><p> The loaded operations should be displayed in a table. Once this is displayed you can filter the methods by selecting/deselcting the methods using the checkbox at each row.</p><p align="center"><img border="0" src="images/tools/service/service_page4_table.JPG" width="500" height="500" alt=""></img></p><p>Further filtering can be achieved by using the "search declared methods" only checkbox</p><p align="center"><img border="0" src="images/tools/service/service_page4_search_declared.JPG" alt=""></img></p><p>Once the method selection is complete the wizard has enough information to generate a basic services.xml file. If further customization is required, there's no choice but to manually edit it!</p><p>The next step is to add the libraries. The library additio
 n page looks like this </p><p align="center"><img border="0" src="images/tools/service/service_page5.JPG" alt=""></img></p><p>The library name (with full path) can be either typed on the text box or browsed for using the browse button. </p><p align="center"><img border="0" src="images/tools/service/service_page5_browsed.JPG" alt=""></img></p><p>Hit the Add button to add the library to the list. The added libraries should be displayed in the list box</p><p align="center"><img border="0" src="images/tools/service/service_page5_hl.JPG" alt=""></img></p><p align="center"><img border="0" src="images/tools/service/service_page5_added.JPG" alt=""></img></p><p>If any library needs to be removed, highlight it in the list and hit remove. Click next to proceed to the last page of the wizard</p><p align="center"><img border="0" src="images/tools/service/service_page5_remove.JPG" alt=""></img></p><p>The last page of the wizard asks for the output location and the output archive name.</p>
 <p>
+</p><p align="center"><img border="0" src="images/tools/service/service_page6.JPG" alt=""></img></p><p>Once all the parameters are filled, hit the finish button to complete the wizard and generate the 
+service archive.</p><p align="center"><img border="0" src="images/tools/service/success_msg.JPG" alt=""></img></p><p> If you see the above message, then you've successfully generated the service archive!  This service archive can be hot deployed to the axis2</p><p> The plugin also adds a help document to the Eclipse help system. You should see it if you go to Eclipse help content </p><p align="center"><img border="0" src="images/tools/service/help.JPG" alt=""></img></p></div></div><div class="section"><p> </p><p> </p><p> </p><p> </p></div></div></div><div class="clear"><hr></hr></div><div id="footer"><div class="xright">© 2004-2005, Apache Software Foundation</div><div class="clear"><hr></hr></div></div></body></html>
\ No newline at end of file