summaryrefslogtreecommitdiffstats
path: root/axiom/include/axiom_xml_reader.h
diff options
context:
space:
mode:
Diffstat (limited to 'axiom/include/axiom_xml_reader.h')
-rw-r--r--axiom/include/axiom_xml_reader.h706
1 files changed, 706 insertions, 0 deletions
diff --git a/axiom/include/axiom_xml_reader.h b/axiom/include/axiom_xml_reader.h
new file mode 100644
index 0000000..c9450a8
--- /dev/null
+++ b/axiom/include/axiom_xml_reader.h
@@ -0,0 +1,706 @@
+
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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_XML_READER_H
+#define AXIOM_XML_READER_H
+
+/**
+ *@file axiom_xml_reader.h
+ *@brief this is the parser abstraction layer for axis2
+ */
+
+#include <axutil_env.h>
+#include <axutil_utils.h>
+#include <axiom_defines.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ typedef struct axiom_xml_reader_ops axiom_xml_reader_ops_t;
+ typedef struct axiom_xml_reader axiom_xml_reader_t;
+
+ /**
+ * @defgroup axiom_parser parser
+ * @ingroup axiom
+ * @{
+ * @}
+ */
+
+ /**
+ * @defgroup axiom_xml_reader XML reader
+ * @ingroup axiom_parser
+ * @{
+ */
+
+ typedef enum axiom_xml_reader_event_types
+ {
+ AXIOM_XML_READER_START_DOCUMENT = 0, /* <?xml version="1.0" encoding="utf-8"?> */
+ AXIOM_XML_READER_START_ELEMENT, /* <element> */
+ AXIOM_XML_READER_END_ELEMENT, /* </element> */
+ AXIOM_XML_READER_SPACE, /* <x> </x>*//*event is for value, not for x*/
+ AXIOM_XML_READER_EMPTY_ELEMENT, /* <element/> */
+ AXIOM_XML_READER_CHARACTER, /* <x>text</x>*//*event is for text, not for x*/
+ AXIOM_XML_READER_ENTITY_REFERENCE,
+ AXIOM_XML_READER_COMMENT, /* <!--comment--> */
+ AXIOM_XML_READER_PROCESSING_INSTRUCTION,
+ AXIOM_XML_READER_CDATA,
+ AXIOM_XML_READER_DOCUMENT_TYPE
+ } axiom_xml_reader_event_types;
+
+ /**
+ * \brief AXIOM_XML_READER ops
+ * Encapsulator struct for ops of axiom_xml_reader
+ */
+
+ struct axiom_xml_reader_ops
+ {
+
+ /**
+ * causes the reader to read the next parse event.
+ * returns the event just read
+ * @param parser axiom_xml_reader struct
+ * @param env axutil_environment, MUST NOT be NULL
+ * @returns one of the events defined in
+ * axiom_xml_reader_event_types
+ */
+
+ int(
+ AXIS2_CALL
+ * next)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * free pull_parser
+ * @param parser axiom_xml_reader struct
+ * @param env axutil_environment MUST NOT be NULL
+ * @returns axis2_status_code
+ */
+
+ void(
+ AXIS2_CALL
+ * free)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * Get the Number of attributes in the current element
+ * @param parser axiom_xml_reader
+ * @param env axutil_environment, MUST NOT be NULL.
+ * @returns Number of attributes , AXIS2_FAILURE on error
+ */
+
+ int(
+ AXIS2_CALL
+ * get_attribute_count)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /** This is used to get an attribute's localname using an index relative to
+ * current element.The iterations are not zero based.
+ * To access the first attribute use 1 for parameter i
+ * @param parser parser struct
+ * @param env environment struct
+ * @param i attribute index
+ * @returns the attribute localname
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_attribute_name_by_number)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /** This is used to get an attribute's prefix using an index relative to
+ * current element. The iterations are not zero based.
+ * To access the first attribute use 1 for parameter i
+ * @param parser parser struct
+ * @param env environment, MUST NOT be NULL
+ * @param i attribute index.
+ * @returns the attribute prefix, returns NULL on error,
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_attribute_prefix_by_number)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /** Gets an attribute's value using an index relative to
+ * current element. The iterations are not zero based.
+ * To access the first attribute use 1 for parameter i
+ * @param parser parser struct
+ * @param env environment, MUST NOT be NULL.
+ * @param i attribute index
+ * @returns the attribute value, returns NULL on error,
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_attribute_value_by_number)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /** Gets an attribute's namespace uri using an index relative to
+ * current element. The iterations are not zero based.
+ * To access the first attribute use 1 for parameter i
+ * @param parser parser struct
+ * @param env environment struct
+ * @param i attribute index
+ * @returns the attribute value, returns NULL on error
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_attribute_namespace_by_number)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /** Returns the text value of current element
+ * @param parser pointer to parser
+ * @param env environment, MUST not be NULL
+ * @returns Text Value, NULL on error
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_value)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * Returns the namespace count of current element
+ * @param parser parser struct
+ * @param env environment
+ * @returns namespace count of current element,
+ */
+ int(
+ AXIS2_CALL
+ * get_namespace_count)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * Accesses the namespace uri of the namespaces declared in current element
+ * using an index
+ * @param parser parser struct
+ * @param env environment
+ * @param i index
+ * @returns namespace uri of corresponding namespace
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_namespace_uri_by_number)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /**
+ * Accesses the namespace prefix of the namespaces declared in current element
+ * using an index
+ * @param parser parser struct
+ * @param env environment
+ * @param i index
+ * @returns namespace prefix of corresponding namespace
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_namespace_prefix_by_number)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /**
+ * Used to obtain the current element prefix
+ * @param parser parser struct
+ * @param env environment struct
+ * @returns prefix , NULL on error
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_prefix)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * Used to obtain the current element localname
+ * @param parser parser struct
+ * @param env environment struct
+ * @returns localname , NULL on error
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_name)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * Used to get the processingInstruction target
+ * @param parser parser struct
+ * @param env environment, MUST NOT be NULL.
+ * @returns target value of processingInstruction
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_pi_target)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * Gets the processingInstruction data
+ * @param parser parser struct
+ * @param env environment, MUST NOT be NULL.
+ * @returns data of processingInstruction
+ * caller must free the value using axiom_xml_reader_xml_free macro
+ */
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_pi_data)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * Used to get the DTD
+ * @param parser pointer to pull parser struct
+ * @param env environment, MUST NOT be NULL.
+ * @return text of doctype declaration. NULL is returns of no data
+ * exists.
+ */
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_dtd)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * Free function , this function wraps the underlying parser's
+ * xml free function. For freeing values obatined by calling
+ * pull parser api methods, This function must be used.
+ * @param parser pointer to axiom_xml_reader
+ * @param env environment, MUST NOT be NULL.
+ * @param data data values to be destroyed
+ * @return status of the op, AXIS2_SUCCESS on success,
+ * AXIS2_FAILURE on error.
+ */
+ void(
+ AXIS2_CALL
+ * xml_free)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ void *data);
+
+ /**
+ * Gets the char set encoding of the parser
+ * @param parser xml parser
+ * @param env environment
+ * @returns char set encoding string or NULL in failure
+ */
+
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_char_set_encoding)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /** Returns the namespace uri associated with current node */
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_namespace_uri)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_namespace_uri_by_prefix)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ axis2_char_t * prefix);
+
+ void *(
+ AXIS2_CALL
+ * get_context)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ axis2_char_t *(
+ AXIS2_CALL
+ * get_current_buffer)(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+ };
+
+ /**
+ * @brief axiom_xml_reader struct
+ * Axis2 OM pull_parser
+ */
+ struct axiom_xml_reader
+ {
+ const axiom_xml_reader_ops_t *ops;
+ };
+
+ /**
+ * Creates an instance of axiom_xml_reader to parse
+ * a file using an xml document in a file system
+ * @param env environment struct, must not be null
+ * @param filename url of an xml document
+ * @returns a pointer to xml_pull_parser_t struct
+ * NULL on error with error code set in the environment's error
+ */
+ AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL
+ axiom_xml_reader_create_for_file(
+ const axutil_env_t * env,
+ char *filename,
+ const axis2_char_t * encoding);
+
+ /**
+ * This create an instance of axiom_xml_reader to
+ * parse a xml document in a buffer. It takes a callback
+ * function that takes a buffer and the size of the buffer
+ * The user must implement a function that takes in buffer
+ * and size and fill the buffer with specified size
+ * with xml stream, parser will call this function to fill the
+ * buffer on the fly while parsing.
+ * @param env environment MUST NOT be NULL.
+ * @param read_input_callback() callback function that fills
+ * a char buffer.
+ * @param close_input_callback() callback function that closes
+ * the input stream.
+ * @param ctx, context can be any data that needs to be passed
+ * to the callback method.
+ * @param encoding encoding scheme of the xml stream
+ */
+ AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL
+ axiom_xml_reader_create_for_io(
+ const axutil_env_t * env,
+ AXIS2_READ_INPUT_CALLBACK,
+ AXIS2_CLOSE_INPUT_CALLBACK,
+ void *ctx,
+ const axis2_char_t * encoding);
+
+ /**
+ * Create an axiom_xml_reader_t using a buffer, which is the xml input
+ * @param env environment, MUST not be NULL
+ * @param container any data that needs to passed to the corresponding
+ * parser's create_for_memory method. The reader does not take ownership
+ * of this data.
+ * @param size size of the buffer
+ * @param encoding encoding of the xml
+ * @return pointer to axiom_xml_reader_t struct on success , NULL otherwise
+ */
+ AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL
+ axiom_xml_reader_create_for_memory(
+ const axutil_env_t * env,
+ void *container,
+ int size,
+ const axis2_char_t * encoding,
+ int type);
+
+ /**
+ * init function initializes the parser. When using libxml2 parser, this function
+ * is needed to initialize libxml2.
+ */
+ AXIS2_EXTERN axis2_status_t AXIS2_CALL
+ axiom_xml_reader_init(void
+ );
+
+ /**
+ * parser cleanup function. This function is used to clean up the globals of libxml2
+ * parser.
+ */
+ AXIS2_EXTERN axis2_status_t AXIS2_CALL
+ axiom_xml_reader_cleanup(void
+ );
+
+ /**
+ * while parsing through this method is calling for each and every
+ * time it parse a charactor.This is the atomic method which parse charactors.
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return
+ */
+ AXIS2_EXTERN int AXIS2_CALL
+ axiom_xml_reader_next(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return
+ */
+ AXIS2_EXTERN void AXIS2_CALL
+ axiom_xml_reader_free(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * free method for xml reader
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return
+ */
+ AXIS2_EXTERN int AXIS2_CALL
+ axiom_xml_reader_get_attribute_count(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return number of attributes in an element
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_attribute_name_by_number(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return the attribute name by number
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_attribute_prefix_by_number(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return the attribute prefix by number
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_attribute_value_by_number(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return attribute value by number
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_attribute_namespace_by_number(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return attribute namespace by number
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_value(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return value of the element
+ */
+ AXIS2_EXTERN int AXIS2_CALL
+ axiom_xml_reader_get_namespace_count(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return the number of namespaces in an element
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_namespace_uri_by_number(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return uri or the namespace by number
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_namespace_prefix_by_number(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ int i);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return prefix of the namespace by number
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_prefix(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return namespace prefix
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_name(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return name of the element
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_pi_target(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_pi_data(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_dtd(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return
+ */
+ AXIS2_EXTERN void AXIS2_CALL
+ axiom_xml_reader_xml_free(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ void *data);
+
+ /**
+ * free method for xml
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_char_set_encoding(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return charactor encoding
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_namespace_uri(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /**
+ *
+ * @param parser pointer to the OM XML Reader struct
+ * @param env environment struct, must not be null
+ *
+ * @return
+ */
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_namespace_uri_by_prefix(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env,
+ axis2_char_t * prefix);
+
+ AXIS2_EXTERN void *AXIS2_CALL
+ axiom_xml_reader_get_context(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ axiom_xml_reader_get_current_buffer(
+ axiom_xml_reader_t * parser,
+ const axutil_env_t * env);
+
+ /** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* AXIOM_XML_READER_H */
+
+
+
+
+
+
+
+
+
+
+
+
+
+