axiom_node_add_sibling function added. It can be used to generates a multipart envelop payload.
Jira: AXIS2C-1687

diff --git a/axiom/include/axiom_node.h b/axiom/include/axiom_node.h
index a92b16a..c02e806 100644
--- a/axiom/include/axiom_node.h
+++ b/axiom/include/axiom_node.h
@@ -1,411 +1,425 @@
-

-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-#ifndef AXIOM_NODE_H

-#define AXIOM_NODE_H

-

-/**

-  * @defgroup axiom AXIOM project

-  * @{

-  * @}

-  */

-

-/**

-  * @defgroup axiom_om AXIOM

-  * @ingroup axiom

-  * @{

-  * @}

-  */

-

-/**

- * @file axiom_node.h

- * @brief defines axiom_node struct

- */

-#include <axutil_env.h>

-#include <axutil_utils.h>

-

-#ifdef __cplusplus

-extern "C"

-{

-#endif

-

-    typedef struct axiom_node axiom_node_t;

-    struct axiom_output;

-    struct axiom_document;

-    struct axiom_stax_builder;

-

-    /**

-     * @defgroup axiom_node  node

-     * @ingroup axiom_om

-     * @{

-     */

-

-    /**

-      * @brief AXIOM types

-      */

-    typedef enum axiom_types_t

-    {

-

-        /** Invalid node type */

-        AXIOM_INVALID = 0,

-

-        /** AXIOM document type */

-        AXIOM_DOCUMENT,

-

-        /** AXIOM element type */

-        AXIOM_ELEMENT,

-

-        /** AXIOM doctype type */

-        AXIOM_DOCTYPE,

-

-        /** AXIOM comment type */

-        AXIOM_COMMENT,

-

-        /** AXIOM attribute type */

-        AXIOM_ATTRIBUTE,

-

-        /** AXIOM namespace type */

-        AXIOM_NAMESPACE,

-

-        /** AXIOM processing instruction type */

-        AXIOM_PROCESSING_INSTRUCTION,

-

-        /** AXIOM text type */

-        AXIOM_TEXT,

-

-        /** AXIOM data source, represent a serialized XML fragment with a stream */

-        AXIOM_DATA_SOURCE

-    } axiom_types_t;

-

-    /**

-      * Creates a node struct.

-      * @param env Environment. MUST NOT be NULL, .

-      * @return a pointer to newly created node struct. NULL on error. 

-      */

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_create(

-        const axutil_env_t * env);

-

-    /**

-      * Creates a node struct from a character buffer.

-      * @param env Environment. MUST NOT be NULL, .

-      * @param buffer string. buffer to make the node

-      * @return a pointer to newly created node struct. NULL on error. 

-      */

-    AXIS2_EXTERN axiom_node_t* AXIS2_CALL

-    axiom_node_create_from_buffer(    

-        const axutil_env_t * env,

-        axis2_char_t *buffer);

-

-

-    /**

-    * Frees an om node and all of its children. Please note that the attached

-    * data_element will also be freed along with the node.  If the node is

-    * still attached to a parent, it will be detached first, then freed.

-    * @param om_node node to be freed.

-    * @param env Environment. MUST NOT be NULL, .

-    * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE

-    */

-    AXIS2_EXTERN void AXIS2_CALL

-    axiom_node_free_tree(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * Adds given node as child to parent. child should not have a parent

-    * if child has a parent it will be detached from existing parent

-    * @param om_node parent node. cannot be NULL.

-    * @param env Environment. MUST NOT be NULL, .

-    * @param child child node.

-    * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE

-    */

-    AXIS2_EXTERN axis2_status_t AXIS2_CALL

-    axiom_node_add_child(

-        axiom_node_t * om_node,

-        const axutil_env_t * env,

-        axiom_node_t * child);

-

-    /**

-    * Detaches given node from the parent and reset the links. Will recreate "namespace defined in

-    * the parent and used in detached node" within detached node itself

-    * @param om_node node to be detached, cannot be NULL.

-    * @param env Environment. MUST NOT be NULL, .

-    * @return a pointer to detached node,returns NULL on error

-    */

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_detach(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-     * Detaches given node from the parent and reset the links. will not adjust the namespace as

-     * in the case of axiom_node_detach.

-     * @param om_node node to be detached, cannot be NULL.

-     * @param env Environment. MUST NOT be NULL, .

-     * @return a pointer to detached node,returns NULL on error

-     */

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_detach_without_namespaces(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * Inserts a sibling node after the given node

-    * @param om_node node to whom the sibling to be inserted. , cannot be NULL.

-    * @param env Environment. MUST NOT be NULL, .

-    * @param node_to_insert the node to be inserted. , cannot be NULL.

-    * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE

-    */

-    AXIS2_EXTERN axis2_status_t AXIS2_CALL

-    axiom_node_insert_sibling_after(

-        axiom_node_t * om_node,

-        const axutil_env_t * env,

-        axiom_node_t * node_to_insert);

-

-    /**

-    * Inserts a sibling node before the given current node

-    * @param om_node node to whom the sibling to be inserted. , cannot be NULL.

-    * @param env Environment. MUST NOT be NULL, .

-    * @param node_to_insert the node to be inserted. , cannot be NULL.

-    * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE

-    */

-    AXIS2_EXTERN axis2_status_t AXIS2_CALL

-    axiom_node_insert_sibling_before(

-        axiom_node_t * om_node,

-        const axutil_env_t * env,

-        axiom_node_t * node_to_insert);

-

-    /**

-    * Serializes the given node. This op makes the node go

-    * through its children and  serialize them in order.

-    * @param om_node node to be serialized.  cannot be NULL.

-    * @param env Environment .MUST NOT be NULL.    

-    * @param om_output AXIOM output handler to be used in serializing

-    * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE

-    */

-    AXIS2_EXTERN axis2_status_t AXIS2_CALL

-    axiom_node_serialize(

-        axiom_node_t * om_node,

-        const axutil_env_t * env,

-        struct axiom_output *om_output);

-

-    /** get parent of om_node

-    *@om_node node 

-    *@param env environment

-    *@return pointer to parent node of om_node, return NULL if no parent exists or

-    *        when an error occured.

-    */

-

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_get_parent(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * get the first child of om_node

-    * @param om_node node

-    * @param env environment must not be null.

-    * @returns pointer to first child node , NULL is returned on error with 

-    *                     error code set in environments error

-    */

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_get_first_child(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**get the first AXIOM_ELEMENT in om_node

-    * @param om_node node

-    * @param env environment must not be null

-    * @returns pointer to first child om element, NULL is returned on error

-    * with error code set in environments error.

-    */

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_get_first_element(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * get the last child

-    * @param om_node node

-    * @param env environment, MUST NOT be NULL

-    * @return pointer to last child of this node , return NULL on error.

-    */

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_get_last_child(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * get the previous sibling 

-    * @param om_node om_node struct 

-    * @param env environment , must node be null

-    * @returns a pointer to previous sibling , NULL if a previous sibling does not exits

-    *                (happens when this node is the first child of a node )

-    */

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_get_previous_sibling(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * get the previous sibling of type AXIOM_ELEMENT

-    * @param om_node om_node struct 

-    * @param env environment , must node be null

-    * @returns a pointer to previous sibling , NULL if a previous sibling does not exits

-    *                (happens when this node is the first element of a node )

-    */

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_get_previous_sibling_element(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * get next sibling

-    * @param om_node om_node struct

-    * @param env environment, MUST NOT be NULL.

-    * @return next sibling of this node.

-    */

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_get_next_sibling(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * get next sibling of type AXIOM_ELEMENT

-    * @param om_node om_node struct

-    * @param env environment, MUST NOT be NULL.

-    * @return next sibling of this node.

-    */

-    AXIS2_EXTERN axiom_node_t *AXIS2_CALL

-    axiom_node_get_next_sibling_element(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * get the node type of this element

-    * Node type can be one of AXIOM_ELEMENT, AXIOM_COMMENT, AXIOM_TEXT

-    *      AXIOM_DOCTYPE, AXIOM_PROCESSING_INSTRUCTION

-    * @param om_node  node of which node type is required

-    * @param env environment

-    * @return node type

-    */

-    AXIS2_EXTERN axiom_types_t AXIS2_CALL

-    axiom_node_get_node_type(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * get the struct contained in the node

-    * IF the node is on type AXIOM_ELEMENT , this method returns

-    * a pointer to  axiom_element_t struct contained

-    * @param om_node node

-    * @param env environment, MUST NOT be NULL.

-    * @returns pointer to struct contained in the node

-    *          returns NULL if no struct is contained 

-    */

-    AXIS2_EXTERN void *AXIS2_CALL

-    axiom_node_get_data_element(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-    * Indicates whether parser has parsed this information item completely or not 

-    * @param om_node om_node struct

-    * @param env environment, MUST NOT be NULL.

-    * @returns AXIS2_TRUE if node is completly build, 

-    *          AXIS2_FALSE if node is not completed

-    */

-    AXIS2_EXTERN axis2_bool_t AXIS2_CALL

-    axiom_node_is_complete(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-     * returns the associated document,

-     * only valid if built using builder and for a node of type 

-     * AXIOM_ELEMENT

-     * returns null if no document is available

-     * @param om_node 

-     * @param env environment, MUST NOT be NULL.

-     *

-     * @return the OM document of the node

-     */

-    AXIS2_EXTERN struct axiom_document *AXIS2_CALL

-                axiom_node_get_document(

-                    axiom_node_t * om_node,

-                    const axutil_env_t * env);

-

-    /**

-     *

-     * @param om_node pointer to the OM node struct

-     * @param env environment, MUST NOT be NULL

-     *

-     * @return the string representation of the node

-     */

-    AXIS2_EXTERN axis2_char_t *AXIS2_CALL

-    axiom_node_to_string(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-     *

-     * @param om_node pointer to the OM node struct

-     * @param env environment, MUST NOT be NULL

-     * @param om_output the serialized output will be placed here

-     *

-     * @return AXIS2_SUCCESS on success else AXIS2_FAILURE

-     */

-    AXIS2_EXTERN axis2_status_t AXIS2_CALL

-    axiom_node_serialize_sub_tree(

-        axiom_node_t * om_node,

-        const axutil_env_t * env,

-        struct axiom_output *om_output);

-

-    /**

-     *

-     * @param om_node pointer to the OM node struct

-     * @param env environment, MUST NOT be NULL

-     *

-     * @return the tree as a string

-     */

-    AXIS2_EXTERN axis2_char_t *AXIS2_CALL

-    axiom_node_sub_tree_to_string(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-

-    /**

-     * Convert the node to string, treating the binary contents, if any, 

-     * as non-optimized content.

-     * @param om_node pointer to the OM node struct

-     * @param env environment, MUST NOT be NULL

-     *

-     * @return the none optimized string 

-     */

-    AXIS2_EXTERN axis2_char_t *AXIS2_CALL

-    axiom_node_to_string_non_optimized(

-        axiom_node_t * om_node,

-        const axutil_env_t * env);

-    

-

-    /** @} */

-

-#ifdef __cplusplus

-}

-#endif

-

-#endif                          /* AXIOM_NODE_H */

+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AXIOM_NODE_H
+#define AXIOM_NODE_H
+
+/**
+  * @defgroup axiom AXIOM project
+  * @{
+  * @}
+  */
+
+/**
+  * @defgroup axiom_om AXIOM
+  * @ingroup axiom
+  * @{
+  * @}
+  */
+
+/**
+ * @file axiom_node.h
+ * @brief defines axiom_node struct
+ */
+#include <axutil_env.h>
+#include <axutil_utils.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    typedef struct axiom_node axiom_node_t;
+    struct axiom_output;
+    struct axiom_document;
+    struct axiom_stax_builder;
+
+    /**
+     * @defgroup axiom_node  node
+     * @ingroup axiom_om
+     * @{
+     */
+
+    /**
+      * @brief AXIOM types
+      */
+    typedef enum axiom_types_t
+    {
+
+        /** Invalid node type */
+        AXIOM_INVALID = 0,
+
+        /** AXIOM document type */
+        AXIOM_DOCUMENT,
+
+        /** AXIOM element type */
+        AXIOM_ELEMENT,
+
+        /** AXIOM doctype type */
+        AXIOM_DOCTYPE,
+
+        /** AXIOM comment type */
+        AXIOM_COMMENT,
+
+        /** AXIOM attribute type */
+        AXIOM_ATTRIBUTE,
+
+        /** AXIOM namespace type */
+        AXIOM_NAMESPACE,
+
+        /** AXIOM processing instruction type */
+        AXIOM_PROCESSING_INSTRUCTION,
+
+        /** AXIOM text type */
+        AXIOM_TEXT,
+
+        /** AXIOM data source, represent a serialized XML fragment with a stream */
+        AXIOM_DATA_SOURCE
+    } axiom_types_t;
+
+    /**
+      * Creates a node struct.
+      * @param env Environment. MUST NOT be NULL, .
+      * @return a pointer to newly created node struct. NULL on error. 
+      */
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_create(
+        const axutil_env_t * env);
+
+    /**
+      * Creates a node struct from a character buffer.
+      * @param env Environment. MUST NOT be NULL, .
+      * @param buffer string. buffer to make the node
+      * @return a pointer to newly created node struct. NULL on error. 
+      */
+    AXIS2_EXTERN axiom_node_t* AXIS2_CALL
+    axiom_node_create_from_buffer(    
+        const axutil_env_t * env,
+        axis2_char_t *buffer);
+
+
+    /**
+    * Frees an om node and all of its children. Please note that the attached
+    * data_element will also be freed along with the node.  If the node is
+    * still attached to a parent, it will be detached first, then freed.
+    * @param om_node node to be freed.
+    * @param env Environment. MUST NOT be NULL, .
+    * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE
+    */
+    AXIS2_EXTERN void AXIS2_CALL
+    axiom_node_free_tree(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * Adds given node as child to parent. child should not have a parent
+    * if child has a parent it will be detached from existing parent
+    * @param om_node parent node. cannot be NULL.
+    * @param env Environment. MUST NOT be NULL, .
+    * @param child child node.
+    * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE
+    */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axiom_node_add_child(
+        axiom_node_t * om_node,
+        const axutil_env_t * env,
+        axiom_node_t * child);
+
+    /**
+    * Detaches given node from the parent and reset the links. Will recreate "namespace defined in
+    * the parent and used in detached node" within detached node itself
+    * @param om_node node to be detached, cannot be NULL.
+    * @param env Environment. MUST NOT be NULL, .
+    * @return a pointer to detached node,returns NULL on error
+    */
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_detach(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+     * Detaches given node from the parent and reset the links. will not adjust the namespace as
+     * in the case of axiom_node_detach.
+     * @param om_node node to be detached, cannot be NULL.
+     * @param env Environment. MUST NOT be NULL, .
+     * @return a pointer to detached node,returns NULL on error
+     */
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_detach_without_namespaces(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * Inserts a sibling node after the given node
+    * @param om_node node to whom the sibling to be inserted. , cannot be NULL.
+    * @param env Environment. MUST NOT be NULL, .
+    * @param node_to_insert the node to be inserted. , cannot be NULL.
+    * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE
+    */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axiom_node_insert_sibling_after(
+        axiom_node_t * om_node,
+        const axutil_env_t * env,
+        axiom_node_t * node_to_insert);
+
+    /**
+    * Inserts a sibling node before the given current node
+    * @param om_node node to whom the sibling to be inserted. , cannot be NULL.
+    * @param env Environment. MUST NOT be NULL, .
+    * @param node_to_insert the node to be inserted. , cannot be NULL.
+    * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE
+    */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axiom_node_insert_sibling_before(
+        axiom_node_t * om_node,
+        const axutil_env_t * env,
+        axiom_node_t * node_to_insert);
+
+    /**
+    * Serializes the given node. This op makes the node go
+    * through its children and  serialize them in order.
+    * @param om_node node to be serialized.  cannot be NULL.
+    * @param env Environment .MUST NOT be NULL.    
+    * @param om_output AXIOM output handler to be used in serializing
+    * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE
+    */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axiom_node_serialize(
+        axiom_node_t * om_node,
+        const axutil_env_t * env,
+        struct axiom_output *om_output);
+
+    /** get parent of om_node
+    *@om_node node 
+    *@param env environment
+    *@return pointer to parent node of om_node, return NULL if no parent exists or
+    *        when an error occured.
+    */
+
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_get_parent(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * get the first child of om_node
+    * @param om_node node
+    * @param env environment must not be null.
+    * @returns pointer to first child node , NULL is returned on error with 
+    *                     error code set in environments error
+    */
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_get_first_child(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**get the first AXIOM_ELEMENT in om_node
+    * @param om_node node
+    * @param env environment must not be null
+    * @returns pointer to first child om element, NULL is returned on error
+    * with error code set in environments error.
+    */
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_get_first_element(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * get the last child
+    * @param om_node node
+    * @param env environment, MUST NOT be NULL
+    * @return pointer to last child of this node , return NULL on error.
+    */
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_get_last_child(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * get the previous sibling 
+    * @param om_node om_node struct 
+    * @param env environment , must node be null
+    * @returns a pointer to previous sibling , NULL if a previous sibling does not exits
+    *                (happens when this node is the first child of a node )
+    */
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_get_previous_sibling(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * get the previous sibling of type AXIOM_ELEMENT
+    * @param om_node om_node struct 
+    * @param env environment , must node be null
+    * @returns a pointer to previous sibling , NULL if a previous sibling does not exits
+    *                (happens when this node is the first element of a node )
+    */
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_get_previous_sibling_element(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * get next sibling
+    * @param om_node om_node struct
+    * @param env environment, MUST NOT be NULL.
+    * @return next sibling of this node.
+    */
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_get_next_sibling(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * get next sibling of type AXIOM_ELEMENT
+    * @param om_node om_node struct
+    * @param env environment, MUST NOT be NULL.
+    * @return next sibling of this node.
+    */
+    AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+    axiom_node_get_next_sibling_element(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * get the node type of this element
+    * Node type can be one of AXIOM_ELEMENT, AXIOM_COMMENT, AXIOM_TEXT
+    *      AXIOM_DOCTYPE, AXIOM_PROCESSING_INSTRUCTION
+    * @param om_node  node of which node type is required
+    * @param env environment
+    * @return node type
+    */
+    AXIS2_EXTERN axiom_types_t AXIS2_CALL
+    axiom_node_get_node_type(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * get the struct contained in the node
+    * IF the node is on type AXIOM_ELEMENT , this method returns
+    * a pointer to  axiom_element_t struct contained
+    * @param om_node node
+    * @param env environment, MUST NOT be NULL.
+    * @returns pointer to struct contained in the node
+    *          returns NULL if no struct is contained 
+    */
+    AXIS2_EXTERN void *AXIS2_CALL
+    axiom_node_get_data_element(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+    * Indicates whether parser has parsed this information item completely or not 
+    * @param om_node om_node struct
+    * @param env environment, MUST NOT be NULL.
+    * @returns AXIS2_TRUE if node is completly build, 
+    *          AXIS2_FALSE if node is not completed
+    */
+    AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+    axiom_node_is_complete(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+     * returns the associated document,
+     * only valid if built using builder and for a node of type 
+     * AXIOM_ELEMENT
+     * returns null if no document is available
+     * @param om_node 
+     * @param env environment, MUST NOT be NULL.
+     *
+     * @return the OM document of the node
+     */
+    AXIS2_EXTERN struct axiom_document *AXIS2_CALL
+                axiom_node_get_document(
+                    axiom_node_t * om_node,
+                    const axutil_env_t * env);
+
+    /**
+     *
+     * @param om_node pointer to the OM node struct
+     * @param env environment, MUST NOT be NULL
+     *
+     * @return the string representation of the node
+     */
+    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+    axiom_node_to_string(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+     *
+     * @param om_node pointer to the OM node struct
+     * @param env environment, MUST NOT be NULL
+     * @param om_output the serialized output will be placed here
+     *
+     * @return AXIS2_SUCCESS on success else AXIS2_FAILURE
+     */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axiom_node_serialize_sub_tree(
+        axiom_node_t * om_node,
+        const axutil_env_t * env,
+        struct axiom_output *om_output);
+
+    /**
+     *
+     * @param om_node pointer to the OM node struct
+     * @param env environment, MUST NOT be NULL
+     *
+     * @return the tree as a string
+     */
+    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+    axiom_node_sub_tree_to_string(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+
+    /**
+     * Convert the node to string, treating the binary contents, if any, 
+     * as non-optimized content.
+     * @param om_node pointer to the OM node struct
+     * @param env environment, MUST NOT be NULL
+     *
+     * @return the none optimized string 
+     */
+    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+    axiom_node_to_string_non_optimized(
+        axiom_node_t * om_node,
+        const axutil_env_t * env);
+    
+	/**
+	* Adds nodeElemSibling to nodeElem as a sibling. It can be used to generates a multipart envelop payload.
+	* @param env pointer to environment struct
+	* @param nodeElem pointer to first part, element to has sibling added
+	* @param nodeElemSibling pointer to second part, sibling to be added
+	*
+	* @return axiom_node_t pointer to param nodeElem pointer with sibling added
+	*/
+	AXIS2_EXTERN axiom_node_t * AXIS2_CALL
+		axiom_node_add_sibling(
+			const axutil_env_t *env,
+			axiom_node_t *nodeElem,
+			axiom_node_t *nodeElemSibling);
+
+
+    /** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif                          /* AXIOM_NODE_H */