axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sa...@apache.org
Subject svn commit: r384330 [1/2] - in /webservices/axis2/trunk/c: ./ xdocs/ xdocs/M0_5/ xdocs/M0_5/images/
Date Wed, 08 Mar 2006 21:14:05 GMT
Author: sahan
Date: Wed Mar  8 13:14:03 2006
New Revision: 384330

URL: http://svn.apache.org/viewcvs?rev=384330&view=rev
Log:
Adding documentation from Chatra, Making some changes to build site properly

Added:
    webservices/axis2/trunk/c/xdocs/M0_5/
    webservices/axis2/trunk/c/xdocs/M0_5/architecture_notes.html
    webservices/axis2/trunk/c/xdocs/M0_5/developerguide.html
    webservices/axis2/trunk/c/xdocs/M0_5/images/
    webservices/axis2/trunk/c/xdocs/M0_5/images/OM005.gif   (with props)
    webservices/axis2/trunk/c/xdocs/M0_5/images/archi006.jpg   (with props)
    webservices/axis2/trunk/c/xdocs/M0_5/images/arrow_left.gif   (with props)
    webservices/axis2/trunk/c/xdocs/M0_5/images/arrow_right.gif   (with props)
    webservices/axis2/trunk/c/xdocs/M0_5/images/binary_folder_structure.jpg   (with props)
    webservices/axis2/trunk/c/xdocs/M0_5/images/folder_structure.jpg   (with props)
    webservices/axis2/trunk/c/xdocs/M0_5/images/folder_structure_libxml2.jpg   (with props)
    webservices/axis2/trunk/c/xdocs/M0_5/index.html
    webservices/axis2/trunk/c/xdocs/M0_5/installationguide.html
    webservices/axis2/trunk/c/xdocs/M0_5/om_tutorial.html
    webservices/axis2/trunk/c/xdocs/M0_5/userguide.html
    webservices/axis2/trunk/c/xdocs/M0_5/userguide1.html
    webservices/axis2/trunk/c/xdocs/M0_5/userguide2.html
    webservices/axis2/trunk/c/xdocs/M0_5/userguide3.html
    webservices/axis2/trunk/c/xdocs/coding_conventions.html
    webservices/axis2/trunk/c/xdocs/index.html
Removed:
    webservices/axis2/trunk/c/xdocs/axis2_coding_convention.html
    webservices/axis2/trunk/c/xdocs/axis2_developer_guide.html
Modified:
    webservices/axis2/trunk/c/project.properties
    webservices/axis2/trunk/c/project.xml
    webservices/axis2/trunk/c/xdocs/navigation.xml

Modified: webservices/axis2/trunk/c/project.properties
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/project.properties?rev=384330&r1=384329&r2=384330&view=diff
==============================================================================
--- webservices/axis2/trunk/c/project.properties (original)
+++ webservices/axis2/trunk/c/project.properties Wed Mar  8 13:14:03 2006
@@ -14,7 +14,7 @@
 # limitations under the License.
 # -------------------------------------------------------------------
 
-axis2_version=M0.3
+axis2_version=M0.5
 #freehep.nar.arch=i386
 #freehep.nar.os=Linux
 #freehep.nar.c.compiler=gcc
@@ -22,5 +22,16 @@
 #freehep.nar.c.compiler.arg.mid=-DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread
 #freehep.nar.compile.includepath=${cutest.home}/include/ ${apr.home}/include/apr-1
 #freehep.nar.linker.arg.start=-L${cutest.home}/lib/ -lcutest -L${apr.home}/lib -lapr-1 
+maven.xdoc.date=left
+maven.xdoc.version=${pom.currentVersion}
 maven.xdoc.includeProjectDocumentation=no
+maven.html2xdoc.enabled=true
+maven.html2xdoc.dir=./xdocs
+maven.pdf.navigationFile=navigation-pdf.xml
 maven.allreports.disable=true
+maven.xdoc.theme=classic
+maven.ui.navcol.background=#fff
+maven.ui.navcol.background.ns4=#fff
+maven.ui.banner.border.top=#fff
+maven.ui.banner.border.bottom=#fff
+maven.ui.banner.background=#fff

Modified: webservices/axis2/trunk/c/project.xml
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/project.xml?rev=384330&r1=384329&r2=384330&view=diff
==============================================================================
--- webservices/axis2/trunk/c/project.xml (original)
+++ webservices/axis2/trunk/c/project.xml Wed Mar  8 13:14:03 2006
@@ -25,7 +25,6 @@
     <name>Apache Axis2 C</name>
     <id>axis2c</id>
     <groupId>axis2c</groupId>
-
     <currentVersion>${axis2_version}</currentVersion>
 
     <!-- details about the organization that 'owns' the project -->
@@ -54,29 +53,17 @@
     <mailingLists>
         <mailingList>
             <name>Axis C Developer List</name>
-            <subscribe>axis-c-dev-subscribe@ws.apache.org</subscribe>
-            <unsubscribe>axis-c-dev-unsubscribe@ws.apache.org</unsubscribe>
+            <subscribe>axis-c-dev-subscribe@ws.apache.org?subject=subscribe</subscribe>
+            <unsubscribe>axis-c-dev-unsubscribe@ws.apache.org?subject=unsubscribe</unsubscribe>
             <archive>http://marc.theaimsgroup.com/?l=axis-c-dev&amp;r=1&amp;w=2</archive>
         </mailingList>
         <mailingList>
             <name>Axis C User List</name>
-            <subscribe>axis-c-user-subscribe@ws.apache.org</subscribe>
-            <unsubscribe>axis-c-user-unsubscribe@ws.apache.org</unsubscribe>
+            <subscribe>axis-c-user-subscribe@ws.apache.org?subject=subscribe</subscribe>
+            <unsubscribe>axis-c-user-unsubscribe@ws.apache.org?subject=unsubscribe</unsubscribe>
             <archive>http://marc.theaimsgroup.com/?l=axis-c-user&amp;r=1&amp;w=2</archive>
         </mailingList>
     </mailingLists>
-    <developers>
-    <developer>
-      <name>Samisa Abeysinghe</name>
-      <id>samisa</id>
-      <email>samisa@apache.org</email>
-      <organization>WSO2</organization>
-      <roles>
-        <role>C Developer</role>
-      </roles>
-    </developer>
-    </developers>
-
 
     <!-- ################################################################ -->
     <!--        Project dependency section                                -->

