You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2006/03/31 19:02:15 UTC

svn commit: r390460 [3/5] - in /webservices/axis2/site/c: ./ M0_5/ M0_5/images/ api/ docs/ docs/images/ images/ images/logos/ style/

Added: webservices/axis2/site/c/docs/userguide2.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/site/c/docs/userguide2.html?rev=390460&view=auto
==============================================================================
--- webservices/axis2/site/c/docs/userguide2.html (added)
+++ webservices/axis2/site/c/docs/userguide2.html Fri Mar 31 09:02:09 2006
@@ -0,0 +1,380 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>Axis2/C - Axis2 User's Guide</title><style type="text/css" media="all">
+          @import url("../style/maven-base.css");
+          
+			    @import url("../style/maven-classic.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/c" id="projectLogo"><img alt="Apache Axis2 C" 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: 31 March 2006
+                  | Doc for 0.90</div><div class="xright"></div><div class="clear"><hr></hr></div></div><div id="leftColumn"><div id="navcolumn"><div id="menuAxis2_C"><h5>Axis2/C</h5><ul><li class="none"><a href="../index.html">Home</a></li><li class="expanded"><a href="../download.cgi">Download Axis2/C</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/c/" class="externalLink" title="External Link">Source Code</a></li></ul></li><li class="none"><a href="../docs/index.html">Documentation</a></li><li class="expanded"><a href="../mail-lists.html">Get Involved</a><ul><li class="none"><a href="../mail-lists.html">Mailing Lists</a></li></ul></li><li class="expanded"><a href="../team-list.html">Project Information</a><ul><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><a h
 ref="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="Axis2_C_User_s_Guide"></a><h2>Axis2/C User's Guide</h2><p align="right">Pages: <a href="userguide.html">Content</a>, <a href="userguide1.html">1</a>, <b>2</b>, <a href="userguide3.html">3</a></p><p><strong>User Feedback</strong>: <a href="mailto:axis-user@ws.apache.org">axis-c-user@ws.apache.org</a> (Please
+remember to prefix the subject with [Axis2]). To subscribe to mailing list
+see <a href="../mail-lists.html">here.</a></p></div><div class="section"><a name="Web_Service_Clients_Using_Axis2_C"></a><h2>Web Service Clients Using Axis2/C</h2><p>Before we start looking at how to write Web Service clients, it's worth
+going through some background information.</p><p>Web Services can be used to provide wide range of functionality to the
+users ranging from simple, less time consuming  operations such as
+"getStockQuote",  to time consuming business services. When we utilize these
+Web Services (that is invoke the Web Service using a client application), we
+cannot use some simple generic invocation paradigm that suites all the timing
+complexities involved in the service operations. For example, if we use a
+single transport channel (such as HTTP) to invoke a Web Service with an
+IN-OUT operation that take long time to complete, then most of the time we
+may end up with "connection time outs". On the other hand, if there are
+simultaneous service invocations that  we need to perform from a single
+client application, then the use of a "blocking" client API will degrade the
+performance of the client application. Similarly there are various other
+consequences such as One-Way transports that come in to play when we need
+them. Let's try to analyze some common service invocation paradigms.</p><p>Many web service engines provide the users with a Blocking and
+Non-Blocking client APIs.</p><ul>
+  <li><p style="margin-bottom: 0in;"><b>Blocking API</b> -Once the service
+    invocation is called, the client application hangs and only gets control
+    back when the operation completes, that is when the client receives a
+    response or a fault. This is the simplest way of invoking a Web Services
+    and it also suites many common situations.</p>
+  </li>
+  <li><p><b>Non-Blocking API </b>- This is a callback or polling based API,
+    hence once a service invocation is called, the client application
+    immediately gets the control back and the response is retrieved using the
+    callback object provided. This approach provides the flexibility to the
+    client application to invoke several Web Services simultaneously without
+    blocking on the operations already invoked.</p>
+  </li>
+</ul><p>Both these mechanisms work in the API level. Let's name the  asynchronous
+behavior that we can get using the <strong>Non-Blocking API</strong> as
+<b>API Level Asynchrony.</b></p><p>Both these mechanisms use a single transport connection to send the
+request and to receive the response. They do not have the capability of using
+two separate transport connections, one for the request and the other for the
+response (either One-Way of Two-Way). So both these mechanisms fail to
+address the problem of long running transactions (the transport connection
+may time-out before the operation completes). A possible solution would be to
+use <strong>two separate transport connections for request and
+response</strong>. The asynchronous behavior that we gain using this solution
+can be called <b>Transport Level Asynchrony</b>.</p><p>By combining API Level Asynchrony &amp; Transport Level Asynchrony we can
+obtain four different invocation patterns for Web Services as shown in the
+following table.</p><p><a name="table1"></a><table class="bodyTable"><tbody>
+    <tr class="a"><td height="19" width="33%"><p><strong>API
+        (Blocking/Non-Blocking)</strong></p>
+      </td><td width="33%"><p><strong> Dual Transports (Yes/No)</strong></p>
+      </td><td width="33%"><p><strong>Description</strong></p>
+      </td></tr>
+    <tr class="b"><td height="19" width="33%"><p>Blocking</p>
+      </td><td width="33%"><p>No</p>
+      </td><td width="33%"><p>Simplest and the familiar invocation pattern</p>
+      </td></tr>
+    <tr class="a"><td height="19" width="33%"><p>Non-Blocking</p>
+      </td><td width="33%"><p>No</p>
+      </td><td width="33%"><p>Using callbacks or polling</p>
+      </td></tr>
+    <tr class="b"><td height="19" width="33%"><p>Blocking</p>
+      </td><td width="33%"><p>Yes</p>
+      </td><td width="33%"><p>This is useful when the service operation is IN-OUT
+        in nature but the transport used is One-Way (e.g. SMTP)</p>
+      </td></tr>
+    <tr class="a"><td height="19" width="33%"><p>Non-Blocking</p>
+      </td><td width="33%"><p>Yes</p>
+      </td><td width="33%"><p>This is can be used to gain the maximum asynchronous
+        behavior. No blocking in the API level and also in the transport
+        level</p>
+      </td></tr>
+  </tbody></table></p><p>Axis2/C is designed to provides the user with all these possibilities to
+invoke Web Services.</p><p>Currently we have implemented the blocking and non-blocking APIs (that is
+API level asynchrony). Support for dual transports would be implemented in
+the future.</p><div class="subsection"><a name="Writing_Web_Service_Clients_Using_Axis2_s_Primary_APIs"></a><h3>Writing Web Service Clients Using Axis2's Primary APIs</h3></div><div class="subsection"><a name="Echo_Blocking_Client"></a><h3>Echo Blocking Client</h3><p>Let's see how we can write a client to invoke "echoString" operation of
+"echo service" using the simplest blocking invocation. The complete client
+code with some explanations within comments is shown below.</p><p><font color="#008000">#include &lt;axis2_call.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_om_stax_builder.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_om_document.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_om_node.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_om_element.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_om_text.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_stream.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_log_default.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_error_default.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_xml_reader.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;stdio.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_xml_writer.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_soap_builder.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_soap.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_soap_envelope.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_soap_body.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_soap_header.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_soap_message.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_soap_header_block.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_soap_fault.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_soap_fault_code.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;axis2_soap_fault_role.h&gt;<br></br>
+</font> <font color="#008000">#include &lt;platforms/axis2_platform_auto_sense.h&gt;<br></br>
+</font> <br></br>
+<font color="#000000">axis2_om_node_t</font> *<br></br>
+<font color="#000000">build_om_programatically</font>(<font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>);<br></br>
+<br></br>
+<font color="#800000">int</font> <font color="#000000">main</font>(<font color="#800000">int</font> <font color="#000000">argc</font>, <font color="#800000">char</font>** <font color="#000000">argv</font>)<br></br>
+{<br></br>
+    <font color="#000000">axis2_om_node_t</font> *<font color="#000000">node</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_status_t</font> <font color="#000000">status</font> = <font color="#000000">AXIS2_FAILURE</font>;<br></br>
+    <font color="#000000">axis2_env_t</font> *<font color="#000000">env</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_error_t</font> *<font color="#000000">error</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_log_t</font> *<font color="#000000">log</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_allocator_t</font> *<font color="#000000">allocator</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_char_t</font> *<font color="#000000">address</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_char_t</font> *<font color="#000000">wsa_action</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_char_t</font> *<font color="#000000">client_home</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_node_t</font> *<font color="#000000">ret_node</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_svc_t</font> *<font color="#000000">svc</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_op_t</font> *<font color="#000000">op</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_call_t</font> *<font color="#000000">call</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_msg_ctx_t</font> *<font color="#000000">msg_ctx</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_mep_client_t</font> *<font color="#000000">mep_client</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_msg_info_headers_t</font> *<font color="#000000">msg_info_headers</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_endpoint_ref_t</font>* <font color="#000000">endpoint_ref</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_conf_t</font> *<font color="#000000">conf</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_msg_ctx_t</font> *<font color="#000000">response_ctx</font> = <font color="#000000">NULL</font>;<br></br>
+    <br></br>
+    <font color="#808080"><i>/* set up the environment with allocator and log*/</i></font><br></br>
+    <font color="#000000">allocator</font> = <font color="#000000">axis2_allocator_init</font> (<font color="#000000">NULL</font>);<br></br>
+    <font color="#000000">error</font> = <font color="#000000">axis2_error_create</font>(<font color="#000000">allocator</font>);<br></br>
+    <font color="#000000">log</font> = <font color="#000000">axis2_log_create</font>(<font color="#000000">allocator</font>, <font color="#000000">NULL</font>, <font color="#FF0000">"addr_echo.log"</font>);<br></br>
+    <font color="#000000">env</font> = <font color="#000000">axis2_env_create_with_error_log</font>(<font color="#000000">allocator</font>, <font color="#000000">error</font>, <font color="#000000">log</font>);<br></br>
+    <font color="#000000">env</font>-&gt;<font color="#000000">log</font>-&gt;<font color="#000000">level</font> = <font color="#000000">AXIS2_LOG_LEVEL_TRACE</font>;<br></br>
+    <font color="#000000">axis2_error_init</font>();<br></br>
+<br></br>
+    <font color="#808080"><i>/* Set up deploy folder. It is from the deploy folder, the configuration is picked up <br></br>
+     * using the axis2.xml file.<br></br>
+     * In this sample client_home points to the Axis2/C default deploy folder. The client_home can <br></br>
+     * be different from this folder on your system. For example, you may have a different folder <br></br>
+     *(say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the <br></br>
+     * modules that the client uses<br></br>
+     */</i></font><br></br>
+    <font color="#000000">client_home</font> = <font color="#000000">AXIS2_GETENV</font>(<font color="#FF0000">"AXIS2C_HOME"</font>);<br></br>
+    <font color="#000000"><b>if</b></font> (!<font color="#000000">client_home</font>)<br></br>
+        <font color="#000000">client_home</font> = <font color="#FF0000">"../../deploy"</font>;<br></br>
+    <br></br>
+    <font color="#808080"><i>/* Set end point reference of echo service */</i></font><br></br>
+    <font color="#000000">address</font> = <font color="#FF0000">"http://localhost:9090/axis2/services/echo"</font>;<br></br>
+    <font color="#000000">wsa_action</font> = <font color="#FF0000">"http://localhost:9090/axis2/services/echo/echoString"</font>;<br></br>
+    <font color="#000000"><b>if</b></font> (<font color="#000000">argc</font> &gt; <font color="#0000FF">1</font> )<br></br>
+        <font color="#000000">address</font> = <font color="#000000">argv</font>[<font color="#0000FF">1</font>];<br></br>
+    <font color="#000000"><b>if</b></font> (<font color="#000000">AXIS2_STRCMP</font>(<font color="#000000">address</font>, <font color="#FF0000">"-h"</font>) == <font color="#0000FF">0</font>)<br></br>
+    {<br></br>
+        <font color="#000000">printf</font>(<font color="#FF0000">"Usage : %s [endpoint_url]\n"</font>, <font color="#000000">argv</font>[<font color="#0000FF">0</font>]);<br></br>
+        <font color="#000000">printf</font>(<font color="#FF0000">"use -h for help\n"</font>);<br></br>
+        <font color="#000000"><b>return</b></font> <font color="#0000FF">0</font>;<br></br>
+    }<br></br>
+<br></br>
+    <font color="#000000">printf</font> (<font color="#FF0000">"Using endpoint : %s\n"</font>, <font color="#000000">address</font>);<br></br>
+<br></br>
+    <font color="#808080"><i>/* build the SOAP request message content using OM API.*/</i></font><br></br>
+    <font color="#000000">node</font> = <font color="#000000">build_om_programatically</font>(&amp;<font color="#000000">env</font>);<br></br>
+<br></br>
+    <font color="#808080"><i>/* create call struct */</i></font><br></br>
+    <font color="#000000">call</font> = <font color="#000000">axis2_call_create</font>(&amp;<font color="#000000">env</font>, <font color="#000000">NULL</font>, <font color="#000000">client_home</font>);<br></br>
+    <font color="#000000">mep_client</font> = <font color="#000000">AXIS2_CALL_GET_BASE</font>(<font color="#000000">call</font>, &amp;<font color="#000000">env</font>);<br></br>
+<br></br>
+    <font color="#808080"><i>/* Prepare the SOAP envelope, using the SOAP message content to be sent.<br></br>
+     * Get a reference to the message context */</i></font><br></br>
+    <font color="#000000">msg_ctx</font> = <font color="#000000">AXIS2_MEP_CLIENT_PREPARE_SOAP_ENVELOPE</font>(<font color="#000000">mep_client</font>, &amp;<font color="#000000">env</font>, <font color="#000000">node</font>);<br></br>
+<br></br>
+    <font color="#808080"><i>/* Get the reference to message info headers structure from the message context. <br></br>
+       This can be used to manipulate SOAP header content when using WS-Addressing. */</i></font><br></br>
+    <font color="#000000">msg_info_headers</font> = <font color="#000000">AXIS2_MSG_CTX_GET_MSG_INFO_HEADERS</font>(<font color="#000000">msg_ctx</font>, &amp;<font color="#000000">env</font>);<br></br>
+<br></br>
+    <font color="#808080"><i>/* create an axis2_endpoint_ref_t struct with ERP assigned */</i></font><br></br>
+    <font color="#000000">endpoint_ref</font> = <font color="#000000">axis2_endpoint_ref_create</font>(&amp;<font color="#000000">env</font>, <font color="#000000">address</font>);<br></br>
+<br></br>
+    <font color="#808080"><i>/* Set header parameters, required for WS-Addressing. <br></br>
+     * Required only if you need to make use of WS-Addressing.<br></br>
+     */</i></font><br></br>
+    <font color="#000000">AXIS2_MSG_INFO_HEADERS_SET_TO</font>(<font color="#000000">msg_info_headers</font>, &amp;<font color="#000000">env</font>, <font color="#000000">endpoint_ref</font>);<br></br>
+    <font color="#000000">AXIS2_MSG_INFO_HEADERS_SET_ACTION</font>(<font color="#000000">msg_info_headers</font>, &amp;<font color="#000000">env</font>, <font color="#000000">wsa_action</font>); <br></br>
+    <br></br>
+    <font color="#000000">AXIS2_CALL_SET_TO</font>(<font color="#000000">call</font>, &amp;<font color="#000000">env</font>, <font color="#000000">endpoint_ref</font>);<br></br>
+<br></br>
+    <font color="#808080"><i>/* Get the configuration context */</i></font><br></br>
+    <font color="#000000">conf</font> = <font color="#000000">AXIS2_CONF_CTX_GET_CONF</font>(<br></br>
+                            <font color="#000000">AXIS2_SVC_CTX_GET_CONF_CTX</font>(<br></br>
+                                <font color="#000000">AXIS2_MEP_CLIENT_GET_SVC_CTX</font>(<font color="#000000">mep_client</font>, &amp;<font color="#000000">env</font>), <br></br>
+                                &amp;<font color="#000000">env</font>), <br></br>
+                                &amp;<font color="#000000">env</font>);<br></br>
+<br></br>
+    <font color="#808080"><i>/* Get the echo service context if it is already loaded to service context*/</i></font><br></br>
+    <font color="#000000">svc</font> = <font color="#000000">AXIS2_CONF_GET_SVC</font>(<font color="#000000">conf</font>, &amp;<font color="#000000">env</font>, <font color="#FF0000">"echo"</font>);<br></br>
+    <font color="#000000"><b>if</b></font> (<font color="#000000">svc</font>)<br></br>
+    {<br></br>
+        <font color="#000000">op</font> = <font color="#000000">AXIS2_SVC_GET_OP_WITH_NAME</font>(<font color="#000000">svc</font>, &amp;<font color="#000000">env</font>, <font color="#FF0000">"echoString"</font>);<br></br>
+        <font color="#000000"><b>if</b></font> (<font color="#000000">op</font>)<br></br>
+        {<br></br>
+            <font color="#000000">AXIS2_OP_SET_MSG_EXCHANGE_PATTERN</font>(<font color="#000000">op</font>, &amp;<font color="#000000">env</font>, <font color="#000000">AXIS2_MEP_URI_OUT_IN</font>);<br></br>
+        }<br></br>
+    }<br></br>
+    <font color="#000000"><b>else</b></font><br></br>
+    {<br></br>
+       <font color="#808080"><i>/* echo service is not in the configuration context. We need to create the <br></br>
+        * operation and add it to service context. Then add service context into <br></br>
+        * configuration context.<br></br>
+        */</i></font><br></br>
+        <font color="#000000">axis2_qname_t</font> *<font color="#000000">op_qname</font> = <font color="#000000">NULL</font>;<br></br>
+        <font color="#000000">axis2_qname_t</font> *<font color="#000000">svc_qname</font> = <font color="#000000">axis2_qname_create</font>(&amp;<font color="#000000">env</font>, <font color="#FF0000">"echo"</font>, <font color="#000000">NULL</font>, <font color="#000000">NULL</font>);<br></br>
+        <font color="#000000">svc</font> = <font color="#000000">axis2_svc_create_with_qname</font>(&amp;<font color="#000000">env</font>, <font color="#000000">svc_qname</font>);<br></br>
+        <font color="#000000">op_qname</font> = <font color="#000000">axis2_qname_create</font>(&amp;<font color="#000000">env</font>, <font color="#FF0000">"echoString"</font>, <font color="#000000">NULL</font>, <font color="#000000">NULL</font>);<br></br>
+        <font color="#000000">op</font> = <font color="#000000">axis2_op_create_with_qname</font>(&amp;<font color="#000000">env</font>, <font color="#000000">op_qname</font>);<br></br>
+        <font color="#000000">AXIS2_OP_SET_MSG_EXCHANGE_PATTERN</font>(<font color="#000000">op</font>, &amp;<font color="#000000">env</font>, <font color="#000000">AXIS2_MEP_URI_OUT_IN</font>);<br></br>
+        <font color="#000000">AXIS2_SVC_ADD_OP</font>(<font color="#000000">svc</font>, &amp;<font color="#000000">env</font>, <font color="#000000">op</font>);<br></br>
+        <font color="#000000">AXIS2_CONF_ADD_SVC</font>(<font color="#000000">conf</font>, &amp;<font color="#000000">env</font>, <font color="#000000">svc</font>);<br></br>
+    }<br></br>
+<br></br>
+    <font color="#000000"><b>if</b></font> (!<font color="#000000">op</font>)<br></br>
+    {<br></br>
+        <font color="#000000">printf</font>(<font color="#FF0000">"ERROR: operation not present in service\n"</font>);<br></br>
+        <font color="#000000"><b>return</b></font> -<font color="#0000FF">1</font>;<br></br>
+    }<br></br>
+<br></br>
+   <font color="#808080"><i>/* Invoke the operation. Client blocks until the response message comes. <br></br>
+    * Response message gets set in the response message context.<br></br>
+    */</i></font><br></br>
+    <font color="#000000">response_ctx</font> = <font color="#000000">AXIS2_CALL_INVOKE_BLOCKING</font>(<font color="#000000">call</font>, &amp;<font color="#000000">env</font>, <font color="#000000">op</font>, <font color="#000000">msg_ctx</font>);<br></br>
+<br></br>
+    <font color="#000000"><b>if</b></font> (<font color="#000000">response_ctx</font>)<br></br>
+    {<br></br>
+        <font color="#808080"><i>/* Get the response SOAP message from response message context */</i></font><br></br>
+        <font color="#000000">axis2_soap_envelope_t</font> *<font color="#000000">soap_envelope</font> = <font color="#000000">AXIS2_MSG_CTX_GET_SOAP_ENVELOPE</font>(<font color="#000000">response_ctx</font>, &amp;<font color="#000000">env</font>);<br></br>
+        <font color="#000000">ret_node</font> = <font color="#000000">AXIS2_SOAP_ENVELOPE_GET_BASE_NODE</font>(<font color="#000000">soap_envelope</font>, &amp;<font color="#000000">env</font>);<br></br>
+    }<br></br>
+                                                        <br></br>
+    <font color="#000000"><b>if</b></font>(<font color="#000000">ret_node</font>)<br></br>
+    {<br></br>
+        <font color="#808080"><i>/* Get the response value from the SOAP message */</i></font><br></br>
+        <font color="#000000">axis2_xml_writer_t</font> *<font color="#000000">writer</font> = <font color="#000000">NULL</font>;<br></br>
+        <font color="#000000">axis2_om_output_t</font> *<font color="#000000">om_output</font> = <font color="#000000">NULL</font>;<br></br>
+        <font color="#000000">axis2_char_t</font> *<font color="#000000">buffer</font> = <font color="#000000">NULL</font>;<br></br>
+        <br></br>
+        <font color="#000000">printf</font>(<font color="#FF0000">"\necho stub invoke SUCCESSFUL!\n"</font>);<br></br>
+        <font color="#000000">writer</font> = <font color="#000000">axis2_xml_writer_create_for_memory</font>(&amp;<font color="#000000">env</font>, <font color="#000000">NULL</font>, <font color="#000000">AXIS2_TRUE</font>, <font color="#0000FF">0</font>);<br></br>
+        <font color="#000000">om_output</font> = <font color="#000000">axis2_om_output_create</font> (&amp;<font color="#000000">env</font>, <font color="#000000">writer</font>);<br></br>
+<br></br>
+        <font color="#000000">AXIS2_OM_NODE_SERIALIZE</font> (<font color="#000000">ret_node</font>, &amp;<font color="#000000">env</font>, <font color="#000000">om_output</font>);<br></br>
+        <font color="#000000">buffer</font> = <font color="#000000">AXIS2_XML_WRITER_GET_XML</font>(<font color="#000000">writer</font>, &amp;<font color="#000000">env</font>);<br></br>
+        <font color="#000000">printf</font> (<font color="#FF0000">"\nReceived OM node in XML : %s\n"</font>, <font color="#000000">buffer</font>);<br></br>
+    }<br></br>
+    <font color="#000000"><b>else</b></font><br></br>
+    {<br></br>
+                <font color="#000000">AXIS2_LOG_ERROR</font>(<font color="#000000">env</font>-&gt;<font color="#000000">log</font>, <font color="#000000">AXIS2_LOG_SI</font>, <font color="#FF0000">"Stub invoke failed: Error code:"</font><br></br>
+                                                <font color="#FF0000">" %d :: %s"</font>, <font color="#000000">env</font>-&gt;<font color="#000000">error</font>-&gt;<font color="#000000">error_number</font>,<br></br>
+                        <font color="#000000">AXIS2_ERROR_GET_MESSAGE</font>(<font color="#000000">env</font>-&gt;<font color="#000000">error</font>));<br></br>
+        <font color="#000000">printf</font>(<font color="#FF0000">"echo stub invoke failed!\n"</font>);<br></br>
+    }<br></br>
+    <br></br>
+    <font color="#000000"><b>if</b></font> (<font color="#000000">call</font>)<br></br>
+    {<br></br>
+        <font color="#000000">AXIS2_CALL_FREE</font>(<font color="#000000">call</font>, &amp;<font color="#000000">env</font>);<br></br>
+    }<br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">status</font>;<br></br>
+}<br></br>
+<br></br>
+<font color="#808080"><i>/* build SOAP request message content using OM */</i></font><br></br>
+<font color="#000000">axis2_om_node_t</font> *<br></br>
+<font color="#000000">build_om_programatically</font>(<font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>)<br></br>
+{<br></br>
+    <font color="#000000">axis2_om_node_t</font> *<font color="#000000">echo_om_node</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_element_t</font>* <font color="#000000">echo_om_ele</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_node_t</font>* <font color="#000000">text_om_node</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_element_t</font> * <font color="#000000">text_om_ele</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_namespace_t</font> *<font color="#000000">ns1</font> = <font color="#000000">NULL</font>;<br></br>
+    <br></br>
+<br></br>
+    <font color="#000000">axis2_xml_writer_t</font> *<font color="#000000">xml_writer</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_output_t</font> *<font color="#000000">om_output</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_char_t</font> *<font color="#000000">buffer</font> = <font color="#000000">NULL</font>;<br></br>
+<br></br>
+    <font color="#000000">ns1</font> = <font color="#000000">axis2_om_namespace_create</font> (<font color="#000000">env</font>, <font color="#FF0000">"http://localhost:9090/axis2/services/echo"</font>, <font color="#FF0000">"ns1"</font>);<br></br>
+<br></br>
+    <font color="#000000">echo_om_ele</font> = <font color="#000000">axis2_om_element_create</font>(<font color="#000000">env</font>, <font color="#000000">NULL</font>, <font color="#FF0000">"echoString"</font>, <font color="#000000">ns1</font>, &amp;<font color="#000000">echo_om_node</font>);<br></br>
+    <br></br>
+    <font color="#000000">text_om_ele</font> = <font color="#000000">axis2_om_element_create</font>(<font color="#000000">env</font>, <font color="#000000">echo_om_node</font>, <font color="#FF0000">"text"</font>, <font color="#000000">NULL</font>, &amp;<font color="#000000">text_om_node</font>);<br></br>
+<br></br>
+    <font color="#000000">AXIS2_OM_ELEMENT_SET_TEXT</font>(<font color="#000000">text_om_ele</font>, <font color="#000000">env</font>, <font color="#FF0000">"echo5"</font>, <font color="#000000">text_om_node</font>);<br></br>
+    <br></br>
+    <br></br>
+    <font color="#000000">xml_writer</font> = <font color="#000000">axis2_xml_writer_create_for_memory</font>(<font color="#000000">env</font>, <font color="#000000">NULL</font>, <font color="#000000">AXIS2_FALSE</font>, <font color="#000000">AXIS2_FALSE</font>);<br></br>
+    <font color="#000000">om_output</font> = <font color="#000000">axis2_om_output_create</font>( <font color="#000000">env</font>, <font color="#000000">xml_writer</font>);<br></br>
+    <br></br>
+    <font color="#000000">AXIS2_OM_NODE_SERIALIZE</font>(<font color="#000000">echo_om_node</font>, <font color="#000000">env</font>, <font color="#000000">om_output</font>);<br></br>
+    <font color="#000000">buffer</font> = <font color="#000000">AXIS2_XML_WRITER_GET_XML</font>(<font color="#000000">xml_writer</font>, <font color="#000000">env</font>);         <br></br>
+    <font color="#000000">printf</font>(<font color="#FF0000">"\nSending OM node in XML : %s \n"</font>,  <font color="#000000">buffer</font>); <br></br>
+<br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">echo_om_node</font>;<br></br>
+}<br></br>
+</p></div><div class="subsection"><a name="Request_SOAP_Message"></a><h3>Request SOAP Message</h3>
+    <div class="source"><pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+   &lt;soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"&gt;
+      &lt;soapenv:Header xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"&gt;
+         &lt;wsa:To&gt;http://localhost:9090/axis2/services/echo/echo&lt;/wsa:To&gt;
+         &lt;wsa:Action&gt;http://127.0.0.1:9090/axis2/services/echo/echoString&lt;/wsa:Action&gt;
+         &lt;wsa:ReplyTo&gt;
+            &lt;wsa:Address&gt;http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous&lt;/wsa:Address&gt;
+         &lt;/wsa:ReplyTo&gt;
+         &lt;wsa:ReferenceProperties&gt;&lt;/wsa:ReferenceProperties&gt;
+         &lt;wsa:MessageID&gt;325699d4-a438-1da1-3e0b-001125b4e529&lt;/wsa:MessageID&gt;
+      &lt;/soapenv:Header&gt;
+      &lt;soapenv:Body&gt;
+         &lt;ns1:echoString xmlns:ns1="http://localhost:9090/axis2/services/echo"&gt;
+            &lt;text&gt;Hello World!&lt;/text&gt;
+         &lt;/ns1:echoString&gt;
+      &lt;/soapenv:Body&gt;
+   &lt;/soapenv:Envelope&gt;
+
+</pre></div>
+  </div><div class="subsection"><a name="Response_SOAP_Message"></a><h3>Response SOAP Message</h3>
+    <div class="source"><pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+   &lt;soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"&gt;
+      &lt;soapenv:Header xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"&gt;
+         &lt;wsa:To&gt;http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous&lt;/wsa:To&gt;
+         &lt;wsa:Action&gt;http://127.0.0.1:9090/axis2/services/echo/echoString&lt;/wsa:Action&gt;
+         &lt;wsa:ReplyTo&gt;
+            &lt;wsa:Address&gt;http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous&lt;/wsa:Address&gt;
+         &lt;/wsa:ReplyTo&gt;
+         &lt;wsa:ReferenceProperties&gt;&lt;/wsa:ReferenceProperties&gt;
+         &lt;wsa:From&gt;
+            &lt;wsa:Address&gt;http://localhost:9090/axis2/services/echo/echo&lt;/wsa:Address&gt;
+         &lt;/wsa:From&gt;
+         &lt;wsa:ReferenceProperties&gt;&lt;/wsa:ReferenceProperties&gt;
+         &lt;wsa:MessageID&gt;326a1946-a438-1da1-2b95-001125b4e529&lt;/wsa:MessageID&gt;
+         &lt;wsa:RelatesTo wsa:RelationshipType="wsa:Reply"&gt;325699d4-a438-1da1-3e0b-001125b4e529&lt;/wsa:RelatesTo&gt;
+      &lt;/soapenv:Header&gt;
+      &lt;soapenv:Body&gt;
+         &lt;ns1:echoString xmlns:ns1="http://localhost:9090/axis2/services/echo"&gt;
+            &lt;text&gt;Hello World!&lt;/text&gt;
+         &lt;/ns1:echoString&gt;
+      &lt;/soapenv:Body&gt;
+   &lt;/soapenv:Envelope&gt;
+</pre></div>
+  <br></br></div><div class="subsection"><a name="Echo_NonBlocking_Client"></a><h3>Echo NonBlocking Client</h3><p>In the Echo Blocking Client exmple above, once the
+"axis2_echo_stub_echo(stub, &amp;env, node);" is called, the client is
+blocked till the operation is completed. This behavior is not desirable when
+there are many Web Service invocations to be done in a single client
+application. A solution would be to use a Non-Blocking API to invoke web
+services. Axis2 provides a callback based non-blocking API for users.</p><p>A Sample demonstrating this senario can be found in the
+samples/client/echo_non_blocking folder. In fact, this sample demonstrates
+one level below the usual callback mechanism.</p><p>Before we look at the code changes to the Echo Blocking Client,, let's get
+a feel of how it works. First You need to create a callback instance using
+axis2_callback_create(axis2_env_t*) and then call the macro
+AXIS2_CALL_INVOKE_NON_BLOCKING(axis2_call_t*, axis2_env_t**,
+axis2_msg_ctx_t*, axis2_callback_t*). In your code, you need to poll using
+the macro AXIS2_CALLBACK_GET_COMPLETE(axis2_callback_t*, axis2_env_t**) to
+check for the completion. Once this macro is true, you can access the reply
+SOAP payload using the macro AXIS2_CALLBACK_GET_ENVELOPE(axis2_callback_t*,
+axis2_env_t**).</p><p></p><p>You need to primarily replace the following portion of code in the Echo
+Blocking Client</p><p>    stub = <font color="#000000">axis2_stub_create_with_endpoint_uri_and_client_home</font>(&amp;<font color="#000000">env</font>, <font color="#000000">address</font>,<br></br>
+        <font color="#000000">client_home</font>);<br></br>
+    <font color="#000000">AXIS2_STUB_SET_TRANSPORT_INFO</font>(<font color="#000000">stub</font>, &amp;<font color="#000000">env</font>, <font color="#000000">AXIS2_TRANSPORT_HTTP</font>, <br></br>
+        <font color="#000000">AXIS2_TRANSPORT_HTTP</font>, <font color="#000000">AXIS2_FALSE</font>);<br></br>
+    <font color="#000000">AXIS2_STUB_SET_SOAP_VERSION</font>(<font color="#000000">stub</font>, &amp;<font color="#000000">env</font>, <font color="#000000">AXIS2_SOAP_11</font>);<br></br>
+    <font color="#808080"><i>/* create node and invoke echo */</i></font><br></br>
+    <font color="#000000">ret_node</font> = <font color="#000000">axis2_echo_stub_echo</font>(<font color="#000000">stub</font>, &amp;<font color="#000000">env</font>, <font color="#000000">node</font>);</p><p></p><p>to the following (note that you need to create an instance of
+axis2_callback_t.</p><p></p><p></p><p>    <font color="#000000">callback
+ = axis2_callback_create</font>(&amp;<font color="#000000">env</font>);<br></br>
+<font color="#000000">    AXIS2_CALL_INVOKE_NON_BLOCKING</font>(<font color="#000000">call</font>, &amp;<font color="#000000">env</font>, <font color="#000000">op</font>, <font color="#000000">msg_ctx</font>, <font color="#000000">callback</font>);<br></br>
+    <font color="#000000"><b>while</b></font> (!<font color="#000000">AXIS2_CALLBACK_GET_COMPLETE</font>(<font color="#000000">callback</font>, &amp;<font color="#000000">env</font>))<br></br>
+    {<br></br>
+        <font color="#000000">printf</font>(<font color="#FF0000">"sleep(2) till callback complete\n"</font>);<br></br>
+        <font color="#000000"><b>if</b></font> (<font color="#000000">count</font>++ &gt; <font color="#0000FF">10</font>)<br></br>
+            <font color="#000000"><b>break</b></font>;<br></br>
+        <font color="#000000">AXIS2_SLEEP</font>(<font color="#0000FF">2</font>);            <br></br>
+    }<br></br>
+    <font color="#000000">soap_envelope</font> = <font color="#000000">AXIS2_CALLBACK_GET_ENVELOPE</font>(<font color="#000000">callback</font>, &amp;<font color="#000000">env</font>);<br></br>
+</p><p></p><p align="right"><a href="userguide1.html"><img src="images/arrow_left.gif" alt=""></img>
+Previous</a> | <a href="userguide3.html">Next <img src="images/arrow_right.gif" alt=""></img></a></p><p>Pages: <a href="userguide.html">Content</a>, <a href="userguide1.html">1</a>, <b>2</b>, <a href="userguide3.html">3</a></p></div></div></div></div><div class="clear"><hr></hr></div><div id="footer"><div class="xright">© 2005-2006, Apache Software Foundation</div><div class="clear"><hr></hr></div></div></body></html>
\ No newline at end of file

Added: webservices/axis2/site/c/docs/userguide3.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/site/c/docs/userguide3.html?rev=390460&view=auto
==============================================================================
--- webservices/axis2/site/c/docs/userguide3.html (added)
+++ webservices/axis2/site/c/docs/userguide3.html Fri Mar 31 09:02:09 2006
@@ -0,0 +1,307 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>Axis2/C - Axis2 User's Guide</title><style type="text/css" media="all">
+          @import url("../style/maven-base.css");
+          
+			    @import url("../style/maven-classic.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/c" id="projectLogo"><img alt="Apache Axis2 C" 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: 31 March 2006
+                  | Doc for 0.90</div><div class="xright"></div><div class="clear"><hr></hr></div></div><div id="leftColumn"><div id="navcolumn"><div id="menuAxis2_C"><h5>Axis2/C</h5><ul><li class="none"><a href="../index.html">Home</a></li><li class="expanded"><a href="../download.cgi">Download Axis2/C</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/c/" class="externalLink" title="External Link">Source Code</a></li></ul></li><li class="none"><a href="../docs/index.html">Documentation</a></li><li class="expanded"><a href="../mail-lists.html">Get Involved</a><ul><li class="none"><a href="../mail-lists.html">Mailing Lists</a></li></ul></li><li class="expanded"><a href="../team-list.html">Project Information</a><ul><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><a h
 ref="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="Axis2_C_User_s_Guide"></a><h2>Axis2/C User's Guide</h2><p align="right">Pages: <a href="userguide.html">Content</a>, <a href="userguide1.html">1</a>, <a href="userguide2.html">2</a>, <b>3</b></p><p><strong>User Feedback</strong>: <a href="mailto:axis-user@ws.apache.org">axis-c-user@ws.apache.org</a> (Please
+remember to prefix the subject with [Axis2]). To subscribe to mailing list
+see <a href="../mail-lists.html">here.</a></p><p><a name="Conventions"></a></p></div><div class="section"><a name="Conventions_used_in_the_document:"></a><h2>Conventions used in the document:</h2><p>From here onwards this document will refer to the folder where Axis2/C
+binary is installed as AXIS2C_HOME</p><p>In this section of user's guide we will look at how to write and deploy a
+Web Services using Axis2/C. All the user guide samples are located in the
+<b>"samples"</b> directory of the binary distribution.</p></div><div class="section"><a name="Web_Services_Using_Axis2_C"></a><h2>Web Services Using Axis2/C</h2><p>Before starting, please make sure that you have installed Axis2/C
+correctly and check whether you can run the axis2_http_server located in
+AXIS2C_HOME/bin . (See <a href="installationguide.html" class="newWindow" title="New Window" target="_blank">Installation Guide</a>).</p><div class="subsection"><a name="Writing_Web_Services_Using_Axis2_C"></a><h3>Writing Web Services Using Axis2/C</h3></div><div class="subsection"><a name="Creating_Web_Service__Echo_service_"></a><h3>Creating Web Service (Echo service)</h3><p>First let's see how we can write a simple Web Service (echo service) using
+Axis2/C's primary interfaces and deploy it. For this purpose we will create a
+Web Service with one operation as follows.</p>
+    <div class="source"><pre>axis2_om_node_t* axis2_echo_echo(axis2_om_node_t *echo_node){} 
+
+</pre></div>
+  <p>You can have peek at the complete source code for this example echo
+service located in the "AXIS2C_HOME/samples/server/echo" directory .</p></div><div class="subsection"><a name="How_to_write_the_Web_Service_"></a><h3>How to write the Web Service?</h3><p>
+Writing a new Web Service with Axis2/C involve four steps.
+
+</p><p>(eg . echo service )</p><ol>
+  <li><p style="margin-bottom: 0in;">Write a echo_skeleton.c file which
+    implements the API given inaxis2_svc_skeleton.h header file.</p>
+  </li>
+  <li>Write the service implementation source file file (in this case echo.c
+    service) which implements the actual business logic.</li>
+  <li>Write a services.xml file to explain the Web Service.</li>
+  <li>Create a folder with the service name under AXIS2C_HOME/services and
+    put the compiled service ( .dll or .so file) for the Web Service and
+    services.xml file in to that folder</li>
+</ol><p><a name="Step1"></a></p></div><div class="subsection"><a name="Step1_:Write_the_echo_skeleton_c_file_implementing_the_axis2_svc_skeleton_h"></a><h3>Step1 :Write the echo_skeleton.c file implementing the axis2_svc_skeleton.h</h3><p>axis2_svc_skeleton.h header file has the axis2_svc_skeleton_ops_t
+operations struct which defines four function pointers to be implemented and
+assigned by a service skeleton.</p><p>They are:-</p>
+    <div class="source"><pre>
+int (AXIS2_CALL * init) (axis2_svc_skeleton_t *svc_skeleton,
+                         axis2_env_t **env);
+
+axis2_om_node_t * (AXIS2_CALL* invoke)(axis2_svc_skeleton_t *svc_skeli, 
+                    axis2_env_t **env, axis2_om_node_t *node);
+
+axis2_om_node_t *(AXIS2_CALL* on_fault)(axis2_svc_skeleton_t *svc_skeli,
+                    axis2_env_t **env, axis2_om_node_t *node);
+
+int (AXIS2_CALL *free)(axis2_svc_skeleton_t *svc_skeli, 
+                       axis2_env_t **env);
+
+</pre></div>
+  <p>Lets implement the above functions for echo service.</p><p><font color="#808080"><i>/* Initialize the service */</i></font><br></br>
+<font color="#800000">int</font> <font color="#000000">AXIS2_CALL</font><br></br>
+<font color="#000000">echo_init</font>(<font color="#000000">axis2_svc_skeleton_t</font> *<font color="#000000">svc_skeleton</font>,<br></br>
+                        <font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>)<br></br>
+{<br></br>
+    <font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">func_array</font> = <font color="#000000">axis2_array_list_create</font>(<font color="#000000">env</font>, <font color="#0000FF">0</font>);<br></br>
+    <font color="#808080"><i>/* Add the implemented operation names of the service to  <br></br>
+     * the array list of functions <br></br>
+     */</i></font><br></br>
+    <font color="#000000">AXIS2_ARRAY_LIST_ADD</font>(<font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">func_array</font>, <font color="#000000">env</font>, <font color="#FF0000">"echoString"</font>);<br></br>
+    <font color="#808080"><i>/* Any initialization stuff of echo service should go here */</i></font><br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">AXIS2_SUCCESS</font>;<br></br>
+}<br></br>
+<br></br>
+<font color="#808080"><i>/*<br></br>
+ * This method invokes the right service method <br></br>
+ */</i></font><br></br>
+<font color="#000000">axis2_om_node_t</font>* <font color="#000000">AXIS2_CALL</font><br></br>
+<font color="#000000">echo_invoke</font>(<font color="#000000">axis2_svc_skeleton_t</font> *<font color="#000000">svc_skeleton</font>,<br></br>
+            <font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>,<br></br>
+            <font color="#000000">axis2_om_node_t</font> *<font color="#000000">node</font>)<br></br>
+{<br></br>
+    <font color="#808080"><i>/* Invoke the business logic.<br></br>
+     * Depending on the function name invoke the correct impl method.<br></br>
+     * We have only echo in this sample, hence invoke echo method.<br></br>
+     * To see how to deal with multiple impl methods, have a look at the<br></br>
+     * math sample.<br></br>
+     */</i></font><br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">axis2_echo_echo</font>(<font color="#000000">env</font>, <font color="#000000">node</font>);<br></br>
+}<br></br>
+<br></br>
+<font color="#808080"><i>/* On fault, handle the fault */</i></font><br></br>
+<font color="#000000">axis2_om_node_t</font>* <font color="#000000">AXIS2_CALL</font><br></br>
+<font color="#000000">echo_on_fault</font>(<font color="#000000">axis2_svc_skeleton_t</font> *<font color="#000000">svc_skeli</font>, <br></br>
+              <font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>, <font color="#000000">axis2_om_node_t</font> *<font color="#000000">node</font>)<br></br>
+{<br></br>
+   <font color="#808080"><i>/* Here we are just setting a simple error message inside an element <br></br>
+    * called 'EchoServiceError' <br></br>
+    */</i></font><br></br>
+    <font color="#000000">axis2_om_node_t</font> *<font color="#000000">error_node</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_node_t</font>* <font color="#000000">text_node</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_element_t</font> *<font color="#000000">error_ele</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">error_ele</font> = <font color="#000000">axis2_om_element_create</font>(<font color="#000000">env</font>, <font color="#000000">node</font>, <font color="#FF0000">"EchoServiceError"</font>, <font color="#000000">NULL</font>, <br></br>
+        &amp;<font color="#000000">error_node</font>);<br></br>
+    <font color="#000000">AXIS2_OM_ELEMENT_SET_TEXT</font>(<font color="#000000">error_ele</font>, <font color="#000000">env</font>, <font color="#FF0000">"Echo service failed "</font>, <br></br>
+        <font color="#000000">text_node</font>);<br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">error_node</font>;<br></br>
+}<br></br>
+<br></br>
+<font color="#808080"><i>/* Free the resources used */</i></font><br></br>
+<font color="#800000">int</font> <font color="#000000">AXIS2_CALL</font><br></br>
+<font color="#000000">echo_free</font>(<font color="#000000">axis2_svc_skeleton_t</font> *<font color="#000000">svc_skeleton</font>,<br></br>
+            <font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>)<br></br>
+{<br></br>
+    <font color="#808080"><i>/* Free the function array */</i></font><br></br>
+    <font color="#000000"><b>if</b></font>(<font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">func_array</font>)<br></br>
+    {<br></br>
+        <font color="#000000">AXIS2_ARRAY_LIST_FREE</font>(<font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">func_array</font>, <font color="#000000">env</font>);<br></br>
+        <font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">func_array</font> = <font color="#000000">NULL</font>;<br></br>
+    }<br></br>
+    <br></br>
+    <font color="#808080"><i>/* Free the function array */</i></font><br></br>
+    <font color="#000000"><b>if</b></font>(<font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">ops</font>)<br></br>
+    {<br></br>
+        <font color="#000000">AXIS2_FREE</font>((*<font color="#000000">env</font>)-&gt;<font color="#000000">allocator</font>, <font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">ops</font>);<br></br>
+        <font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">ops</font> = <font color="#000000">NULL</font>;<br></br>
+    }<br></br>
+    <br></br>
+    <font color="#808080"><i>/* Free the service skeleton */</i></font><br></br>
+    <font color="#000000"><b>if</b></font>(<font color="#000000">svc_skeleton</font>)<br></br>
+    {<br></br>
+        <font color="#000000">AXIS2_FREE</font>((*<font color="#000000">env</font>)-&gt;<font color="#000000">allocator</font>, <font color="#000000">svc_skeleton</font>);<br></br>
+        <font color="#000000">svc_skeleton</font> = <font color="#000000">NULL</font>;<br></br>
+    }<br></br>
+<br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">AXIS2_SUCCESS</font>; <br></br>
+}<br></br>
+</p><p>Now we can write the create function of the echo_service_skeleton as<br></br>
+follows.</p><p><font color="#808080"><i>/*Create function */<br></br>
+</i></font> <font color="#000000">axis2_svc_skeleton_t</font> *<br></br>
+<font color="#000000">axis2_echo_create</font>(<font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>)<br></br>
+{<br></br>
+    <font color="#000000">axis2_svc_skeleton_t</font> *<font color="#000000">svc_skeleton</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#808080"><i>/* Allocate memory for the structs */</i></font><br></br>
+    <font color="#000000">svc_skeleton</font> = <font color="#000000">AXIS2_MALLOC</font>((*<font color="#000000">env</font>)-&gt;<font color="#000000">allocator</font>, <br></br>
+        <font color="#000000"><b>sizeof</b></font>(<font color="#000000">axis2_svc_skeleton_t</font>));<br></br>
+<br></br>
+    <font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">ops</font> = <font color="#000000">AXIS2_MALLOC</font>(<br></br>
+        (*<font color="#000000">env</font>)-&gt;<font color="#000000">allocator</font>, <font color="#000000"><b>sizeof</b></font>(<font color="#000000">axis2_svc_skeleton_ops_t</font>));<br></br>
+<br></br>
+    <font color="#808080"><i>/* Assign function pointers */</i></font><br></br>
+    <font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">ops</font>-&gt;<font color="#000000">free</font> = <font color="#000000">echo_free</font>;<br></br>
+    <font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">ops</font>-&gt;<font color="#000000">init</font> = <font color="#000000">echo_init</font>;<br></br>
+    <font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">ops</font>-&gt;<font color="#000000">invoke</font> = <font color="#000000">echo_invoke</font>;<br></br>
+    <font color="#000000">svc_skeleton</font>-&gt;<font color="#000000">ops</font>-&gt;<font color="#000000">on_fault</font> = <font color="#000000">echo_on_fault</font>;<br></br>
+<br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">svc_skeleton</font>;<br></br>
+}</p><p></p><p>In addition to the above functions every service must have the following
+two functions with exactly the same function signature as in xxx_skeleton.c
+file.</p><br></br><p><font color="#000000">AXIS2_EXPORT</font> <font color="#800000">int</font> <br></br>
+<font color="#000000">axis2_get_instance</font>(<font color="#000000">axis2_svc_skeleton_t</font> **<font color="#000000">inst</font>,<br></br>
+                   <font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>)<br></br>
+{<br></br>
+    *<font color="#000000">inst</font> = <font color="#000000">axis2_echo_create</font>(<font color="#000000">env</font>);<br></br>
+    <font color="#000000"><b>if</b></font>(!(*<font color="#000000">inst</font>))<br></br>
+    {<br></br>
+        <font color="#000000"><b>return</b></font> <font color="#000000">AXIS2_FAILURE</font>;<br></br>
+    }<br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">AXIS2_SUCCESS</font>;<br></br>
+}<br></br>
+<br></br>
+<font color="#000000">AXIS2_EXPORT</font> <font color="#800000">int</font> <br></br>
+<font color="#000000">axis2_remove_instance</font>(<font color="#000000">axis2_svc_skeleton_t</font> *<font color="#000000">inst</font>,<br></br>
+                      <font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>)<br></br>
+{<br></br>
+    <font color="#000000">axis2_status_t</font> <font color="#000000">status</font> = <font color="#000000">AXIS2_FAILURE</font>;<br></br>
+    <font color="#000000"><b>if</b></font> (<font color="#000000">inst</font>)<br></br>
+    {<br></br>
+        <font color="#000000">status</font> = <font color="#000000">AXIS2_SVC_SKELETON_FREE</font>(<font color="#000000">inst</font>, <font color="#000000">env</font>);<br></br>
+    }<br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">status</font>;<br></br>
+}<br></br>
+</p><p>Axis2/C engine can load the service dll, however, it needs to know which
+method to call. Since C does not have reflection, we need to have some dll
+exposed functions known to Axis2/C engine. <b>axis2_get_instance</b> and
+<b>axis2_remove_instance</b> are the two functions that need to be exposed
+from a service dll (or any other dll of Axis2/C engine). Axis2/C engine calls
+axis2_get_instance method, which creates a new service instance, an cast the
+return pointer to axis2_svc_skeleton interface.Then the interface methods can
+be called by Axis2/C engine.</p><p><a name="Step2"></a></p></div><div class="subsection"><a name="Step2_:_Now_we_can_write_the_echo_service_in_a_file_echo_c"></a><h3>Step2 : Now we can write the echo service in a file echo.c</h3><p><a name="Step3">axis2_om_node_t *<br></br>
+<font color="#000000">axis2_echo_echo</font> (<font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>, <font color="#000000">axis2_om_node_t</font> *<font color="#000000">node</font>)<br></br>
+{<br></br>
+    <font color="#000000">axis2_om_node_t</font> *<font color="#000000">text_parent_node</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_node_t</font> *<font color="#000000">text_node</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_node_t</font> *<font color="#000000">ret_node</font> = <font color="#000000">NULL</font>;<br></br>
+<br></br>
+    <font color="#000000">AXIS2_ENV_CHECK</font>(<font color="#000000">env</font>, <font color="#000000">NULL</font>);<br></br>
+   <br></br>
+    <font color="#808080"><i>/* Expected request format is :-<br></br>
+     * &lt;ns1:echoString xmlns:ns1="http://localhost:9090/axis2/services/echo"&gt;<br></br>
+     *      &lt;text&gt;echo5&lt;/text&gt;<br></br>
+     * &lt;/ns1:echoString&gt;<br></br>
+     */</i></font><br></br>
+    <font color="#000000"><b>if</b></font> (!<font color="#000000">node</font>) <font color="#808080"><i>/* 'echoString' node */</i></font><br></br>
+    {<br></br>
+        <font color="#000000">AXIS2_ERROR_SET</font>((*<font color="#000000">env</font>)-&gt;<font color="#000000">error</font>, <font color="#000000">AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL</font>, <font color="#000000">AXIS2_FAILURE</font>);<br></br>
+        <font color="#000000">printf</font>(<font color="#FF0000">"Echo client ERROR: input parameter NULL\n"</font>);<br></br>
+        <font color="#000000"><b>return</b></font> <font color="#000000">NULL</font>;<br></br>
+    }<br></br>
+<br></br>
+    <font color="#000000">text_parent_node</font> = <font color="#000000">AXIS2_OM_NODE_GET_FIRST_CHILD</font>(<font color="#000000">node</font>, <font color="#000000">env</font>);<br></br>
+    <font color="#000000"><b>if</b></font> (!<font color="#000000">text_parent_node</font>) <font color="#808080"><i>/* 'text' node */</i></font><br></br>
+    {<br></br>
+        <font color="#000000">AXIS2_ERROR_SET</font>((*<font color="#000000">env</font>)-&gt;<font color="#000000">error</font>, <font color="#000000">AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST</font>, <font color="#000000">AXIS2_FAILURE</font>);<br></br>
+        <font color="#000000">printf</font>(<font color="#FF0000">"Echo client ERROR: invalid XML in request\n"</font>);<br></br>
+        <font color="#000000"><b>return</b></font> <font color="#000000">NULL</font>;<br></br>
+    }<br></br>
+    <br></br>
+    <font color="#000000">text_node</font> = <font color="#000000">AXIS2_OM_NODE_GET_FIRST_CHILD</font>(<font color="#000000">text_parent_node</font>, <font color="#000000">env</font>);<br></br>
+    <font color="#000000"><b>if</b></font> (!<font color="#000000">text_node</font>) <font color="#808080"><i>/* actual text to echo */</i></font><br></br>
+    {<br></br>
+        <font color="#000000">AXIS2_ERROR_SET</font>((*<font color="#000000">env</font>)-&gt;<font color="#000000">error</font>, <font color="#000000">AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST</font>, <font color="#000000">AXIS2_FAILURE</font>);<br></br>
+        <font color="#000000">printf</font>(<font color="#FF0000">"Echo client ERROR: invalid XML in request\n"</font>);<br></br>
+        <font color="#000000"><b>return</b></font> <font color="#000000">NULL</font>;<br></br>
+    }<br></br>
+    <br></br>
+    <font color="#000000"><b>if</b></font> (<font color="#000000">AXIS2_OM_NODE_GET_NODE_TYPE</font>(<font color="#000000">text_node</font>, <font color="#000000">env</font>) == <font color="#000000">AXIS2_OM_TEXT</font>)<br></br>
+    {<br></br>
+        <font color="#000000">axis2_om_text_t</font> *<font color="#000000">text</font> = (<font color="#000000">axis2_om_text_t</font> *)<font color="#000000">AXIS2_OM_NODE_GET_DATA_ELEMENT</font>(<font color="#000000">text_node</font>, <font color="#000000">env</font>);<br></br>
+        <font color="#000000"><b>if</b></font>( <font color="#000000">text</font> &amp;&amp; <font color="#000000">AXIS2_OM_TEXT_GET_VALUE</font>(<font color="#000000">text</font> , <font color="#000000">env</font>))<br></br>
+        {<br></br>
+            <font color="#000000">axis2_char_t</font> *<font color="#000000">text_str</font> = <font color="#000000">AXIS2_OM_TEXT_GET_VALUE</font>(<font color="#000000">text</font>, <font color="#000000">env</font>);<br></br>
+            <font color="#000000">printf</font>(<font color="#FF0000">"Echoing text value  %s \n"</font>, <font color="#000000">text_str</font>);<br></br>
+            <font color="#000000">ret_node</font> = <font color="#000000">build_om_programatically</font>(<font color="#000000">env</font>, <font color="#000000">text_str</font>);<br></br>
+        }<br></br>
+    }<br></br>
+    <font color="#000000"><b>else</b></font><br></br>
+    {<br></br>
+        <font color="#000000">AXIS2_ERROR_SET</font>((*<font color="#000000">env</font>)-&gt;<font color="#000000">error</font>, <font color="#000000">AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST</font>, <font color="#000000">AXIS2_FAILURE</font>);<br></br>
+        <font color="#000000">printf</font>(<font color="#FF0000">"Echo client ERROR: invalid XML in request\n"</font>);<br></br>
+        <font color="#000000"><b>return</b></font> <font color="#000000">NULL</font>;<br></br>
+    }<br></br>
+        <br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">ret_node</font>;<br></br>
+}<br></br>
+<br></br>
+<font color="#808080"><i>/* Builds the response content */</i></font><br></br>
+<font color="#000000">axis2_om_node_t</font> *<br></br>
+<font color="#000000">build_om_programatically</font>(<font color="#000000">axis2_env_t</font> **<font color="#000000">env</font>, <font color="#000000">axis2_char_t</font> *<font color="#000000">text</font>)<br></br>
+{<br></br>
+    <font color="#000000">axis2_om_node_t</font> *<font color="#000000">echo_om_node</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_element_t</font>* <font color="#000000">echo_om_ele</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_node_t</font>* <font color="#000000">text_om_node</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_element_t</font> * <font color="#000000">text_om_ele</font> = <font color="#000000">NULL</font>;<br></br>
+    <font color="#000000">axis2_om_namespace_t</font> *<font color="#000000">ns1</font> = <font color="#000000">NULL</font>;<br></br>
+    <br></br>
+    <font color="#000000">ns1</font> = <font color="#000000">axis2_om_namespace_create</font> (<font color="#000000">env</font>, <font color="#FF0000">"http://localhost:9090/axis2/services/echo"</font>, <font color="#FF0000">"ns1"</font>);<br></br>
+<br></br>
+    <font color="#000000">echo_om_ele</font> = <font color="#000000">axis2_om_element_create</font>(<font color="#000000">env</font>, <font color="#000000">NULL</font>, <font color="#FF0000">"echoString"</font>, <font color="#000000">ns1</font>, &amp;<font color="#000000">echo_om_node</font>);<br></br>
+    <br></br>
+    <font color="#000000">text_om_ele</font> = <font color="#000000">axis2_om_element_create</font>(<font color="#000000">env</font>, <font color="#000000">echo_om_node</font>, <font color="#FF0000">"text"</font>, <font color="#000000">NULL</font>, &amp;<font color="#000000">text_om_node</font>);<br></br>
+<br></br>
+    <font color="#000000">AXIS2_OM_ELEMENT_SET_TEXT</font>(<font color="#000000">text_om_ele</font>, <font color="#000000">env</font>, <font color="#000000">text</font>, <font color="#000000">text_om_node</font>);<br></br>
+    <br></br>
+    <font color="#000000"><b>return</b></font> <font color="#000000">echo_om_node</font>;<br></br>
+}<br></br>
+</a></p></div><div class="subsection"><a name="Step3_:Write_the_services_xml_file"></a><h3>Step3 :Write the services.xml file</h3><p>Axis2/C uses "services.xml" to keep configurations for a Web Service. Each
+Web Service deployed in Axis2/C needs a "services.xml" containing the
+configurations. Note that services.xml has the same semantics as Axis2 Java's
+services.xml file. Only difference is that for class attributes instead of
+giving package qualified class name, we use dll name. services.xml for echo
+will be as follows.</p>
+    <div class="source"><pre>&lt;service name="echo"&gt;
+    &lt;parameter name="ServiceClass" locked="xsd:false"&gt;echo&lt;/parameter&gt;
+    &lt;description&gt;
+        This is a echo service
+    &lt;/description&gt;
+
+    &lt;operation name="echoString"&gt;
+        &lt;parameter name="wsamapping"&gt;
+            http://localhost:9090/axis2/services/echo/echoString
+        &lt;/parameter&gt;
+    &lt;/operation&gt;
+&lt;/service&gt;
+
+</pre></div>
+  <p><em></em></p><p>
+Name of the service will be the name of the Folder with the shared library
+and the services.xml , in this example case we will have a folder named echo
+in which we have the echo.dll (or libecho.so on Linux platform) and
+services.xml file.
+
+</p><p>You can write a services.xml file to include a group of services instead
+of a single service. This makes management and deployment of a set of related
+services very easy. At runtime you can share information between these
+services within a single interaction using the axis2_svc_grp_ctx (Service
+Group Context ). If you hope to use this functionality, the services.xml file
+should have following format.<br></br>
+</p>
+    <div class="source"><pre>&lt;serviceGroup&gt;
+  &lt;service name="Service1"&gt;
+    &lt;!-- details for Service1 --&gt;
+  &lt;/service&gt;  &lt;service name="Service2"&gt;
+    &lt;!-- details for Service2 --&gt;
+  &lt;/service&gt;
+  &lt;module ref="ModuleName" /&gt;
+  &lt;parameter name="serviceGroupParam1" locked="false"&gt;value 1&lt;/parameter&gt;
+&lt;/serviceGroup&gt;
+
+</pre></div>
+  <p>Note : name of the service is a compulsory attribute</p><p><a name="Step4"></a></p></div><div class="subsection"><a name="Step4_:Create_the_Web_Service_Folder_in_services_folder_of_the_repository_"></a><h3>Step4 :Create the Web Service Folder in services folder of the repository.</h3><p>In Axis2/C , it is required to create a folder with the corresponding
+service/service group name which will contain the shared library (compiled
+service) and the services.xml file which describe the web service. So in this
+example case we will have a folder named echo which contain the services,xml
+file and echo dll.</p><p><a name="deploy"></a></p></div><div class="subsection"><a name="Deploy_the_Web_Service"></a><h3>Deploy the Web Service</h3><p>Deploying the service means putting the service folder to the services
+directory. At the moment the server has to be restarted for the service to be
+deployed since hot deployment has not yet been implemented.</p><p align="right"><a href="userguide2.html"><img src="images/arrow_left.gif" alt=""></img><br></br>
+Previous Page</a></p><p>Pages: <a href="userguide.html">Content</a>, <a href="userguide1.html">1</a>, <a href="userguide2.html">2</a>, <b>3</b></p></div></div></div></div><div class="clear"><hr></hr></div><div id="footer"><div class="xright">© 2005-2006, Apache Software Foundation</div><div class="clear"><hr></hr></div></div></body></html>
\ No newline at end of file

Added: webservices/axis2/site/c/download.cgi
URL: http://svn.apache.org/viewcvs/webservices/axis2/site/c/download.cgi?rev=390460&view=auto
==============================================================================
--- webservices/axis2/site/c/download.cgi (added)
+++ webservices/axis2/site/c/download.cgi Fri Mar 31 09:02:09 2006
@@ -0,0 +1,6 @@
+#!/bin/sh
+# Wrapper script around mirrors.cgi script
+# (we must change to that directory in order for python to pick up the
+#  python includes correctly)
+cd /www/www.apache.org/dyn/mirrors
+/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file

Added: webservices/axis2/site/c/download.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/site/c/download.html?rev=390460&view=auto
==============================================================================
--- webservices/axis2/site/c/download.html (added)
+++ webservices/axis2/site/c/download.html Fri Mar 31 09:02:09 2006
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>Axis2/C - Releases</title><style type="text/css" media="all">
+          @import url("./style/maven-base.css");
+          
+			    @import url("./style/maven-classic.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/c" id="projectLogo"><img alt="Apache Axis2 C" 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: 31 March 2006
+                  | Doc for 0.90</div><div class="xright"></div><div class="clear"><hr></hr></div></div><div id="leftColumn"><div id="navcolumn"><div id="menuAxis2_C"><h5>Axis2/C</h5><ul><li class="none"><a href="index.html">Home</a></li><li class="expanded"><a href="download.cgi">Download Axis2/C</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/c/" class="externalLink" title="External Link">Source Code</a></li></ul></li><li class="none"><a href="docs/index.html">Documentation</a></li><li class="expanded"><a href="mail-lists.html">Get Involved</a><ul><li class="none"><a href="mail-lists.html">Mailing Lists</a></li></ul></li><li class="expanded"><a href="team-list.html">Project Information</a><ul><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><a href="http://maven.apache.or
 g/" 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="Releases"></a><h2>Releases</h2><div align="left">
+<p>Axis2C is still under active development and has not yet reached version
+<code>1.0</code>. However, milestone releases are available for download as
+source or binary. For more information, please see <a href="http://www.apache.org/dev/release.html" class="externalLink" title="External Link">Apache Release FAQ</a>.</p>
+</div><div align="center">
+
+<table class="bodyTable"><tbody>
+    <tr class="b"><td width="41" align="center">Name</td><td width="353" align="center">Type</td><td width="288" align="center">Distribution</td><td width="69" align="center">Date</td><td width="119" align="center">Description</td></tr>
+    <tr class="a"><td align="center" valign="middle">0.90</td><td align="center">Release</td><td>MS Windows Distribution<br></br>
+        - Binary Distribution <a href="[preferred]/ws/axis2/c/0_90/axis2c-bin-0.90-win32.zip" title="[preferred]/ws/axis2/0_90/axis2c-bin-0.90-win32.zip">zip</a>
+        <a href="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-bin-0.90-win32.zip.md5" class="externalLink" title="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-bin-0.90-win32.zip.md5">MD5</a>
+        <a href="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-bin-0.90-win32.zip.asc" class="externalLink" title="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-bin-0.90-win32.zip.asc">PGP</a>
+        <br></br>
+        - Source Distribution <a href="[preferred]/ws/axis2/c/0_90/axis2c-src-0.90.zip" title="[preferred]/ws/axis2/c/0_90/axis2c-src-0.90.zip">zip</a> <a href="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-src-0.90.zip.md5" class="externalLink" title="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-src-0.90.zip.md5">MD5</a>
+        <a href="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-src-0.90.zip.asc" class="externalLink" title="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-src-0.90.zip.asc">PGP</a>
+        <br></br>
+        Linux Distribution <br></br>
+        - Binary Distribution <a href="[preferred]/ws/axis2/c/0_90/axis2c-bin-0.90-linux.tar.gz" title="[preferred]/ws/axis2/c/0_90/axis2c-bin-0.90-linux.tar.gz">tar.gz</a>
+        <a href="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-bin-0.90-linux.tar.gz.md5" class="externalLink" title="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-bin-0.90-linux.tar.gz.md5">MD5</a>
+        <a href="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-bin-0.90-linux.tar.gz.asc" class="externalLink" title="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-bin-0.90-linux.tar.gz.asc">PGP</a>
+        <br></br>
+        - Source Distribution <a href="[preferred]/ws/axis2/c/0_90/axis2c-src-0.90.tar.gz" title="[preferred]/ws/axis2/c/0_90/axis2c-src-0.90.tar.gz">tar.gz</a>
+        <a href="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-src-0.90.tar.gz.md5" class="externalLink" title="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-src-0.90.tar.gz.md5">MD5</a>
+        <a href="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-src-0.90.tar.gz.asc" class="externalLink" title="http://www.apache.org/dist/ws/axis2/c/0_90/axis2c-src-0.90.tar.gz.asc">PGP</a>
+      </td><td>31 - 03 - 2006</td><td>0.90 Release (Mirrored)</td></tr>
+    <tr class="b"><td align="center" valign="middle">M0.5</td><td align="center"><p>Milestone</p>
+      </td><td>MS Windows Distribution<br></br>
+        - Binary Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-win32.zip" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/M0_5/axis2c-bin-M0.5-win32.zip">zip</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-win32.zip.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-win32.zip.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-win32.zip.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-win32.zip.asc">PGP</a>
+        <br></br>
+        - Source Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.zip" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.zip">zip</a> <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.zip.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.zip.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.zip.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.zip.asc">PGP</a>
+        <br></br>
+        Linux Distribution <br></br>
+        - Binary Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-linux.tar.gz" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-linux.tar.gz">tar.gz</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-linux.tar.gz.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-linux.tar.gz.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-linux.tar.gz.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-bin-M0.5-linux.tar.gz.asc">PGP</a>
+        <br></br>
+        - Source Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.tar.gz" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.tar.gz">tar.gz</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.tar.gz.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.tar.gz.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.tar.gz.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0_5/axis2c-src-M0.5.tar.gz.asc">PGP</a>
+        <br></br>
+      </td><td>10 - 03 - 2006</td><td>0.5 Milesone (Archived)</td></tr>
+    <tr class="a"><td align="center" valign="middle">M0.4</td><td align="center">Milestone</td><td>MS Windows Distribution<br></br>
+        - Binary Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/win32/axis2c-bin-M0.4-win32.zip" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/win32/axis2c-bin-M0.4-win32.zip">zip</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/win32/axis2c-bin-M0.4-win32.zip.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/win32/axis2c-bin-M0.4-win32.zip.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/win32/axis2c-bin-M0.4-win32.zip.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/win32/axis2c-bin-M0.4-win32.zip.asc">PGP</a>
+        <br></br>
+        - Source Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.zip" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.zip">zip</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.zip.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.zip.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.zip.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.zip.asc">PGP</a>
+        <br></br>
+        Linux Distribution <br></br>
+        - Binary Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/linux/axis2c-bin-M0.4-linux.tar.gz" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/linux/axis2c-bin-M0.4-linux.tar.gz">tar.gz</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/linux/axis2c-bin-M0.4-linux.tar.gz.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/linux/axis2c-bin-M0.4-linux.tar.gz.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/linux/axis2c-bin-M0.4-linux.tar.gz.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/linux/axis2c-bin-M0.4-linux.tar.gz.asc">PGP</a>
+        <br></br>
+        - Source Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.tar.gz" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.tar.gz">tar.gz</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.tar.gz.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.tar.gz.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.tar.gz.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/axis2c-src-M0.4.tar.gz.asc">PGP</a>
+        <br></br>
+      </td><td>02 - 17 - 2006</td><td>0.4 Milestone (Archived)</td></tr>
+    <tr class="b"><td align="center" valign="middle">M0.3</td><td align="center">Milestone</td><td>Linux Distribution <br></br>
+        - Binary Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0.3/axis2c-bin-M0.3-linux.tar.gz" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.3/axis2c-bin-M0.3-linux.tar.gz">tar.gz</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.3/axis2c-bin-M0.3-linux.tar.gz.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.3/axis2c-bin-M0.3-linux.tar.gz.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.4/linux/axis2c-bin-M0.4-linux.tar.gz.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.4/linux/axis2c-bin-M0.4-linux.tar.gz.asc">PGP</a>
+        <br></br>
+        Source Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0.3/axis2c-src-M0.3-linux.tar.gz" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.3/axis2c-src-M0.3-linux.tar.gz">tar.gz</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.3/axis2c-src-M0.3-linux.tar.gz.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.3/axis2c-src-M0.3-linux.tar.gz.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.3/axis2c-src-M0.3-linux.tar.gz.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.3/axis2c-src-M0.3-linux.tar.gz.asc">PGP</a>
+        <br></br>
+      </td><td>02 - 02 - 2006</td><td>0.3 Milestone (Archived)</td></tr>
+    <tr class="a"><td align="center" valign="middle">M0.2</td><td align="center">Milestone</td><td>MS Windows Distribution<br></br>
+        - Source Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-win32.zip" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-win32.zip">zip</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-win32.zip.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-win32.zip.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-win32.zip.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-win32.zip.asc">PGP</a>
+        <br></br>
+        Linux Distribution <br></br>
+        - Source Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-linux.tar.gz" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-linux.tar.gz">tar.gz</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-linux.tar.gz.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-linux.tar.gz.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-linux.tar.gz.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.2/axis2c-src-M0.2-linux.tar.gz.asc">PGP</a></td><td>12 - 08 - 2005</td><td>0.2 Milestone (Archived)</td></tr>
+    <tr class="b"><td align="center" valign="middle">M0.1</td><td align="center">Milestone</td><td>MS Windows Distribution<br></br>
+        - Source Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-win32.zip" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-win32.zip">zip</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-win32.zip.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-win32.zip.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-win32.zip.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-win32.zip.asc">PGP</a>
+        <br></br>
+        Linux Distribution <br></br>
+        - Source Distribution <a href="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-linux.tar.gz" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-linux.tar.gz">tar.gz</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-linux.tar.gz.md5" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-linux.tar.gz.md5">MD5</a>
+        <a href="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-linux.tar.gz.asc" class="externalLink" title="http://archive.apache.org/dist/ws/axis2/c/M0.1/axis2c-src-M0.1-linux.tar.gz.asc">PGP</a>
+        <br></br>
+      </td><td>11 - 25 - 2005</td><td>0.1 Milestone (Archived)</td></tr>
+  </tbody></table>
+</div><div align="left">
+<p>[if-any logo] <a href="[link]"><img align="right" src="[logo]" border="0" alt=""></img></a>[end] The currently selected mirror is <b>[preferred]</b>.  If
+you encounter a problem with this mirror, please select another mirror.  If
+all mirrors are failing, there are <i>backup</i> mirrors (at the end of the
+mirrors list) that should be available.</p>
+
+<form action="[location]" method="get" id="SelectMirror">
+  Other mirrors: 
+  <select name="Preferred">[if-any http][for http]
+    <option value="[http]" selected="selected">[http]</option>[end][end][if-any ftp][for ftp]
+    <option value="[ftp]">[ftp]</option>[end][end][if-any backup][for backup]
+    <option value="[backup]">[backup] (backup)</option>[end][end]
+  </select>
+   
+  <input type="submit" value="Change"></input></form>
+
+<p>You may also consult the <a href="http://www.apache.org/mirrors/" class="externalLink" title="External Link">complete
+list of mirrors</a>.</p>
+
+<p><strong>Note:</strong> when downloading from a mirror please check the <a href="http://www.apache.org/dev/release-signing#md5" class="externalLink" title="External Link">md5sum</a> and verify
+the <a href="http://www.apache.org/dev/release-signing#openpgp" class="externalLink" title="External Link">OpenPGP</a>
+compatible signature from the main Apache site. These can be downloaded by
+following the links above. This <a href="http://www.apache.org/dist/ws/axis2/c/KEYS" class="externalLink" title="External Link">KEYS</a> file contains the
+public keys used for signing release. It is recommended that (when possible)
+a <a href="http://www.apache.org/dev/release-signing#web-of-trust" class="externalLink" title="External Link">web of
+trust</a> is used to confirm the identity of these keys.</p>
+</div></div></div></div><div class="clear"><hr></hr></div><div id="footer"><div class="xright">© 2005-2006, Apache Software Foundation</div><div class="clear"><hr></hr></div></div></body></html>
\ No newline at end of file