You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-commits@axis.apache.org by na...@apache.org on 2012/02/04 12:13:22 UTC

svn commit: r1240490 - in /axis/axis2/c/core/trunk/axiom: include/axiom_node.h src/om/om_node.c

Author: nandika
Date: Sat Feb  4 11:13:21 2012
New Revision: 1240490

URL: http://svn.apache.org/viewvc?rev=1240490&view=rev
Log:
patch 0001 applied from jira issue 1582

Modified:
    axis/axis2/c/core/trunk/axiom/include/axiom_node.h
    axis/axis2/c/core/trunk/axiom/src/om/om_node.c

Modified: axis/axis2/c/core/trunk/axiom/include/axiom_node.h
URL: http://svn.apache.org/viewvc/axis/axis2/c/core/trunk/axiom/include/axiom_node.h?rev=1240490&r1=1240489&r2=1240490&view=diff
==============================================================================
--- axis/axis2/c/core/trunk/axiom/include/axiom_node.h (original)
+++ axis/axis2/c/core/trunk/axiom/include/axiom_node.h Sat Feb  4 11:13:21 2012
@@ -1,388 +1,411 @@
-
-/*
- * 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 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 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);
+    
+
+    /** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif                          /* AXIOM_NODE_H */

Modified: axis/axis2/c/core/trunk/axiom/src/om/om_node.c
URL: http://svn.apache.org/viewvc/axis/axis2/c/core/trunk/axiom/src/om/om_node.c?rev=1240490&r1=1240489&r2=1240490&view=diff
==============================================================================
--- axis/axis2/c/core/trunk/axiom/src/om/om_node.c (original)
+++ axis/axis2/c/core/trunk/axiom/src/om/om_node.c Sat Feb  4 11:13:21 2012
@@ -1129,6 +1129,17 @@ axiom_node_get_previous_sibling(
 }
 
 AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+axiom_node_get_previous_sibling_element(
+    axiom_node_t * om_node,
+    const axutil_env_t * env)
+{
+    axiom_node_t * result = axiom_node_get_previous_sibling( om_node, env );
+    while ( result && axiom_node_get_node_type(result, env) != AXIOM_ELEMENT )
+        result = axiom_node_get_previous_sibling( result, env );
+    return result;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
 axiom_node_get_next_sibling(
     axiom_node_t * om_node,
     const axutil_env_t * env)
@@ -1160,6 +1171,18 @@ axiom_node_get_next_sibling(
     return om_node->next_sibling;
 }
 
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+axiom_node_get_next_sibling_element(
+    axiom_node_t * om_node,
+    const axutil_env_t * env)
+{
+    axiom_node_t * result = axiom_node_get_next_sibling( om_node, env );
+    while ( result && axiom_node_get_node_type(result, env) != AXIOM_ELEMENT )
+        result = axiom_node_get_next_sibling( result, env );
+    return result;
+}
+
+
 AXIS2_EXTERN axiom_types_t AXIS2_CALL
 axiom_node_get_node_type(
     axiom_node_t * om_node,