Added: webservices/axis2/trunk/c/xdocs/M0_5/architecture_notes.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/architecture_notes.html?rev=384330&view=auto
==============================================================================
--- webservices/axis2/trunk/c/xdocs/M0_5/architecture_notes.html (added)
+++ webservices/axis2/trunk/c/xdocs/M0_5/architecture_notes.html Wed Mar  8 13:14:03 2006
@@ -0,0 +1,207 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <meta content="text/html; charset=ISO-8859-1"
+ http-equiv="content-type">
+  <title>Architecture_notes.html</title>
+</head>
+<body>
+<h1>C Specific Architectural Notes on Axis2/C</h1>
+
+<p>Send your feedback to: <a
+href="mailto:axis-c-dev@ws.apache.org">axis-c-dev@ws.apache.org</a> (Prefix
+the subject with [Axis2]). To subscribe to developer or user mailing lists
+see <a href="../mail-lists.html">here</a></p>
+
+<h2>Content</h2>
+<ul>
+  <li><a href="#Introduction">Introduction</a></li>
+  <li><a
+ href="#Axis2_Environment">Axis2
+Environment</a></li>
+  <li><a href="#Dynamic_Loading">Dynamic Loading</a></li>
+  <li><a href="#Transport_Abstraction">Transport Abstraction</a></li>
+  <li><a href="#Stream_Abstraction">Stream Abstraction</a></li>
+  <li><a href="#Threading_Model">Threading Model</a></li>
+  <li><a href="#Parser_Abstraction">Parser Abstraction</a></li>
+</ul>
+<a name="Introduction"></a>
+<h2>Introduction</h2>
+<p>One of the main design goals of Axis2/C is the re-useability of the
+library
+and the ability to plug into different platforms. There are many
+features
+that allow Axis2/C to be pluggable in to different platforms as well as
+to enable the extension of the functionality of the Axis2/C.</p>
+<a name="Axis2_Environment"></a>
+<h2>Axis2 Environment</h2>
+<p>Axis2/C defines an environment to hold platform specific entities
+such as
+the allocating mechanism, the logging mechanism, etc. This environment
+is
+initialized
+at the point of starting Axis2/C and will last for the lifetime of
+Axis2/C
+library. Different sub environments can also be created to suit the
+particular
+scenarios (eg: the thread specific environment). The Axis2 Environment
+holds
+following entities in order to abstract the platform.</p>
+<h4>Axis2 Allocator</h4>
+<p>Allocator is the wrapper for memory management mechanisms. It
+defines the
+following primitives.</p>
+<ol>
+  <li><code>malloc</code>
+- method to allocate a memory block of given size</li>
+  <li><code> realloc</code>
+- method to change the size of the memory block</li>
+  <li><code> free</code>
+- method to free a memory block</li>
+</ol>
+<h4>Axis2 Error</h4>
+<p>Axis2 Error defines error reporting mechanisms for Axis2 library.
+All of
+the Axis2 internal functions use the <code>axis2_error</code> in the
+environment to report errors.
+</p>
+<h4>Axis2 Log</h4>
+<p>Axis2 Log defines the common logging mechanisms required for the
+Axis2
+library. All of the internal Axis2/C code uses the functions defined in
+the
+<code>axis2_log</code> available in the environment.</p>
+<h4>Axis2 Thread Pool</h4>
+<p>Axis2 Thread Pool defines the thread management functions. It hides
+the
+complex thread pooling functions as well as the platform specific
+implementations of threads. Axis2 internal library uses this
+interface
+to manipulate threads and they deal with a common thread type which is
+defined
+as
+<code>axis2_thread.</code></p>
+<p>Axis2 Environment is the starting point for the platform abstraction
+of
+Axis2/C. It can be used to plug platform specific memory management,
+error
+reporting, logging and thread pooling mechanisms to Axis2 core
+functions.</p>
+<a name="Dynamic_Loading"></a>
+<h2>Dynamic Loading</h2>
+<p>Axis2 is a modular program where the user can add functionality by
+selecting a set of modules. The modules can either be compiled at the
+source
+tree of
+Axis2 or separately. These modules should be compiled as
+Dynamic
+Shared Objects (DSOs) that exist separately. Services are also loaded
+dynamically by reading the axis2.xml. This dynamic loading is mandatory
+in
+order to provide hot deployment / update as well as to facilitate the
+runtime
+selection of transports.</p>
+<p>The DSO support for loading individual Axis2 components is based on
+the
+component named <code>class_loader</code> which must be statically
+compiled with
+Axis2
+core components (in the <code>util</code> package). But the
+disadvantage of this
+approach
+is that the <code>class_loader</code> completely depends on the DSO
+functionality of
+the
+underlying operating system, which limits the portability.</p>
+<a name="Transport_Abstraction"></a>
+<h2>Transport Abstraction</h2>
+<p>One of the key advantages of Axis2 is that the Axis2 engine and the
+other
+SOAP processing is independent from the transport aspect. Users can
+develop
+their own transports and the interface is defined in
+<code>axis2_transport_sender.h</code> and
+<code>axis2_transport_receiver.h</code>.</p>
+<p>Currently Axis2/C supports HTTP transport. The transport receiver is
+a
+Simple HTTP server provided by Axis2 or the Axis2 Apache2 module. The
+transport sender uses sockets to connect and send the SOAP Message.</p>
+<p>Inside the HTTP transport,&nbsp; the receivers and clients are
+abstracted so
+that the user can easily plug in their own senders and receivers (eg:
+A
+<code>libcurl</code> based client can be implemented instead of the
+simple http
+client
+available in the axis2 distribution)</p>
+<a name="Stream_Abstraction"></a>
+<h2>Stream Abstraction</h2>
+<p>Stream is a representation of a sequence of bytes. Since Axis2
+heavily
+uses
+streaming mechanisms to read / write xml, an implementation independent
+stream
+abstraction is required in order to integrate Axis2 in other
+environments
+seamlessly. The core components of Axis2 deal with this abstracted
+stream
+and does not worry about the implementation specific details. The
+creating
+point of the stream (eg: the transport receiver) knows what type of
+stream
+should
+be created (eg: socket, file, etc) and creates the appropriate
+stream.
+Thereafter, rest of the components are independent from the
+implementation
+details of the stream.</p>
+<p>Also the stream serves as a main point in internationalization
+support. It
+can convert the the internal byte representation to a different type of
+encodings specified by the user. This can be achieved by plugging an
+encoding
+engine to the stream.</p>
+<a name="Threading_Model"></a>
+<h2>Threading Model</h2>
+<p>Axis2 core functions, such as hot deployment / update, asynchronous
+invocation, concurrent request processing in simple axis2 server,
+etc&nbsp;
+heavily depends on threads. At the same time these threads should be
+platform
+independent inside the Axis2 core components. Another important
+requirement
+in threading model is the ability to pool the threads. This thread
+pooling
+mechanism should be Axis2 independent and Axis2 core components
+should
+be able to deal with the thread pooling mechanisms via a uniform
+interface.</p>
+<p>So the above two aspects lead to two main requirements in the
+threading
+model:</p>
+<ol>
+  <li>Ability to define a platform independent threading mechanism.</li>
+  <li>Ability to define an implementation independent thread pool.</li>
+</ol>
+<p>These two requirements are implemented in current Axis2 using a
+platform
+independent thread type <code>axis2_thread</code> and an
+implementation
+independent thread pool <code>axis2_thread_pool.</code></p>
+<a name="Parser_Abstraction"></a>
+<h2>Parser Abstraction</h2>
+<p>Axis2 architecture depends on the XML pull model. But in C there is
+no
+such API (such as StAX API). Therefore XML pull API, which is specific
+to
+Axis2 is defined in as <code>axis2_xml_reader</code> and
+<code>axis2_xml_writer.</code> Any implementation of this API can be
+plugged
+into the Axis2 core as long as they follow the API strictly. If an
+external XML parser needs to be plugged into Axis2, a wrapper that maps
+the
+reading/writing functions to the Axis2 XML reader/writer API should be
+written.</p>
+
+</body>
+</html>

