You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ch...@apache.org on 2006/02/21 04:54:46 UTC
svn commit: r379323 - in /webservices/axis2/trunk/java/xdocs:
0_94/CodegenToolReference.html latest/CodegenToolReference.html
Author: chinthaka
Date: Mon Feb 20 19:54:44 2006
New Revision: 379323
URL: http://svn.apache.org/viewcvs?rev=379323&view=rev
Log:
removed concept of wizard from command line tool
Modified:
webservices/axis2/trunk/java/xdocs/0_94/CodegenToolReference.html
webservices/axis2/trunk/java/xdocs/latest/CodegenToolReference.html
Modified: webservices/axis2/trunk/java/xdocs/0_94/CodegenToolReference.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_94/CodegenToolReference.html?rev=379323&r1=379322&r2=379323&view=diff
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_94/CodegenToolReference.html (original)
+++ webservices/axis2/trunk/java/xdocs/0_94/CodegenToolReference.html Mon Feb 20 19:54:44 2006
@@ -1,7 +1,7 @@
<html>
<head>
<meta http-equiv="content-type" content="">
- <title>Code Generator Wizard</title>
+ <title>Code Generator - Command Line Tool</title>
</head>
<body>
Modified: webservices/axis2/trunk/java/xdocs/latest/CodegenToolReference.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/CodegenToolReference.html?rev=379323&r1=379322&r2=379323&view=diff
==============================================================================
--- webservices/axis2/trunk/java/xdocs/latest/CodegenToolReference.html (original)
+++ webservices/axis2/trunk/java/xdocs/latest/CodegenToolReference.html Mon Feb 20 19:54:44 2006
@@ -1,732 +1,732 @@
-<html>
-<head>
- <meta http-equiv="content-type" content="">
- <title>Code Generator Wizard</title>
-</head>
-
-<body>
-<h1>Code Generator Wizard - Command Line Tool</h1>
-
-<h2>Introduction</h2>
-
-<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>
-
-<h2>Option Reference</h2>
-
-<table border="1" cellpadding="0" cellspacing="0"
-style="border-collapse: collapse" width="100%" id="AutoNumber1">
- <tbody>
- <tr>
- <td width="20%"><strong>Short Option</strong></td>
- <td width="20%"><strong>Long Option</strong></td>
- <td width="60%"><strong>Description</strong></td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-uri <Location of WSDL></td>
- <td width="20%">None</td>
- <td width="60%">WSDL file location. This should point to a WSDL file in
- the local file system</td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-o <output Location> :</td>
- <td width="20%">--output</td>
- <td width="60%">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>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-l <language></td>
- <td width="20%">--language</td>
- <td width="60%">Output language. Currently the code generator can
- generate code in Java and CSharp. (CSharp support is experimental)
- When omitted defaults to Java.
-
- <p>Allowed options are</p>
- <ul>
- <li>java</li>
- <li>cs</li>
- </ul>
- </td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-p <package name></td>
- <td width="20%">--package</td>
- <td width="60%">The target package name. If omitted, a default package
- (formed using the target namespace of the WSDL) will be used.</td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-a</td>
- <td width="20%">--async</td>
- <td width="60%">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>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-s</td>
- <td width="20%">--sync</td>
- <td width="60%">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>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-t</td>
- <td width="20%">--test-case</td>
- <td width="60%">Generates a test case. In the case of Java it would be
- a junit test case.</td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-ss</td>
- <td width="20%">--server-side</td>
- <td width="60%">Generates server side code (i.e. skeletons). Default is
- off</td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-sd</td>
- <td width="20%">--service-description</td>
- <td width="60%">Generates the service descriptor (i.e. server.xml).
- Default is off. only valid with -ss, the server side code generation
- option</td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-d</td>
- <td width="20%">--databinding-method</td>
- <td width="60%">Specifies the Databinding framework. valid values are
- xmlbeans,adb and none. Default is adb.</td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-g</td>
- <td width="20%">--generate-all</td>
- <td width="60%">Genrates all the classes. This option is valid only
- with the -ss (server side code generation) option. When on, the
- client code (stubs) will also be generated along with the
- skeleton.</td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-u</td>
- <td width="20%">--unpack-classes</td>
- <td width="60%">Unpack classes. This option specifies whether to unpack
- the classes and generate separate classes for the databinders.</td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-sn</td>
- <td width="20%">--service-name</td>
- <td width="60%">Specifies the service name to be code generated. If the
- service name is is not specified, then the first service will be
- picked</td>
- <td></td>
- </tr>
- <tr>
- <td width="20%">-pn</td>
- <td width="20%">--port-name</td>
- <td width="60%">Specifies the port name to be code generated. If the
- port name is is not specified, then the first port (of the selected
- service) will be picked</td>
- <td></td>
- </tr>
- </tbody>
-</table>
-
-<p>Apart from these mentioned options one can pass extra option by prefixing
-them with -E (uppercase). These extra options will be processed by the
-extensions. The extra options that can be passed are documented separately
-with the extensions documentation (For example with ADB)</p>
-
-<h1>Code Generator Wizard - Ant Task</h1>
-
-<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>
-
-<h2>Ant Task Reference</h2>
-
-<table border="1" cellpadding="0" cellspacing="0"
-style="border-collapse: collapse" width="100%" id="AutoNumber2">
- <tbody>
- <tr>
- <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>
- <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>
- <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>
- <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>
- <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>
- <td width="50%" height="16">testcase</td>
- <td width="50%" height="16">Generates a test case</td>
- </tr>
- <tr>
- <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>
- <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>
- <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>
- <tr>
- <td width="50%" height="18">unpackClasses</td>
- <td width="50%" height="18">unpackes the generated classes. This forces
- the databinding classes to be generated separately, which otherwise
- would have been generated as inner classes.</td>
- </tr>
- <tr>
- <td width="50%" height="18">serviceName</td>
- <td width="50%" height="18">The name of the service</td>
- </tr>
- <tr>
- <td width="50%" height="18">PortName</td>
- <td width="50%" height="18">The name of the port</td>
- </tr>
- </tbody>
-</table>
-
-<h2>Example build file using the custom Ant task</h2>
-
-<p>Following is an example ant build file that uses the custom Ant task.</p>
-
-<p></p>
-<pre><?xml version="1.0"?>
-<project name="CodegenExample" default="main" basedir=".">
-<target name="declare" >
-<taskdef name="codegen"
- classname="org.apache.axis2.tool.ant.AntCodegenTask"
- classpath="classes"/>
-</target>
-<target name="main" depends="declare">
-<codegen
- wsdlfilename="C:\test\wsdl\CombinedService.wsdl"
- output="C:\"
- serverside="true"
- generateserverxml="true"/>
-</target>
-</project></pre>
-
-<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>>ant or >ant main</p>
-
-<p>it will generate the server side code and services.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-*.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>
-
-<h1>Invoking the Code Generator from Ant</h1>
-
-<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>
-<pre class="code"><!DOCTYPE project>
-
-<project name="wsdl2java-example" default="usage" basedir=".">
-
- <property name="project-name" value="wsdl2java-example"/>
- <property file="build.properties"/>
-
- <property name="build" value="build"/>
-
- <property name="src" value="src"/>
- <property name="build.classes" value="build/classes" />
-
- <path id="axis.classpath">
- <pathelement location="build/classes" />
- <fileset dir="${axis.home}/lib">
- <include name="**/*.jar" />
-
- </fileset>
- <pathelement location="${build.classes}" />
- </path>
-
- <target name="usage" description="Build file usage info (default task)">
- <echo message=" " />
- <echo message="${project-name} " />
-
- <echo message="-------------------------------------------------------" />
- <echo message=" " />
- <echo message="Available Targets:" />
- <echo message=" " />
- <echo message=" Compiling:" />
- <echo message=" compile - Compiles the WSDL2Java source code" />
-
- <echo message=" " />
- <echo message=" Compiling client:" />
- <echo message=" compile_client - Compiles the client source code" />
- <echo message=" " />
- <echo message=" Cleaning up:" />
- <echo message=" clean - Delete class files" />
-
- <echo message=" " />
- <echo message=" WSDL:" />
- <echo message=" wsdl2java - Generate source from WSDL" />
- <echo message=" " />
- <echo message=" AAR:" />
- <echo message=" aar - Generate an .aar for deployment into WEB-INF/services" />
-
- <echo message=" " />
- <echo message=" Executing:" />
- <echo message=" runLogin - Execute the runLogin client" />
- </target>
-
- <target name="prepare" >
- <mkdir dir="${build.classes}" />
-
- </target>
-
- <target name="clean" >
- <delete dir="${build}" />
- <delete dir="${dist}" />
- </target>
-
- <target name="compile">
- <echo message="Compiling wsdl2 files"/>
-
- <javac
- srcdir="output"
- destdir="${build.classes}"
- deprecation="true"
- failonerror="true" debug="true"
- >
-
- <classpath refid="axis.classpath"/>
- </javac>
-
- </target>
-
- <target name="wsdl2java" depends="clean,prepare">
- <delete dir="output" />
- <java classname="org.apache.axis2.wsdl.WSDL2Java" fork="true">
- <classpath refid="axis.classpath"/>
- <arg value="-uri"/>
-
- <arg file="wsdl/LoginEndpoint.wsdl"/>
- <arg value="-ss"/>
- <arg value="-sd"/>
- <arg value="-o"/>
- <arg file="output"/>
- <arg value="-p"/>
-
- <arg value="org.example.types"/>
- </java>
-
- <!-- Move the schema folder to classpath-->
- <move todir="${build.classes}">
- <fileset dir="output">
- <include name="**/*schema*/**/*.class"/>
-
- <include name="**/*schema*/**/*.xsb"/>
- </fileset>
- </move>
-
- </target>
-
- <target name="jar_wsdl" depends="compile">
-
- <jar jarfile="lib/axis2_example_wsdl.jar" >
- <fileset dir="${build}/classes" />
- </jar>
- </target>
-
- <!-- build an .aar file for axis2 web services -->
- <target name="aar" depends="compile">
-
- <delete dir="${build.classes}/META-INF" />
- <mkdir dir="${build.classes}/META-INF" />
- <copy todir="${build.classes}/META-INF" >
- <fileset dir="output/service_descriptors/LoginEndpoint" >
- <!-- axis2 web services definitions file -->
- <include name="services.xml"/>
-
- </fileset>
- <fileset dir="wsdl" >
- <include name="LoginEndpoint.wsdl"/>
- </fileset>
- </copy>
- <jar jarfile="dist/LoginEndpoint.aar" >
-
- <fileset dir="${build.classes}" />
- </jar>
- </target>
-
- <target name="compile_client">
- <echo message="Compiling client files"/>
-
- <javac
- srcdir="src"
- destdir="${build.classes}"
- deprecation="true"
- failonerror="true" debug="true"
- >
-
- <classpath refid="axis.classpath"/>
- </javac>
-
- </target>
-
- <target name="runLogin" depends="compile_client" description="run webLogin client">
-
- <echo message="running the webLogin client" />
- <java classname="org.client.LoginClient" >
- <classpath refid="axis.classpath"/>
- </java>
- </target>
-
-</project></pre>
-
-<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>
-<pre class="code"><?xml version="1.0" encoding="UTF-8"?>
-
-<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">
-
- <types>
- <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">
- <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
- <element name="returnWebLoginElement">
- <complexType>
- <sequence>
-
- <element ref="tns:soap_session_idElement"/>
- <element ref="tns:web_user_nameElement"/>
- </sequence>
- </complexType>
- </element>
- <element name="webLoginElement">
-
- <complexType>
- <sequence>
- <element ref="tns:user_nameElement"/>
- <element ref="tns:user_passwordElement"/>
- </sequence>
- </complexType>
-
- </element>
- <element name="user_nameElement" type="xsd:string"/>
- <element name="user_passwordElement" type="xsd:string"/>
- <element name="soap_session_idElement" type="xsd:string"/>
- <element name="web_user_nameElement" type="xsd:string"/>
-</schema></types>
-
- <message name="LoginEndpoint_webLogin">
- <part name="parameters" element="ns2:webLoginElement"/>
- </message>
- <message name="LoginEndpoint_webLoginResponse">
- <part name="result" element="ns2:returnWebLoginElement"/>
- </message>
-
- <portType name="LoginEndpoint">
- <operation name="webLogin">
- <input message="tns:LoginEndpoint_webLogin" name="LoginEndpoint_webLogin"/>
- <output message="tns:LoginEndpoint_webLoginResponse" name="LoginEndpoint_webLoginResponse"/>
- </operation>
- </portType>
-
- <binding name="LoginEndpointBinding" type="tns:LoginEndpoint">
- <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
- <operation name="webLogin">
- <soap:operation soapAction="webLogin"/>
- <input name="LoginEndpoint_webLogin">
- <soap:body use="literal"/>
-
- </input>
- <output name="LoginEndpoint_webLoginResponse">
- <soap:body use="literal"/>
- </output>
- </operation>
- </binding>
-
- <service name="LoginService">
- <port name="LoginEndpointPort" binding="tns:LoginEndpointBinding">
- <soap:address location="http://localhost:8080/axis2/services/LoginEndpoint"/></port></service></definitions></pre>
-
-<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>
-<pre class="code">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>
-
-<p>Replace the contents of this file with the following, which uses the
-complex types generated by WSDL2Java and the example wsdl file:</p>
-<pre class="code">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>
-
-<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>
-<pre class="code">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>
-
-<p>Now run the ant task 'ant runLogin' . The following output should
-appear:</p>
-<pre class="code">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>
-
-<p></p>
-
-<h1>Appendix</h1>
-<ul>
- <li>Eclipse reference - <a href="http://www.eclipse.org/">
- http://www.eclipse.org/</a></li>
- <li>Custom Ant Tasks - <a
- href="http://ant.apache.org/manual/develop.html">
- http://ant.apache.org/manual/develop.html</a></li>
-</ul>
-
-<p></p>
-
-<p></p>
-
-<p></p>
-
-<p></p>
-
-<p></p>
-</body>
-</html>
+<html>
+<head>
+ <meta http-equiv="content-type" content="">
+ <title>Code Generator-Command Line Tool</title>
+</head>
+
+<body>
+<h1>Code Generator - Command Line Tool</h1>
+
+<h2>Introduction</h2>
+
+<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>
+
+<h2>Option Reference</h2>
+
+<table border="1" cellpadding="0" cellspacing="0"
+style="border-collapse: collapse" width="100%" id="AutoNumber1">
+ <tbody>
+ <tr>
+ <td width="20%"><strong>Short Option</strong></td>
+ <td width="20%"><strong>Long Option</strong></td>
+ <td width="60%"><strong>Description</strong></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-uri <Location of WSDL></td>
+ <td width="20%">None</td>
+ <td width="60%">WSDL file location. This should point to a WSDL file in
+ the local file system</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-o <output Location> :</td>
+ <td width="20%">--output</td>
+ <td width="60%">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>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-l <language></td>
+ <td width="20%">--language</td>
+ <td width="60%">Output language. Currently the code generator can
+ generate code in Java and CSharp. (CSharp support is experimental)
+ When omitted defaults to Java.
+
+ <p>Allowed options are</p>
+ <ul>
+ <li>java</li>
+ <li>cs</li>
+ </ul>
+ </td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-p <package name></td>
+ <td width="20%">--package</td>
+ <td width="60%">The target package name. If omitted, a default package
+ (formed using the target namespace of the WSDL) will be used.</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-a</td>
+ <td width="20%">--async</td>
+ <td width="60%">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>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-s</td>
+ <td width="20%">--sync</td>
+ <td width="60%">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>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-t</td>
+ <td width="20%">--test-case</td>
+ <td width="60%">Generates a test case. In the case of Java it would be
+ a junit test case.</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-ss</td>
+ <td width="20%">--server-side</td>
+ <td width="60%">Generates server side code (i.e. skeletons). Default is
+ off</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-sd</td>
+ <td width="20%">--service-description</td>
+ <td width="60%">Generates the service descriptor (i.e. server.xml).
+ Default is off. only valid with -ss, the server side code generation
+ option</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-d</td>
+ <td width="20%">--databinding-method</td>
+ <td width="60%">Specifies the Databinding framework. valid values are
+ xmlbeans,adb and none. Default is adb.</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-g</td>
+ <td width="20%">--generate-all</td>
+ <td width="60%">Genrates all the classes. This option is valid only
+ with the -ss (server side code generation) option. When on, the
+ client code (stubs) will also be generated along with the
+ skeleton.</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-u</td>
+ <td width="20%">--unpack-classes</td>
+ <td width="60%">Unpack classes. This option specifies whether to unpack
+ the classes and generate separate classes for the databinders.</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-sn</td>
+ <td width="20%">--service-name</td>
+ <td width="60%">Specifies the service name to be code generated. If the
+ service name is is not specified, then the first service will be
+ picked</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td width="20%">-pn</td>
+ <td width="20%">--port-name</td>
+ <td width="60%">Specifies the port name to be code generated. If the
+ port name is is not specified, then the first port (of the selected
+ service) will be picked</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Apart from these mentioned options one can pass extra option by prefixing
+them with -E (uppercase). These extra options will be processed by the
+extensions. The extra options that can be passed are documented separately
+with the extensions documentation (For example with ADB)</p>
+
+<h1>Code Generator - Ant Task</h1>
+
+<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>
+
+<h2>Ant Task Reference</h2>
+
+<table border="1" cellpadding="0" cellspacing="0"
+style="border-collapse: collapse" width="100%" id="AutoNumber2">
+ <tbody>
+ <tr>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <td width="50%" height="16">testcase</td>
+ <td width="50%" height="16">Generates a test case</td>
+ </tr>
+ <tr>
+ <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>
+ <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>
+ <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>
+ <tr>
+ <td width="50%" height="18">unpackClasses</td>
+ <td width="50%" height="18">unpackes the generated classes. This forces
+ the databinding classes to be generated separately, which otherwise
+ would have been generated as inner classes.</td>
+ </tr>
+ <tr>
+ <td width="50%" height="18">serviceName</td>
+ <td width="50%" height="18">The name of the service</td>
+ </tr>
+ <tr>
+ <td width="50%" height="18">PortName</td>
+ <td width="50%" height="18">The name of the port</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2>Example build file using the custom Ant task</h2>
+
+<p>Following is an example ant build file that uses the custom Ant task.</p>
+
+<p></p>
+<pre><?xml version="1.0"?>
+<project name="CodegenExample" default="main" basedir=".">
+<target name="declare" >
+<taskdef name="codegen"
+ classname="org.apache.axis2.tool.ant.AntCodegenTask"
+ classpath="classes"/>
+</target>
+<target name="main" depends="declare">
+<codegen
+ wsdlfilename="C:\test\wsdl\CombinedService.wsdl"
+ output="C:\"
+ serverside="true"
+ generateserverxml="true"/>
+</target>
+</project></pre>
+
+<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>>ant or >ant main</p>
+
+<p>it will generate the server side code and services.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-*.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>
+
+<h1>Invoking the Code Generator from Ant</h1>
+
+<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>
+<pre class="code"><!DOCTYPE project>
+
+<project name="wsdl2java-example" default="usage" basedir=".">
+
+ <property name="project-name" value="wsdl2java-example"/>
+ <property file="build.properties"/>
+
+ <property name="build" value="build"/>
+
+ <property name="src" value="src"/>
+ <property name="build.classes" value="build/classes" />
+
+ <path id="axis.classpath">
+ <pathelement location="build/classes" />
+ <fileset dir="${axis.home}/lib">
+ <include name="**/*.jar" />
+
+ </fileset>
+ <pathelement location="${build.classes}" />
+ </path>
+
+ <target name="usage" description="Build file usage info (default task)">
+ <echo message=" " />
+ <echo message="${project-name} " />
+
+ <echo message="-------------------------------------------------------" />
+ <echo message=" " />
+ <echo message="Available Targets:" />
+ <echo message=" " />
+ <echo message=" Compiling:" />
+ <echo message=" compile - Compiles the WSDL2Java source code" />
+
+ <echo message=" " />
+ <echo message=" Compiling client:" />
+ <echo message=" compile_client - Compiles the client source code" />
+ <echo message=" " />
+ <echo message=" Cleaning up:" />
+ <echo message=" clean - Delete class files" />
+
+ <echo message=" " />
+ <echo message=" WSDL:" />
+ <echo message=" wsdl2java - Generate source from WSDL" />
+ <echo message=" " />
+ <echo message=" AAR:" />
+ <echo message=" aar - Generate an .aar for deployment into WEB-INF/services" />
+
+ <echo message=" " />
+ <echo message=" Executing:" />
+ <echo message=" runLogin - Execute the runLogin client" />
+ </target>
+
+ <target name="prepare" >
+ <mkdir dir="${build.classes}" />
+
+ </target>
+
+ <target name="clean" >
+ <delete dir="${build}" />
+ <delete dir="${dist}" />
+ </target>
+
+ <target name="compile">
+ <echo message="Compiling wsdl2 files"/>
+
+ <javac
+ srcdir="output"
+ destdir="${build.classes}"
+ deprecation="true"
+ failonerror="true" debug="true"
+ >
+
+ <classpath refid="axis.classpath"/>
+ </javac>
+
+ </target>
+
+ <target name="wsdl2java" depends="clean,prepare">
+ <delete dir="output" />
+ <java classname="org.apache.axis2.wsdl.WSDL2Java" fork="true">
+ <classpath refid="axis.classpath"/>
+ <arg value="-uri"/>
+
+ <arg file="wsdl/LoginEndpoint.wsdl"/>
+ <arg value="-ss"/>
+ <arg value="-sd"/>
+ <arg value="-o"/>
+ <arg file="output"/>
+ <arg value="-p"/>
+
+ <arg value="org.example.types"/>
+ </java>
+
+ <!-- Move the schema folder to classpath-->
+ <move todir="${build.classes}">
+ <fileset dir="output">
+ <include name="**/*schema*/**/*.class"/>
+
+ <include name="**/*schema*/**/*.xsb"/>
+ </fileset>
+ </move>
+
+ </target>
+
+ <target name="jar_wsdl" depends="compile">
+
+ <jar jarfile="lib/axis2_example_wsdl.jar" >
+ <fileset dir="${build}/classes" />
+ </jar>
+ </target>
+
+ <!-- build an .aar file for axis2 web services -->
+ <target name="aar" depends="compile">
+
+ <delete dir="${build.classes}/META-INF" />
+ <mkdir dir="${build.classes}/META-INF" />
+ <copy todir="${build.classes}/META-INF" >
+ <fileset dir="output/service_descriptors/LoginEndpoint" >
+ <!-- axis2 web services definitions file -->
+ <include name="services.xml"/>
+
+ </fileset>
+ <fileset dir="wsdl" >
+ <include name="LoginEndpoint.wsdl"/>
+ </fileset>
+ </copy>
+ <jar jarfile="dist/LoginEndpoint.aar" >
+
+ <fileset dir="${build.classes}" />
+ </jar>
+ </target>
+
+ <target name="compile_client">
+ <echo message="Compiling client files"/>
+
+ <javac
+ srcdir="src"
+ destdir="${build.classes}"
+ deprecation="true"
+ failonerror="true" debug="true"
+ >
+
+ <classpath refid="axis.classpath"/>
+ </javac>
+
+ </target>
+
+ <target name="runLogin" depends="compile_client" description="run webLogin client">
+
+ <echo message="running the webLogin client" />
+ <java classname="org.client.LoginClient" >
+ <classpath refid="axis.classpath"/>
+ </java>
+ </target>
+
+</project></pre>
+
+<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.94-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>
+<pre class="code"><?xml version="1.0" encoding="UTF-8"?>
+
+<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">
+
+ <types>
+ <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">
+ <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
+ <element name="returnWebLoginElement">
+ <complexType>
+ <sequence>
+
+ <element ref="tns:soap_session_idElement"/>
+ <element ref="tns:web_user_nameElement"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="webLoginElement">
+
+ <complexType>
+ <sequence>
+ <element ref="tns:user_nameElement"/>
+ <element ref="tns:user_passwordElement"/>
+ </sequence>
+ </complexType>
+
+ </element>
+ <element name="user_nameElement" type="xsd:string"/>
+ <element name="user_passwordElement" type="xsd:string"/>
+ <element name="soap_session_idElement" type="xsd:string"/>
+ <element name="web_user_nameElement" type="xsd:string"/>
+</schema></types>
+
+ <message name="LoginEndpoint_webLogin">
+ <part name="parameters" element="ns2:webLoginElement"/>
+ </message>
+ <message name="LoginEndpoint_webLoginResponse">
+ <part name="result" element="ns2:returnWebLoginElement"/>
+ </message>
+
+ <portType name="LoginEndpoint">
+ <operation name="webLogin">
+ <input message="tns:LoginEndpoint_webLogin" name="LoginEndpoint_webLogin"/>
+ <output message="tns:LoginEndpoint_webLoginResponse" name="LoginEndpoint_webLoginResponse"/>
+ </operation>
+ </portType>
+
+ <binding name="LoginEndpointBinding" type="tns:LoginEndpoint">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+ <operation name="webLogin">
+ <soap:operation soapAction="webLogin"/>
+ <input name="LoginEndpoint_webLogin">
+ <soap:body use="literal"/>
+
+ </input>
+ <output name="LoginEndpoint_webLoginResponse">
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ </binding>
+
+ <service name="LoginService">
+ <port name="LoginEndpointPort" binding="tns:LoginEndpointBinding">
+ <soap:address location="http://localhost:8080/axis2/services/LoginEndpoint"/></port></service></definitions></pre>
+
+<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>
+<pre class="code">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>
+
+<p>Replace the contents of this file with the following, which uses the
+complex types generated by WSDL2Java and the example wsdl file:</p>
+<pre class="code">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>
+
+<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>
+<pre class="code">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>
+
+<p>Now run the ant task 'ant runLogin' . The following output should
+appear:</p>
+<pre class="code">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>
+
+<p></p>
+
+<h1>Appendix</h1>
+<ul>
+ <li>Eclipse reference - <a href="http://www.eclipse.org/">
+ http://www.eclipse.org/</a></li>
+ <li>Custom Ant Tasks - <a
+ href="http://ant.apache.org/manual/develop.html">
+ http://ant.apache.org/manual/develop.html</a></li>
+</ul>
+
+<p></p>
+
+<p></p>
+
+<p></p>
+
+<p></p>
+
+<p></p>
+</body>
+</html>