Added: webservices/axis2/trunk/c/xdocs/M0_5/developerguide.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/developerguide.html?rev=384330&view=auto
==============================================================================
--- webservices/axis2/trunk/c/xdocs/M0_5/developerguide.html (added)
+++ webservices/axis2/trunk/c/xdocs/M0_5/developerguide.html Wed Mar  8 13:14:03 2006
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+  <title>Axis2/C Developer Guide</title>
+  <meta name="generator" content="amaya 9.2.1, see http://www.w3.org/Amaya/"
+  />
+</head>
+
+<body>
+<h1>Axis2/C Developer Guide</h1>
+
+<h4>-Milestone 0.5 Release</h4>
+
+<p>Send your feedback to mailing list: <a
+href="mailto:axis-c-dev@ws.apache.org">axis-c-dev@ws.apache.org</a> (Prefix
+the subject with [Axis2]). To subscribe to developer mailing lists
+see <a href="../mail-lists.html">here</a></p>
+
+<h2>Content</h2>
+<p> This guide walks you through the following topics that might help
+you get familiar with the Axis2/C project quickly.</p>
+<ul>
+  <li><a href="#Programming_Model">Programming model</a></li>
+  <li><a href="#Memory_Management">Memory management</a></li>
+  <li><a href="#Coding_Conventions">Coding conventions</a></li>
+  <li><a href="#Unit_and_System_Tests">Unit and System tests</a></li>
+</ul>
+<a name="Programming_Model"></a>
+<h2>Programming Model</h2>
+<p>Axis2 programming model follows a clean approach to hide data and
+group functions together. The following example illustrates how Axis2/C
+achieves this.<br>
+Operations are bundled into an operation struct and macros are provided
+to access the functions in this struct. Actual function pointers are
+assigned in the implementation file. </p>
+<p>Here's a sample header file.</p>
+<br>
+<strong>/* axis2_ foo.h */</strong>
+<pre class="code"> 
+typedef struct axis2_foo_ops axis2_foo_ops_t;
+typedef struct axis2_foo axis2_foo_t;
+
+struct axis2_foo_ops
+{
+    void (AXIS2_CALL *bar)(void *data);
+    axis2_status_t (AXIS2_CALL *free)(axis2_env_t **env, axis2_foo_t *foo);
+};
+
+struct axis2_foo
+{
+    axis2_foo_ops_t *ops;
+}
+
+/* Macros are provided to access functions defined in the ops (operations structure)*/
+
+#define AXIS2_FOO_BAR(foo, data)\ 
+            ((foo)-&gt;ops-&gt;bar(data))
+#define AXIS2_FOO_FREE(foo, env)\
+            ((for)-&gt;ops-&gt;free(env, foo))
+</pre>
+<p>The implementation file for the above header is shown below.<br>
+</p>
+<pre class="code"><strong>/* foo.c */</strong><br>
+#include &lt;axis2_foo.h&gt;
+
+typedef struct axis2_foo_impl axis2_foo_impl_t;
+
+struct axis2_foo_impl
+{
+    axis2_foo_t foo;
+    my_type my_data; /*private data*/
+};
+
+/* Function Headers */
+
+void AXIS2_CALL axis2_foo_bar(void *data);
+axis2_status_t AXIS2_CALL axis2_foo_free(axis2_env_t **env, axis2_foo_t *foo);
+
+/* Function Implementation */
+axis2_foo_t * AXIS2_CALL axis2_foo_create(axis2_env_t **env)
+{
+    axis2_foo_impl_t * foo_impl = NULL;
+    /* create axis2_foo_t and initialize private data */
+
+    /* create ops structure of foo */
+
+    /* bind ops to functions */
+    foo_impl-&gt;foo.ops-&gt;bar = axis2_foo_bar;
+    foo_impl-&gt;foo.ops-&gt;free = axis2_foo_free;
+    return &amp;(foo_impl-&gt;foo);
+}
+
+void AXIS2_CALL axis2_foo_bar(void *data)
+{
+}
+
+axis2_status_t AXIS2_CALL axis2_foo_free(axis2_env_t **env, axis2_foo_t *foo)
+{
+    /* do the dirty work of cleaning the allocated memory */
+}
+</pre>
+<a name="Memory_Management"></a>
+<h2>Memory Management</h2>
+<p>We need to look into two senarios of memory management: services and
+clients development. You need to be aware of the parts of the memory
+you have allocated to deallocate in order to avoid memory leaks and
+segmentation faults.</p>
+<h3>Memory management guidelines for developing services</h3>
+<p>To understand, how the allocated memory is reclaimed, it is worth
+looking at the service skeleton interface which is defined in <strong>
+axis2_svc_skeleton.h</strong></p>
+<pre class="code">
+AXIS2_DECLARE_DATA struct axis2_svc_skeleton_ops
+{
+
+    int (AXIS2_CALL * free)(axis2_svc_skeleton_t *svc_skeli, axis2_env_t **env);
+
+    ...
+};
+
+AXIS2_DECLARE_DATA struct axis2_svc_skeleton
+{
+    axis2_svc_skeleton_ops_t *ops;
+    axis2_array_list_t *func_array;
+};
+</pre>
+
+<p>The service skeleton implementation should implement the free
+function and attach that to the operations struct of
+axis2_svc_skeleton_t struct. This free function is called each time
+after serving a web services request. <br>
+</p>
+<p>
+Let's try to understand this through an example.<br>
+<br>
+Example: <b> Service skeleton implementation for math service. </b> <br>
+The following code shows the implementation of math_free function which
+is to be attached to the ops of axis2_svc_skeleton_t struct. Usually
+the memory allocated for operations struct, function array and service
+skeleton struct are cleaned in this. You may clean additional memory
+here if you have allocated any specific memory block in math_create
+function.<br>
+</p>
+<pre class="code">
+int AXIS2_CALL math_free(axis2_svc_skeleton_t *svc_skeleton, axis2_env_t **env)
+{
+    if(svc_skeleton-&gt;ops)
+    {
+        AXIS2_FREE((*env)-&gt;allocator, svc_skeleton-&gt;ops);
+        svc_skeleton-&gt;ops = NULL;
+    }
+    if(svc_skeleton-&gt;func_array)
+    {
+        AXIS2_ARRAY_LIST_FREE(svc_skeleton-&gt;func_array, env);
+        svc_skeleton-&gt;func_array = NULL;
+    }
+
+    if(svc_skeleton)
+    {
+        AXIS2_FREE((*env)-&gt;allocator, svc_skeleton);
+        svc_skeleton = NULL;
+    }
+    return AXIS2_SUCCESS;
+}
+</pre>
+<br>
+<p>In the axis2_math_create function you assign the function pointer of
+math_free function to the free function of the operations struct. As
+you can see, now the SOAP engine has a function reference to perform
+garbage collection after each service request.</p>
+
+<pre class="code">
+AXIS2_DECLARE(axis2_svc_skeleton_t *) axis2_math_create(axis2_env_t **env)
+{
+    axis2_svc_skeleton_t *svc_skeleton = NULL;
+    svc_skeleton = AXIS2_MALLOC((*env)-&gt;allocator, sizeof(axis2_svc_skeleton_t));
+
+    svc_skeleton-&gt;ops = AXIS2_MALLOC((*env)-&gt;allocator, sizeof(axis2_svc_skeleton_ops_t));
+
+
+    svc_skeleton-&gt;ops-&gt;free = math_free;
+    ...
+    return svc_skeleton;
+}
+</pre>
+<p>SOAP engine reclaims the memory allocated for the axis2_om_node_t
+structure to create the response SOAP message.
+However, it is the responsibility of the service developer to clean any
+additional memory allocated.</p>
+<h3>Memory management guidelines for developing clients</h3>
+Most of the memory allocated in the client side (including SOAP request
+and reply messges), should be cleaned in the client side itself. Memory
+allocated for properties are taken care of by the SOAP engine. SOAP
+engine reclaims the memory allocated for properties based on the scope
+(Request, Session or Application) you set for each property.
+<a name="Coding_Conventions"></a>
+<h2>Coding Conventions</h2>
+<p>Coding conventions used with the Axis2 project is listed in <a
+ href="../coding_conventions.html">this</a> document.</p>
+<a name="Unit_and_System_Tests"></a>
+<h2>Unit and System Tests</h2>
+<h3>Unit Tests</h3>
+<p>You need to follow two steps to write a unit test for a module.</p>
+1. Add the unit test to the module's test suite.<br>
+2. Add the modules test suite to the main unit test suite.<br>
+<p>CuTest (opensource) library is used to write unit test. The
+following
+section illustrates the two steps.</p>
+<h4>Step1: Adding a unit test to a module's unit test suite</h4>
+<p>This section illustrates how to add a test case to the util module.
+Let's
+take for example the unit tests for axis2 stream. There are two files
+named
+util_stream_test.c/.h placed into modules/util/test folder. Here's a
+sample
+code written to test the operation axis2_stream_ops_read.</p>
+<pre class="code">
+#include "util_stream_test.h"
+
+void Testaxis2_stream_ops_read(CuTest *tc)
+{
+    char actual[10];
+    axis2_allocator_t *allocator = axis2_allocator_init(NULL);
+    axis2_env_t *env = axis2_environment_create(allocator,NULL, NULL, NULL, NULL);
+    axis2_stream_read(env-&gt;stream, actual, 10);
+    char *expected = strdup("aaaaaaaaa");
+    CuAssertStrEquals(tc, expected, actual);
+}
+</pre>
+
+<p>The prototype of the funciton should be added to the header file.
+The test suite is defined in util_test.c. You need to add the above
+defined test case to the test suite as shown below.</p>
+<pre class="code">
+#include "util_test.h"
+#include &lt;axis2_allocator.h&gt;
+#include &lt;axis2_environment.h&gt;
+
+CuSuite* axis2_utilGetSuite()
+{
+    CuSuite* suite = CuSuiteNew();
+
+    SUITE_ADD_TEST(suite, Testaxis2_stream_ops_write);
+    SUITE_ADD_TEST(suite, Testaxis2_log_ops_write);
+    SUITE_ADD_TEST(suite, Testaxis2_hash_ops_get);
+    return suite;
+}
+</pre>
+<h4>Step2: Adding the Module test suite to the Main Unit Test Suite</h4>
+<p>Now you need to add the Util module test suite to the main test
+suite.</p>
+<pre class="code">
+#include &lt;CuTest.h&gt;
+#include "../../util/test/util_test.h"
+#include "../../common/test/common_test.h"
+
+void RunAllTests(void)
+{
+    CuString *output = CuStringNew();
+    CuSuite* suite = CuSuiteNew();
+
+    CuSuiteAddSuite(suite, axis2_utilGetSuite());</span>
+    CuSuiteAddSuite(suite, axis2_commonGetSuite());
+    CuSuiteRun(suite);
+    CuSuiteSummary(suite, output);
+    CuSuiteDetails(suite, output);
+    printf("%s\n", output-&gt;buffer);
+}
+
+int main(void)
+{   
+    RunAllTests();
+    return 0;
+}
+</pre>
+
+<p>You can either run only the unit tests written for the util module
+or run all the tests.</p>
+<h3>System Tests</h3>
+<p>For each module, system tests should be provided in
+modules/test/&lt;module folder&gt;. For each system test you need to
+add a
+new function and call it from the main method.</p>
+<p>Example:</p>
+<p>To test the OM module, you need to create a file named test_om.c
+under the
+directory modules/test/om. A sample test_om.c might look like as
+follows.</p>
+<pre class="code">
+#include &lt;axis2_stax_ombuilder.h&gt;
+#include &lt;axis2_om_document.h&gt;
+#include &lt;axis2_om_node.h&gt;
+#include &lt;axis2_om_element.h&gt;
+#include &lt;axis2_om_text.h&gt;
+#include &lt;apr.h&gt;
+
+int test_om_build()
+{
+    READER *red = NULL;
+    XML_PullParser *parser = NULL;
+    axis2_om_element_t *ele1=NULL,*ele2=NULL,*ele3 = NULL,*ele4 = NULL;
+    axis2_stax_om_builder_t *builder = NULL;axis2_om_document_t *document = NULL;
+    axis2_om_node_t *node1 = NULL ,*node2 = NULL ,*node3 = NULL;
+    ...
+}
+
+int main(void)
+{
+    test_om_build();
+    test_om_serialize();
+}
+</pre>
+</body>
+</html>

Added: webservices/axis2/trunk/c/xdocs/M0_5/images/OM005.gif
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/images/OM005.gif?rev=384330&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/c/xdocs/M0_5/images/OM005.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/c/xdocs/M0_5/images/archi006.jpg
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/images/archi006.jpg?rev=384330&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/c/xdocs/M0_5/images/archi006.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/c/xdocs/M0_5/images/arrow_left.gif
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/images/arrow_left.gif?rev=384330&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/c/xdocs/M0_5/images/arrow_left.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/c/xdocs/M0_5/images/arrow_right.gif
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/images/arrow_right.gif?rev=384330&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/c/xdocs/M0_5/images/arrow_right.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/c/xdocs/M0_5/images/binary_folder_structure.jpg
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/images/binary_folder_structure.jpg?rev=384330&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/c/xdocs/M0_5/images/binary_folder_structure.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/c/xdocs/M0_5/images/folder_structure.jpg
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/images/folder_structure.jpg?rev=384330&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/c/xdocs/M0_5/images/folder_structure.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/c/xdocs/M0_5/images/folder_structure_libxml2.jpg
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/images/folder_structure_libxml2.jpg?rev=384330&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/c/xdocs/M0_5/images/folder_structure_libxml2.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/c/xdocs/M0_5/index.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/index.html?rev=384330&view=auto
==============================================================================
--- webservices/axis2/trunk/c/xdocs/M0_5/index.html (added)
+++ webservices/axis2/trunk/c/xdocs/M0_5/index.html Wed Mar  8 13:14:03 2006
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+       "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+  <title>Axis2/C M0.5 Documentation</title>
+  <meta name="generator" content="amaya 9.2.1, see http://www.w3.org/Amaya/"
+  />
+</head>
+
+<body>
+<h1>Axis2/C Milestone 0.5 Release Documentation</h1>
+
+<h2>Getting Started</h2>
+<ul>
+  <li><a href="installationguide.html">Installation Guide</a></li>
+  <li><a href="developerguide.html">Developer Guide</a></li>
+  <li><a href="userguide.html">User Guide</a></li>
+</ul>
+<!--<h2>Tools References<h2>-->
+
+<h2>Additional References</h2>
+<ul>
+  <li><a href="http://ws.apache.org/axis2/0_93/Axis2ArchitectureGuide.html">
+Architecture Guide</a></li>
+  <li><a href="architecture_notes.html">C Specific Architecture Notes</a></li>
+  <li><a href="om_tutorial.html">OM Tutorial</a></li>
+  <li><a href="../coding_conventions.html">Coding Conventions in Axis2/C</a></li>
+</ul>
+<!--<h2>Other Tutorials</h2>-->
+<!--articles-->
+</body>
+</html>

Added: webservices/axis2/trunk/c/xdocs/M0_5/installationguide.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/installationguide.html?rev=384330&view=auto
==============================================================================
--- webservices/axis2/trunk/c/xdocs/M0_5/installationguide.html (added)
+++ webservices/axis2/trunk/c/xdocs/M0_5/installationguide.html Wed Mar  8 13:14:03 2006
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+       "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+  <title>Axis2-C Installation Guide</title>
+  <meta name="generator" content="amaya 9.2.1, see http://www.w3.org/Amaya/"
+  />
+</head>
+
+<body xml:lang="en">
+<h1>Axis2/C Installation Guide</h1>
+
+<h4>-Milestone Release 0.5</h4>
+
+<p>This document will give you in step by step instructions on how to install
+Axis2/C, run the server &amp; web service client samples on Linux &amp; MS
+Windows operating systems.</p>
+
+<p>This release comes in two forms, source and binary. Instructions are given
+below to install in both methods.</p>
+
+<p>Hope you would enjoy this first working version of Axis2/C SOAP engine.</p>
+
+<p>Send your feedback to mailing list: <a
+href="mailto:axis-c-dev@ws.apache.org">axis-c-dev@ws.apache.org</a> (Prefix
+the subject with [Axis2]). To subscribe to developer mailing lists
+see <a href="../mail-lists.html">here</a></p>
+
+<h2>Contents</h2>
+<ul>
+  <li><a href="#linux">Installing and running on Linux</a>
+    <ul>
+      <li><a href="#linux_binary">Using binary release</a></li>
+      <li><a href="#linux_source">Using source release</a></li>
+    </ul>
+  </li>
+  <li><a href="#win">Installing and running on MS Windows (win32)</a>
+    <ul>
+      <li><a href="#win_binary">Using the binary release</a>
+        <ul>
+          <li><a href="#bin_req">Requirements</a></li>
+          <li><a href="#bin_binaries">Binaries in the release</a></li>
+          <li><a href="#bin_run">Running the binaries</a></li>
+        </ul>
+      </li>
+      <li><a href="#win_source">Using the source release</a>
+        <ul>
+          <li><a href="#src_req">Requirements</a></li>
+          <li><a href="#edit">Editing Configure.in file</a></li>
+          <li><a href="#src_compile">Compiling the source</a></li>
+          <li><a href="#src_run">Running the binaries</a></li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+</ul>
+<a name="linux"></a>
+<h2>Installing and running on Linux</h2>
+
+<p>This can be done using binary or source distributions</p>
+
+<p>To get both the binary and source distributions, you need libxml2 from <a
+href="http://xmlsoft.org/downloads.html" target="_blank">here</a>.</p>
+
+<p>(NOTE: most Linux systems has libxml2 by default.)</p>
+<a name="linux_binary"></a>
+<h3>1. Using binary release</h3>
+
+<p>The following steps need to be taken to install and run Axis2/C using
+binary distribution on Linux</p>
+
+<h4>1. Extract the binary tar package to a folder.</h4>
+<ul>
+  <li>Set AXIS2C_HOME environment variable pointing to the location where you
+    have extracted Axis2C</li>
+  <li>AXIS2C_HOME='/your_path_to_axis2c'</li>
+  <li>export AXIS2C_HOME</li>
+</ul>
+
+<h4>2. Run the simple axis server:</h4>
+<ul>
+  <li>To start the simple axis server on port 9090, run the following command
+    lines.
+    <ul>
+      <li>cd /your_path_to_axis2c/bin</li>
+      <li>./axis2_http_server</li>
+    </ul>
+  </li>
+  <li>To see the possible command line options run ./axis2_http_server -h</li>
+  <li>NOTE: If you run into shared lib problems,
+    <ul>
+      <li>set the LD_LIBRARY_PATH</li>
+      <li>export
+      LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your_path_to_axis2c/lib</li>
+    </ul>
+  </li>
+</ul>
+
+<h4>3. Run the sample clients in a new shell</h4>
+<ul>
+  <li>cd /your_path_to_axis2c/bin/samples</li>
+  <li>./echo will invoke the echo service.</li>
+  <li>./math will invoke the math service.</li>
+  <li>To see the possible command line options for sample clients run them
+    with '-h' option</li>
+  <li>NOTE: If you run into shared lib problems,
+    <ul>
+      <li>set the LD_LIBRARY_PATH</li>
+      <li>export
+      LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your_path_to_axis2c/lib</li>
+    </ul>
+  </li>
+</ul>
+<a name="linux_source"></a>
+<h3>2. Using source release</h3>
+
+<p>The following steps need to be taken to install and run Axis2/C using
+source distribution on Linux</p>
+<ol>
+  <li>Extract the source tar package to a folder.</li>
+  <li>Set AXIS2C_HOME environment variable pointing to the location where you
+    want to install Axis2C.
+    <ul>
+      <li>AXIS2C_HOME='/your_desired_path_to_axis2c_installation'</li>
+      <li>export AXIS2C_HOME</li>
+    </ul>
+  </li>
+  <li>Then go to the folder where you extracted the source
+    <ul>
+      <li>cd /your_path_to_axis2c_source</li>
+    </ul>
+  </li>
+  <li>Set parser location
+    <ul>
+      <li>You need to set the following two environment variables to point to
+        libxml2.
+        <ul>
+          <li>LIBXML2_INCLUDE</li>
+          <li>LIBXML2_LIB</li>
+        </ul>
+      </li>
+      <li>If you are using the default installation of libxml2, usually those
+        are,
+        <ul>
+          <li>LIBXML2_LIB=/usr/lib</li>
+          <li>LIBXML2_INCLUDE=/usr/include/libxml2</li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+  <li>Build the source
+    <ul>
+      <li>This can be done using the following command sequence:
+        <ul>
+          <li>./configure</li>
+          <li>make</li>
+          <li>make install</li>
+        </ul>
+      </li>
+      <li>use './configure --help' for possible command line options.</li>
+      <li>NOTE: you may wish to use './configure --prefix=$AXIS2C_HOME' to
+        ensure AXIS2C_HOME and install folder are the same</li>
+      <li>If you need to get the samples working, you also need to give the
+        configure option --enable-samples=yes</li>
+    </ul>
+  </li>
+  <li>Go to AXIS2C_HOME by running cd $AXIS2C_HOME</li>
+  <li>Start simple axis server
+    <ul>
+      <li>To start the simple axis server on port 9090 run the following
+        command lines
+        <ul>
+          <li>cd $AXIS2C_HOME/bin</li>
+          <li>./axis2_http_server</li>
+        </ul>
+      </li>
+      <li>To see the possible command line options run ./axis2_http_server
+      -h</li>
+    </ul>
+  </li>
+  <li>Run the sample clients in a new shell using the following command lines
+    <ul>
+      <li>cd $AXIS2C_HOME/bin/samples</li>
+      <li>./echo will invoke the echo service.</li>
+      <li>./math will invoke the math service.</li>
+      <li>To see the possible command line options for sample clients run
+        them with '-h' option</li>
+    </ul>
+  </li>
+</ol>
+<a name="win"></a>
+<h2>Installing and running on MS Windows (win32)</h2>
+
+<p>This too can be done using binary or source distributions</p>
+
+<p>To get both the binary and source distribution, you need libxml2 from <a
+href="http://xmlsoft.org/downloads.html">here</a>.</p>
+
+<p>(NOTE: most Linux systems has libxml2 by default. On Windows you need to
+download and install libxml2)</p>
+<a name="win_binary"></a>
+<h3>1. Using binary release</h3>
+<a name="bin_req"></a>
+<h4>Requirements</h4>
+<ul>
+  <li>The binaries shipped with this version is compiled with Microsoft
+    visual studio compiler (cl)</li>
+
+  <p>(Note: you can download microsoft VSExpress2005 edition from microsoft
+  web site and install it to run these binaries)</p>
+  <li>You also need the following dlls
+    <ul>
+      <li>libxml2.dll [http://www.xmlsoft.org - download the version &gt;=
+        libxml2-2.6.20.win32]</li>
+      <li>iconv.dll [http://www.xmlsoft.org - download the version &gt;=
+        iconv-1.9.1.win32]</li>
+      <li>zlib1.dll [http://www.xmlsoft.org - download the version &gt;=
+        zlib-1.2.3.win32]</li>
+    </ul>
+  </li>
+</ul>
+<a name="bin_binaries"></a>
+<h4>Binaries in the release</h4>
+<ul>
+  <li>Extract the binary distribution to a folder of your choice. (example:
+    C:\axis2c)</li>
+  <li>The C:\axis2c folder structure is as follows:</li>
+
+  <p><img alt="Figure: c:\axis2c Folder Structure"
+  src="images/binary_folder_structure.jpg" /></p>
+
+  <p><em>The above folders contain the following files:</em></p>
+  <ul>
+    <li>bin - server and other executables</li>
+    <li>samples - samples go here</li>
+    <li>lib - library modules</li>
+    <li>services - deployed services</li>
+    <li>modules - deployed modules</li>
+    <li>include - all include files of axis2</li>
+    <li>logs - system and client logs are written to this folder</li>
+  </ul>
+  <li>Copy libxml2.dll, iconv.dll and zlib1.dll downloaded to
+  C:\axis2c\lib</li>
+</ul>
+<a name="bin_run"></a>
+<h4>Running the binaries</h4>
+<ul>
+  <li>First you need to set couple of environment variables before you can
+    run the server and samples.
+    <ul>
+      <li>Set the varibale AXIS2C_HOME to the deploy folder (C:\axis2c)</li>
+      <li>Add the path to lib directory to PATH variable
+      (%AXIS2C_HOME%\lib)</li>
+    </ul>
+  </li>
+  <li>Now everything is set to run the server
+    C:\axis2c\bin&gt;axis2_http_server.exe</li>
+  <li>If the server is running successfully you should see the message
+    "Started Simple Axis2 HTTP Server..."</li>
+  <li>The log is by default created under %AXIS2C_HOME%\logs folder with the
+    name axis2.log.</li>
+  <li>(Note: you may provide command line options to change the default
+    behaviour. Type "axis2_http_server.exe -h" to learn about the usage)</li>
+  <li>Now you can run any sample client deployed under
+    %AXIS2C_HOME%\bin\samples\
+    <ul>
+      <li>Example: C:\axis2c\bin\samples&gt;echo.exe</li>
+    </ul>
+  </li>
+</ul>
+<a name="win_source"></a>
+<h3>2. Using the source release.</h3>
+<a name="src_req"></a>
+<h4>Requirements</h4>
+<ul>
+  <li>The makefile shipped with this version needs Microsoft visual studio
+    compiler (cl) and nmake build tool</li>
+
+  <p>(Note: you can download microsoft VSExpress2005 edition and Platform SDK
+  from microsoft web site. You will need to add the path to Platform SDK
+  Include and Lib folders to makefile)</p>
+  <li>You also need
+    <ul>
+      <li>libxml2 [http://www.xmlsoft.org - download the version &gt;=
+        libxml2-2.6.20.win32]</li>
+      <li>iconv [http://www.xmlsoft.org - download the version &gt;=
+        iconv-1.9.1.win32]</li>
+      <li>zlib [http://www.xmlsoft.org - download the version &gt;=
+        zlib-1.2.3.win32]</li>
+    </ul>
+  </li>
+</ul>
+<a name="edit"></a>
+<h4>Editing configure.in file</h4>
+<ul>
+  <li>The default places for libxml2 and iconv are speceficed in configure.in.
+    <ul>
+      <li>Example:Default location for libxml2 is C:\libxml2</li>
+    </ul>
+  </li>
+  <li>You can either extract libxml2 to this folder, in which case folder
+    structure for C:\libxml2 should look like the following.</li>
+
+  <p><img alt="Figure: C:\libxml2 Folder Structure"
+  src="images/folder_structure_libxml2.jpg" /></p>
+
+  <p>Or extract to whatever place of your choice and edit the configure.in
+  accordingly.</p>
+  <li>You need to have zlib1.dll in a library path. You may copy this dll to
+    libxml2/lib.</li>
+</ul>
+<a name="src_compile"></a>
+<h4>Compiling the source.</h4>
+
+<p>The following steps and command lines will take you through the source
+compilation</p>
+<ul>
+  <li>Extract the source distribution to a folder of your choice. (Example:
+    C:\axis2c)</li>
+  <li>Open a DOS shell</li>
+  <li>cd C:\axis2c\build\win32</li>
+  <li>C:\axis2c\build\win32&gt;vcvars32.bat to access .Net tools
+    <p>(Note: You may need to set the environment PATH variable to
+    vcvars32.bat if windows complaints that it cannot find this bat)</p>
+  </li>
+  <li>C:\axis2c\build\win32&gt;nmake install will build the system and create
+    a directory named deploy under build directory.</li>
+  <li>The deploy folder structure is as follows:</li>
+
+  <p><img alt="Figure: deploy Folder Structure"
+  src="images/folder_structure.jpg" /></p>
+
+  <p><em>The above folders contain the following files:</em></p>
+  <ul>
+    <li>bin - server and other executables</li>
+    <li>samples - samples</li>
+    <li>lib - library modules</li>
+    <li>services - deployed services</li>
+    <li>modules - deployed modules</li>
+    <li>include - all include files of axis2</li>
+    <li>logs - system and client logs are written to this folder</li>
+  </ul>
+</ul>
+<a name="src_run"></a>
+<h4>Running the binaries</h4>
+<ul>
+  <li>You need to set couple of environment variables before you can run the
+    server and samples.
+    <ul>
+      <li>Set the variable AXIS2C_HOME to the deploy folder
+        (C:\axis2c\build\deploy)</li>
+      <li>Add the path to lib directory to PATH variable
+      (%AXIS2C_HOME%\lib)</li>
+      <li>Copy libxml2.dll, iconv.dll and zlib1.dll to axis2c lib folder
+        (%AXIS2C_HOME%\lib)</li>
+    </ul>
+  </li>
+  <li>Now run the server -
+  C:\axis2c\build\deploy\bin&gt;axis2_http_server.exe</li>
+  <li>If server is running successfully you should see the message "Started
+    Simple Axis2 HTTP Server..."</li>
+  <li>The log is by default created under %AXIS2C_HOME%\logs folder with the
+    name axis2.log.</li>
+  <li>(Note: you may provide command line options to change the default
+    behaviour. Type "axis2_http_server.exe -h" to learn about the usage)</li>
+  <li>Now you can run any sample client deployed under
+    %AXIS2C_HOME%\bin\samples\
+    <ul>
+      <li>Example: C:\axis2c\build\deploy\bin\samples&gt;echo.exe</li>
+    </ul>
+  </li>
+</ul>
+</body>
+</html>

Added: webservices/axis2/trunk/c/xdocs/M0_5/om_tutorial.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/om_tutorial.html?rev=384330&view=auto
==============================================================================
--- webservices/axis2/trunk/c/xdocs/M0_5/om_tutorial.html (added)
+++ webservices/axis2/trunk/c/xdocs/M0_5/om_tutorial.html Wed Mar  8 13:14:03 2006
@@ -0,0 +1,553 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+  <title>Axis2/C OM Tutorial</title>
+  <meta name="generator" content="amaya 9.2.1, see http://www.w3.org/Amaya/"
+  />
+</head>
+<body>
+<h1>Axis2/C OM Tutorial</h1>
+<h2>Content</h2>
+<ul>
+<li> <a href="#Introduction"> Introduction </a></li>
+     <ul>
+     <li> <a href="#What_is_OM"> What is OM </a></li>   
+     <li> <a href="#For_Whom_is_This_Tutorial"> For Whom is This Tutorial </a> </li>
+     <li> <a href="#What_is_Pull_Parsing"> What is Pull Parsing </a> </li>      
+     <li> <a href="#Features_of_OM"> Features of OM</a> </li>
+     <li> <a href="#Where_Does_SOAP_Come_into_Play?"> Where Does SOAP Come into Play? </a> </li>
+     </ul>
+<li> <a href="#Working_with_OM"> Working with OM </a> </li>
+     <ul>
+     <li> <a href="#Creation"> Creation </a> </li>
+     <li> <a href="#Addition_and_Detaching_of_Nodes"> Addition and Detaching of Nodes </a> </li>
+     <li> <a href="#Traversing"> Traversing </a> </li>
+     </ul>
+ </ul>
+
+
+<a name="Introduction"> </a><h2>Introduction</h2>
+
+<a name="What_is_OM"> </a><h3>What is OM?</h3>
+
+<p>OM stands for Object Model (a.k.a AXIOM - AXis Object Model) and
+refers to the XML infoset model that is developed for Axis 2. XML infoset
+refers to the information included inside the XML. For programmatical
+manipulation it is convenient to have a representation of this XML infoset in
+a language specific manner. DOM and JDOM are two such XML models. OM is
+conceptually similar to such an XML model by its external behavior but deep
+down it is very much different.</p>
+
+<p>The objective of this tutorial is to introduce the basics of OM C and
+explain best practices while using OM.</p>
+
+<p>AXIOM C is a C implementation of AXIOM java. We have tried to get almost
+the same kind of API in C.</p>
+
+<a name="For_Whom_is_This_Tutorial"> </a><h3>For whom is this Tutorial?</h3>
+
+<p>This tutorial can be used by anybody who is interested and wants to go deeper in to OM C.
+Knowledge in similar object models such as DOM will be quite
+helpful in understanding OM but such knowledge is not assumed. Several links
+are listed in the appendix/ links section that will help understand the
+basics of XML.</p>
+
+<a name="What_is_Pull_Parsing"> </a><h3>What is Pull Parsing ?</h3>
+Pull parsing is a new trend in XML processing. The previously popular XML
+processing frameworks such as SAX and DOM were "push-based" which means the
+control of the parsing was with the parser itself. This approach is fine and
+easy to use but it is not efficient in handling large XML documents since a
+complete memory model will be generated in the memory. Pull parsing inverts
+the control and hence the parser only proceeds at the users command. The user
+can decide to store or discard events generated from the parser. OM is based
+on pull parsing. To learn more about XML pull parsing see the <a
+href="http://www.bearcave.com/software/java/xml/xmlpull.html" target="_blank">XML pull
+parsing introduction</a>.
+
+<a name="Features_of_OM"> </a><h3>Features of OM</h3>
+
+<p>OM is a lightweight, differed built XML info set representation based on
+StAX API derived form (<a
+href="http://www.jcp.org/aboutJava/communityprocess/first/jsr173/" target="_blank">JSR
+173</a>), which is the standard streaming pull parser API. OM can be
+manipulated as flexibly as any other object model (Such as <a
+href="http://www.jdom.org/" target="_blank">JDOM</a>), but underneath the objects will be
+created only when they are absolutely required. This leads to much less
+memory intensive programming. Following is a short feature overview of OM.</p>
+<ul>
+  <li>Lightweight: OM is specifically targeted to be lightweight. This is
+    achieved by reducing the depth of the hierarchy, number of methods and
+    the attributes enclosed in the objects. This makes the objects less
+    memory intensive.</li>
+  <li>Differed building: By far this is the most important feature of OM. The
+    objects are not made unless a need arises for them. This passes the
+    control of building over to the object model itself rather than an
+    external builder.</li>
+  <li>Pull based: For a differed building mechanism a pull based parser is
+    required. OM is based on StAX, the standard pull parser API.
+    <p>Since different XML parsers offer different kinds of pull parser APIs
+    we define an API derived from StAX. That API is defined in
+    axis2_xml_reader.h , similarly we define an xml writer api in
+    axis2_xml_writer.h. These two APIs work as an abstarction layer between
+    any XML parser and OM. So any parser that is going to be used for OM should
+    implement the axis2_xml_reader API and axis2_xml_writer API using a
+    wrapper layer.</p>
+    <p>Currenly we use Libxml2 as our default XML parser.</p>
+  </li>
+</ul>
+<!-- Special section -->
+<!--age -->
+
+<p align="center" class="img"><img alt="" src="images/archi006.jpg"
+class="img" width="490" height="282"></p>
+<!--  End of Image -->
+
+<p>OM Builder wraps the raw xml character stream through the axis2_xml_reader
+API. Hence the complexities of the pull event stream is covered</p>
+
+<a name="Where_Does_SOAP_Come_into_Play?"> </a><h3>Where Does SOAP Come into Play?</h3>
+
+<p>In a nutshell SOAP is a information exchange protocol based on XML. SOAP
+has a defined set of XML elements that should be used in messages. Since Axis
+is a "SOAP Engine" and OM is built for Axis, A SOAP specific API was
+implemented on top of OM.We have defined a number of structs to represent SOAP
+constructs like Envelope etc.. These structs wraps general OM structures. See
+<a href="http://www.w3schools.com/SOAP/soap_intro.asp" target="_blank"> here </a> to learn
+more about SOAP.</p>
+<!--<p>This abstraction provides</p>
+<ul>
+<li>differed building support</li>
+<li>Caching</li>
+</ul>
+<p>AXIOM has the flexibility to plug in any builder which implements the given builders interface.  The upcoming sections of this tutorial deal with the creation and usage of OM for manipulating SOAP (and to some extent nonSOAP) based XML documents.</p>
+-->
+
+<a name="Working_with_OM"> </a><h2>Working with OM</h2>
+
+<a name="Creation"> </a><h3>Creation</h3>
+
+<p>Creation is the first and foremost action when using an Object
+representation. This part explains how OM can be built from either an existing
+document or programmatically. OM provides a notion of a builder to
+create objects. Since OM is tightly bound to StAX, a StAX compliant reader
+should be created first with the desired input stream. </p>
+
+<p>In our OM implementation we define a struct 'axis2_om_node_t' which acts as
+the container of the other structs and it maintains the links that form the
+Link List OM in C.</p>
+
+<p>So to traverse the structure the functions defined in axis2_om_node.h must
+be used. To access xml information, the 'data element' struct stored in
+axis2_om_node_t must be obtained using the AXIS2_OM_NODE_GET_DATA_ELEMENT
+macro. The type of the struct stored in the 'axis2_om_node_t' struct can be
+obtained by AXIS2_OM_NODE_GET_NODE_TYPE macro. When we create
+axis2_om_element_t , axis2_om_text_t etc .., it is required to parse a double
+pointer to the node struct as the last parameter of the create function so
+that the correponding node struct can be referenced using that pointer.</p>
+
+<p>Ex.</p>
+
+<p>axis2_om_node_t *my_node = NULL;</p>
+
+<p>axis2_om_element_t *my_ele = NULL;</p>
+
+<p>my_ele = axis2_om_element_create(env, NULL, "MY_ELEMENT", NULL,
+&amp;my_node);</p>
+
+<p>Now if we call AXIS2_OM_NODE_GET_NODE_TYPE macro on 'my_node' pointer we
+will get the value as AXIS2_OM_ELEMENT .</p>
+
+<div align="left">
+<p><b>Code Listing 1</b></p>
+</div>
+<source><pre>axis2_xml_reader_t *xml_reader = NULL;
+axis2_om_stax_builder_t *om_builder = NULL;
+axis2_soap_builder_t *soap_builder = NULL;
+axis2_soap_envelope_t *soap_envelope = NULL;
+
+
+/** create the parser */<br>
+axis2_xml_reader_t *xml_reader = axis2_xml_reader_create_for_file(env, "test_soap.xml",NULL);
+
+/** create the OM builder */
+
+om_builder = axis2_om_stax_builder_create(env, xml_reader);
+
+/** create SOAP builder */
+
+soap_builder = axis2_soap_builder_create(env, om_builder , AXIS2_SOAP_ENVELOPE_NAMESPACE_URI);
+
+/** get soap envelope */
+soap_envelope = AXIS2_SOAP_BUILDER_GET_SOAP_ENVELOPE(soap_builder, env);</pre>
+</source>
+
+<br>
+<p>
+As the example shows, creating an OM from xml_reader is pretty
+straight forward. However elements and nodes can be created programmatically
+to modify the structure as well. Currently OM has two builders, namely the
+axis2_om_stax_builder_t and the axis2_soap_builder_t. These builders provide
+the necessary information to the XML info set model to build itself. </p>
+
+<div align="left">
+<p><b>Code Listing 2</b></p>
+</div>
+
+<p class="img-title"><b></b></p>
+<pre class="code">axis2_om_namespace_t *ns1 = NULL;
+axis2_om_namespace_t *ns2 = NULL;
+
+axis2_om_element_t* root_ele = NULL;
+axis2_om_node_t*    root_ele_node = NULL;
+
+axis2_om_element_t *ele1      = NULL;
+axis2_om_node_t *ele1_node = NULL;
+
+ns1 = axis2_om_namespace_create(env, "bar", "x");
+ns2 = axis2_om_namespace_create(env, "bar1", "y");
+
+
+root_ele = axis2_om_element_create(env, NULL, "root", ns1, &amp;root_ele_node);
+ele1_node     = axis2_om_element_create(env, root_node, "foo1", ns2, &amp;ele1_node);</pre>
+
+<p>Several differences exist between a programmatically created
+axis2_om_node_t and a conventionally built axis2_om_node_t. The most
+important difference is that the latter will have a pointer to its builder,
+where as the former does not have that information. As stated earlier in
+this tutorial, since the OM is built as and when required, each and every
+axis2_om_node_t struct should have a reference to its builder. If this
+information is not available, it is due to the struct being created without a
+builder.</p>
+
+<p></p>
+
+<p>The SOAP struct hierarchy is made in the most natural way for a
+programmer. It acts as a wrapper layer on top of OM implementation. The SOAP
+structs wraps the correspoding om_node_t structs to store information in xml.</p>
+<!--  The following illustration of the actual class diagram will be helpful in understanding this.
+Need an image here -->
+
+<a name="Addition_and_Detaching_of_Nodes"> </a><h3>Addition and Detaching of Nodes</h3>
+
+<p>Addition and removal methods are defined in the axis2_om_node.h header.
+The following are the most important in adding nodes.</p>
+
+<div align="left">
+<p><b>Code Listing 3</b></p>
+</div>
+
+<p>Add child operation</p>
+
+<pre class="code">axis2_status_t
+axis2_om_node_add_child( axis2_om_node_t *om_node,
+axis2_env_t **env, axis2_om_node_t *child_node);
+</pre>
+
+<p>Detach operation</p>
+
+<pre class="code">axis2_om_node_t*
+axis2_om_node_detach (axis2_om_node_t *om_node,
+axis2_env_t **env);</pre>
+
+<p>The detach operation resets the links and remove a node from om
+structure.</p>
+
+<p></p>
+
+<p>This code segment shows how the addition takes place. Note that it is
+related to the code segment shown in the creation section.</p>
+
+<div align="left">
+<p><b>Code Listing 4</b></p>
+</div>
+<pre class="code">axis2_om_node_t *foo_node = NULL;
+axis2_om_element_t *foo_ele = NULL;
+axis2_om_node_t *bar_node = NULL;
+axis2_om_element_t *bar_ele = NULL;
+
+foo_ele = axis2_om_element_create(env, NULL, "FOO", NULL, &amp;foo_node);
+bar_ele = axis2_om_element_create(env, NULL, "BAR", NULL. &amp;bar_node); </pre>
+
+<p> Now if we want to make 'BAR' element, a child of 'FOO' element we can use add_child MACRO. </p>
+
+<pre class="code"> AXIS2_OM_NODE_ADD_CHILD(foo_node, env, bar_node); </pre>
+
+<p> Or we can parse the foo_node as the parent node at the time of creating to bar_ele as follows. </p>
+
+<pre class"code"> bar_ele = axis2_om_element_create(env, foo_node, "BAR", NULL, &amp;bar_node);</pre>
+<ul>
+  <li>add_child function will always add the child as the first child of the
+    parent.</li>
+  <li><p>A given node can be removed from the tree by calling the detach()
+    method. A node can also be removed from the tree by calling the remove
+    method of the returned iterator which will also call the detach method of
+    the particular node internally.</p>
+  </li>
+  <li>Namespaces are a tricky part of any XML object model and is the same in
+    OM. However the interface to the namespace have been made very simple.
+    axis2_om_namespace_t * is the struct that represents a namespace and we
+    do not have setter functions. This makes the axis2_om_namespace
+  immutable.</li>
+</ul>
+
+<p>Following are the important methods available in axis2_om_element to
+handle namespaces.</p>
+
+<div align="left">
+<p><b>Code Listing 5</b></p>
+</div>
+<pre class="code">axis2_om_namespace_t* axis2_om_element_declare_namespace(axis2_om_element_t *om_ele, 
+axis2_env_t **env, axis2_om_node_t *om_node, axis2_om_namespace_t *om_ns);
+
+axis2_om_namespace_t* axis2_om_element_find_namespace(axis2_om_element_t *om_ele,
+axis2_env_t **env, axis2_om_node_t *om_node, axis2_char_t *uri, axis2_char_t *prefix);</pre>
+
+<p>The declare_namespace function is straight forward. It adds a namespace to
+namespace declarations section. Note that a namespace declaration that has
+already been added will not be added twice. find_namespace is a very handy
+method to locate a namespace higher up the tree. It searches for a matching
+namespace in its own declarations section and jumps to the parent if it's not
+found. The search progresses up the tree until a matching namespace is found
+or the root has been reached.</p>
+
+<p>The following simple code segment shows how the namespaces are dealt with
+in OM</p>
+
+<div align="left">
+<p><b>Code Listing 6</b></p>
+</div>
+<pre class="code">
+axis2_om_namespace_t *ns1 = NULL;
+axis2_om_namespace_t *ns2 = NULL;
+axis2_om_namespace_t *ns3 = NULL;
+
+axis2_om_node_t *root_node = NULL;
+axis2_om_element_t *root_ele = NULL;
+
+axis2_om_node_t *ele1_node = NULL;
+axis2_om_element_t *ele1   = NULL;
+
+axis2_om_node_t *text_node = NULL;
+axis2_om_text_t *om_text   = NULL;
+
+ns1 = axis2_om_namespace_create(env, "bar", "x");
+ns2 = axis2_om_namespace_create(env, "bar1", "y");
+
+root_ele = axis2_om_element_create(env, NULL , "root", ns1, &amp;root_node);
+ele1     = axis2_om_element_create(env, root_node, "foo", ns2, &amp;ele1_node);
+om_text  = axis2_om_text_create(env, ele1_node, "blah", &amp;text_node);
+</pre>
+
+<p>Serilization of the root element produces the following XML</p>
+<pre class="xml">
+&lt;x:root xmlns:x="bar"&gt;
+  &lt;y:foo xmlns:y="bar1"&gt;
+        blah
+  &lt;/y:foo&gt;
+&lt;/x:root&gt;</pre>
+
+<a name="Traversing"> </a><h3>Traversing</h3>
+
+<p>Traversing the OM structure can be done by obtaining an iterator struct. You can either 
+call the appropriate function on OM element or create the iterator
+manually. OM C offers three iterators to traverse the OM structure. They
+are</p>
+<ul>
+<li>axis2_om_children_iterator_t</li>
+<li>axis2_om_child_element_iterator_t</li>
+<li>axis2_om_children_qname_iterator_t</li>
+</ul>
+
+<p> The Iterator supports the 'OM way' of accessing elements and is more
+convenient than a list for sequential access. The following code sample shows
+how the children can be accessed. The children can be of type AXIS2_OM_TEXT
+or AXIS2_OM_ELEMENT.</p>
+
+<div align="left">
+<p><b>Code Listing 7</b></p>
+
+</div>
+<pre class="code">axis2_om_children_iterator_t *children_iter = NULL;
+children_iter = AXIS2_OM_ELEMENT_GET_CHILDREN(om_ele, env, om_node);
+if(NULL != children_iter )
+{
+    while(AXIS2_OM_CHILDREN_ITERATOR_HAS_NEXT(children_iter, env))
+    {
+        axis2_om_node_t *node = NULL;
+        node = AXIS2_OM_CHILDREN_ITERATOR_NEXT(children_iter, env);
+        if(NULL != node)
+        {
+           if(AXIS2_OM_NODE_GET_NODE_TYPE(node, env) == AXIS2_OM_ELEMENT)
+           {
+               /** any processing */
+           }
+        } 
+
+    }
+}
+</pre>
+
+<p>Apart from this, every axis2_om_node_t struct has links to its siblings.
+If more thorough navigation is needed the AXIS2_OM_NODE_GET_NEXT_SIBLING()
+and AXIS2_OM_NODE_GET_PREVIOUS_SIBLING() macros can be used. A more selective
+set can be chosen by using AXIS2_OM_ELEMENT_XXX_WITH_QNAME() methods. 
+The AXIS2_OM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME() method returns the
+first child that matches the given axis2_qname_t and
+AXIS2_OM_ELEMENT_GET_CHILDREN_WITH_QNAME() returns
+axis2_om_children_qname_iterator_t which can be used to travese all the
+matching children. The advantage of these iterators is that they won't build
+the whole object structure at once, until its required.</p>
+<!-- Special section -->
+
+<table width="100%">
+  <tbody>
+    <tr>
+      <td><img src="images/OM005.gif" alt="" width="35" height="57"></td>
+      <td class="special-td">All iterator implementations internally stay one
+        step ahead of their apparent location to provide the correct value
+        for the HAS_NEXT() function . This hidden advancement can build
+        elements that are not intended to be built at all.</td>
+      <td></td>
+    </tr>
+  </tbody>
+</table>
+<!-- End of special section -->
+
+<p>OM can be serialized using AXIS2_OM_NODE_SERIALIZE macro .The
+serialization uses a axis2_xml_writer.h API and it writes through
+axis2_om_output_t abstract output to write to the output.</p>
+
+<p>Here is an example that shows how to write the output to the console, with
+reference to the earlier code sample (Code listing 1 ) that created a SOAP
+envelope.</p>
+
+<div align="left">
+<p><b>Code Listing 8</b></p>
+</div>
+<pre class="code">axis2_xml_writer_t *xml_writer = NULL;
+axis2_om_output_t *om_output = NULL;
+axis2_char_t *buffer = NULL;
+
+..............
+
+xml_writer = axis2_xml_writer_create(env, NULL, 0, 0);
+om_output = axis2_om_output_create(env, xml_writer);
+
+AXIS2_SOAP_ENVELOPE_SERIALIZE(envelope, env, om_output);
+buffer = AXIS2_XML_WRITER_GET_XML(xml_writer, env);
+printf("%s ", buffer);
+
+</pre>
+<b>Complete code for the OM based document building and serialization </b>
+
+<p>The following code segment shows how to use the OM for completely building
+a document and then serializing it into text pushing the output to the
+console. </p>
+
+<div align="left">
+<p><b>Code Listing 9</b></p>
+</div>
+<pre class"code">
+test_om.c
+FILE *f = NULL;
+int read_input_callback(char *buffer, int size, void* ctx)
+{
+    return fread(buffer, sizeof(char), size, f);
+}
+
+int close_input_callback()
+{
+    return fclose(f);
+}
+
+axis2_env_t * create_environment()
+{
+    axis2_allocator_t *allocator = NULL;
+    axis2_env_t *env = NULL;
+    axis2_log_t *log = NULL;
+    axis2_error_t *error = NULL;
+    allocator = axis2_allocator_init(NULL);
+    log = axis2_log_create(allocator);
+    error = axis2_error_create(allocator);
+    env = axis2_env_create_with_error_log(allocator, log, error);
+    return env;
+}
+
+build_and_serialize_om(axis2_env_t **env)
+{
+    axis2_om_node_t *root_node = NULL:
+    axis2_om_element_t *root_ele = NULL;
+    axis2_om_document_t *document = NULL;
+    axis2_om_stax_builder_t *om_builder = NULL;
+    axis2_xml_reader_t *xml_reader = NULL;
+    axis2_xml_writer_t *xml_writer = NULL;
+    axis2_om_output_t *om_output = NULL;
+    axis2_char_t *buffer = NULL;
+    f = fopen("test.xml");
+    xml_reader = axis2_xml_reader_create_for_memory(env, read_input_callback,
+    close_input_callback, NULL, NULL);
+    if(!xml_reader)
+        return -1;
+    om_builder = axis2_om_stax_builder_create(env, xml_reader);
+    if(!om_builder)
+    {
+        AXIS2_XML_READER_FREE(xml_reader, env);
+        return AXIS2_FAILURE;
+    }
+
+    document = axis2_om_document_create(env, om_builder);
+    if(!document)
+    {
+        AXIS2_OM_STAX_BUILDER_FREE(om_builder, env);
+        return AXIS2_FAILURE;
+    }
+
+    root_node = AXIS2_OM_DOCUMENT_GET_ROOT_ELEMENT(document, env);
+    if(root_node)
+    {
+        if(AXIS2_OM_NODE_GET_NODE_TYPE(root_node, env) == AXIS2_OM_ELEMENT)
+        {
+            root_ele = (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT
+                                                            (root_node, env);
+
+            if(root_ele)
+            {
+                printf(" %s" , AXIS2_OM_ELEMENT_GET_DATA_ELEMENT(root_node, env));
+            }
+        }
+    }
+
+    AXIS2_OM_DOCUMENT_BUILD_ALL(document, env);
+
+    xml_writer = axis2_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0);
+    om_output = axis2_om_output_create(env, xml_writer);
+    AXIS2_OM_NODE_SERIALIZE(node1, env, om_output);
+    buffer = AXIS2_XML_WRITER_GET_XML(xml_writer, env);
+    printf(" %s ", buffer);
+
+    AXIS2_OM_OUTPUT_FREE(om_output, env);
+    AXIS2_OM_STAX_BUILDER_FREE(om_builder, env);
+    AXIS2_FREE((*env)-&gt;allocator, buffer);
+    return AXIS2_SUCCESS;
+}
+
+int main()
+{
+    int status = AXIS2_SUCCESS;
+    axis2_env_t *env = NULL;
+    axis2_allocator_t *allocator = NULL;
+    env = create_environment();
+    status = build_and_serialize_om(&amp;env);
+    if(status == AXIS2_FAILURE)
+    { 
+        printf(" build om failed");
+    }
+    axis2_env_free(env);
+    return 0;
+}
+</pre>
+</body>
+</html>

Added: webservices/axis2/trunk/c/xdocs/M0_5/userguide.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/userguide.html?rev=384330&view=auto
==============================================================================
--- webservices/axis2/trunk/c/xdocs/M0_5/userguide.html (added)
+++ webservices/axis2/trunk/c/xdocs/M0_5/userguide.html Wed Mar  8 13:14:03 2006
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+  <title>Axis2/C User's Guide</title>
+  <meta name="generator" content="amaya 9.2.1, see http://www.w3.org/Amaya/"
+  />
+</head>
+
+<body>
+<h1>Axis2/C User's Guide</h1>
+<h4>-Milestone Release 0.5</h4>
+<p align="right">Pages: <b>Content</b>, <a href="userguide1.html">1</a>, <a
+ href="userguide2.html">2</a>, <a href="userguide3.html">3</a></p>
+<h2>Content</h2>
+<ul>
+  <li>
+    <p><a href="userguide1.html#Introduction">Introduction</a></p>
+    <ul>
+      <li><a href="userguide1.html#Attention">Attention</a></li>
+      <li><a href="userguide1.html#What_is_Axis2_">What is Axis2/C?</a></li>
+    </ul>
+  </li>
+  <li>
+    <p><a href="userguide2.html#Web_Service_Clients_Using_Axis2">Web
+Service Clients Using Axis2/C</a></p>
+    <ul>
+      <li><a
+ href="userguide2.html#Writing_Web_Service_Clients_using_Axis2%27s_Primary_APIs">Writing
+Web Service Clients Using Axis2's Primary APIs</a></li>
+      <ul>
+        <li><a href="userguide2.html#EchoBlockingClient">EchoBlockingClient</a></li>
+        <li><a href="userguide2.html#Request_SOAP_Message">Request SOAP
+Message</a></li>
+        <li><a href="userguide2.html#Response_SOAP_Message">Response
+SOAP Message</a></li>
+      </ul>
+    </ul>
+  </li>
+  <li>
+    <p><a href="userguide3.html#Web_Services_Using_Axis2">Web Services
+Using Axis2/C</a></p>
+    <ul>
+      <li><a href="userguide3.html#Conventions">Conventions used in the
+document</a></li>
+      <li><a href="userguide3.html#Writing_Web_Services_Using%20Axis2_C">Writing
+Web Services Using Axis2/C</a>
+        <ul>
+          <li><a href="userguide3.html#Creating_Web_Service__MyService_">Creating
+Web Service (Echo service)</a></li>
+          <li><a href="userguide3.html#How_to_write_the_Web_Service_">How
+to write the Web Service?</a>
+            <ul>
+              <li><a href="userguide3.html#Step1">Step1 :Write the
+echo_skeleton.c file implementing the axis2_svc_skeleton.h</a></li>
+              <li><a href="userguide3.html#Step2">Step2 : Now we can
+write the echo service in a file echo.c</a></li>
+              <li><a href="userguide3.html#Step3">Step3 :Write the
+services.xml file</a></li>
+              <li><a href="userguide3.html#Step4">Step4 :Create the
+WebService Folder in services folder.</a></li>
+            </ul>
+          </li>
+        </ul>
+      </li>
+      <li><a href="userguide3.html#deploy">Deploy the Web Service</a></li>
+    </ul>
+  </li>
+</ul>
+<p align="right"><a href="userguide1.html">Next Page <img
+ src="images/arrow_right.gif"></a></p>
+<p>Pages: <b>Content</b>, <a href="userguide1.html">1</a>, <a
+ href="userguide2.html">2</a>, <a href="userguide3.html">3</a></p>
+</body>
+</html>

Added: webservices/axis2/trunk/c/xdocs/M0_5/userguide1.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/xdocs/M0_5/userguide1.html?rev=384330&view=auto
==============================================================================
--- webservices/axis2/trunk/c/xdocs/M0_5/userguide1.html (added)
+++ webservices/axis2/trunk/c/xdocs/M0_5/userguide1.html Wed Mar  8 13:14:03 2006
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <meta http-equiv="content-type" content="">
+  <title>Axis2/C User's Guide</title>
+</head>
+<body dir="ltr" lang="en-US">
+<h3><a name="Axis2_User's_Guide">Axis2/C User's Guide</a></h3>
+<h4>-Milestone Release 0.5</h4>
+<p align="right">Pages: <a href="userguide.html">Content</a>, <b>1</b>,
+<a href="userguide2.html">2</a>, <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>
+(Prefix
+the subject with [Axis2]). To subscribe to mailing list see <a
+ href="../mail-lists.html">here.</a></p>
+<h2><a name="Introduction">Introduction</a></h2>
+<p>Welcome to Axis2/C, the next generation of Apache Axis implemented
+in C!!!
+This User's Guide will help you to understand what Axis2/C has to offer
+and
+how to get started with it. We hope you will benefit from the power of
+Axis2.</p>
+<h3><a name="Attention">Attention</a></h3>
+<p>This User's Guide is written based on the Axis2 Milestone version
+0.5
+standard
+binary distribution. (The standard binary distribution can be created
+from
+the source distribution using 'sh build.sh' on source distribution).
+Please
+refer the <a href="installationguide.html#Download_Axis2">installation
+guide</a> for further information on the downloadables available in
+this
+release.</p>
+<h3><a name="What_is_Axis2_">What is Axis2/C?</a></h3>
+<p>Axis2/C is an effort to implement the Axis2 architecture in pure C.</p>
+<p>After months of continued discussion and coding in this direction,
+Axis2/C
+now delivers the following key features:</p>
+<ul>
+  <li>
+    <p style="margin-bottom: 0in;"><strong>Speed</strong> - Axis2/C
+uses
+its own object model and StAX (Streaming API for XML) parsing to
+achieve significant speed.</p>
+  </li>
+  <li>
+    <p style="margin-bottom: 0in;"><strong>Low memory foot print</strong>-
+Axis2 was designed ground-up keeping the low memory foot print in mind.</p>
+  </li>
+  <li>
+    <p style="margin-bottom: 0in;"><strong>AXIOM</strong> C- Axis2/C
+comes with its own light-weight object model, AXIOM C which is a C
+implementation of AXIOM Java.</p>
+  </li>
+  <li>
+    <p style="margin-bottom: 0in;"><strong>MEP Support</strong> - Now
+comes handy with the flexibility to support Message Exchange Patterns
+(MEP s) with in-built support for basic MEP s defined in WSDL 2.0.</p>
+  </li>
+  <li>
+    <p style="margin-bottom: 0in;"><strong>Flexibility</strong> - The
+Axis2 architecture gives the developer complete freedom to insert
+extensions into the engine for custom header processing.</p>
+  </li>
+  <li>
+    <p style="margin-bottom: 0in;"><strong>Transport Framework</strong>
+- We have a clean and simple abstraction for integrating and using
+Transports and the core of the engine is completely
+transport-independent.</p>
+  </li>
+  <li>
+    <p style="margin-bottom: 0in;"><strong>WSDL support</strong> -
+Axis2 supports the <a href="http://www.w3.org/TR/wsdl" target="_blank">Web
+Service Description Language</a>, version 1.1 and 2.0.</p>
+  </li>
+  <li>
+    <p style="margin-bottom: 0in;"><strong>Composition and Extensibility</strong>
+- modules and phases improve support for composability and
+extensibility. Modules supports composability and is able to add
+support for new WS-* specifications in a simple and clean manner. They
+are however not hot deployable as they change the overall behavior of
+the system.</p>
+  </li>
+</ul>
+<p>We hope you enjoy using Axis2/C. Please note that this is an
+open-source
+effort. If you feel the code could use some new features or fixes,
+please get
+involved and lend us a hand! The Axis developer community welcomes your
+participation.</p>
+<p>Let us know what you think!</p>
+<p>Please send your feedback on Axis2 to "<a
+ href="mailto:axis-user@ws.apache.org">axis-c-user@ws.apache.org</a>"
+and make
+sure to prefix the subject of the mail with [Axis2].<br>
+<br>
+The following pages will guide through how to write web services client
+and
+servers.</p>
+<p align="right"><a href="userguide.html"><img
+ src="images/arrow_left.gif">
+Previous</a> | <a href="userguide2.html">Next <img
+ src="images/arrow_right.gif"></a></p>
+<p>Pages: <a href="userguide.html">Content</a>, <b>1</b>, <a
+ href="userguide2.html">2</a>, <a href="userguide3.html">3</a></p>
+</body>
+</html>



Mime
View raw message