void create_axiom_from_string(const axutil_env_t* env, axis2_char_t* buffer, axiom_node_t** node) { axiom_xml_reader_t* xml_reader = NULL; axiom_document_t* document = NULL; axiom_stax_builder_t* om_builder = NULL; xml_reader = axiom_xml_reader_create_for_memory(env, buffer, strlen(buffer), NULL, AXIS2_XML_PARSER_TYPE_BUFFER); /* encoding ?? */ if (!xml_reader) { AXIS2_LOG_ERROR_MSG(env->log, "[wsf_wsdl_test]Failed to create wsdl_xml_reader\n"); return; } om_builder = axiom_stax_builder_create(env, xml_reader); if (!om_builder) { AXIS2_LOG_ERROR_MSG(env->log, "[wsf_wsdl_test]Failed to create wsdl stax builder\n"); axiom_xml_reader_free(xml_reader, env); return; } document = axiom_stax_builder_get_document(om_builder, env); if (!document) { AXIS2_LOG_ERROR_MSG(env->log, "[wsf_wsdl_test]Failed to get retrieve wsdl document\n"); axiom_stax_builder_free(om_builder, env); return; } *node = axiom_document_build_all(document, env); return; }
/** * Free the build struct instance and its associated document,axiom tree. * @param builder pointer to builder struct * @param env environment, MUST NOT be NULL * @return status of the operation AXIS2_SUCCESS on success, AXIS2_FAILURE on error. */ AXIS2_EXTERN void AXIS2_CALL axiom_stax_builder_free( axiom_stax_builder_t * om_builder, const axutil_env_t * env) { axutil_hash_free(om_builder->declared_namespaces, env); axiom_document_free(om_builder->document, env); axiom_xml_reader_free(om_builder->parser, env); AXIS2_FREE(env->allocator, om_builder); }
axiom_node_t * wsclient_soap_header ( const axutil_env_t *env, char *input_buffer) { axiom_xml_reader_t *reader; axiom_stax_builder_t *builder; axiom_document_t *doc; axiom_node_t *node; char *input; input = input_buffer; if (input) reader = axiom_xml_reader_create_for_memory (env, input, strlen (input), NULL, AXIS2_XML_PARSER_TYPE_BUFFER); else return WSCLIENT_FAILURE; if (reader) { axiom_xml_reader_init (); builder = axiom_stax_builder_create (env, reader); } else return WSCLIENT_FAILURE; if (builder) { doc = axiom_stax_builder_get_document (builder, env); if (doc) axiom_document_build_all (doc, env); else return WSCLIENT_FAILURE; node = axiom_document_get_root_element (doc, env); } else { axiom_xml_reader_free (reader, env); return WSCLIENT_FAILURE; } return node; }
WSF_WSDL_EXTERN axis2_bool_t WSF_WSDL_CALL wsdl_util_create_type_map( const axutil_env_t* env, axis2_char_t* type_map_xml_file, axiom_node_t** type_map) { axiom_xml_reader_t* typemap_xml_reader = NULL; axiom_document_t* typemap_document = NULL; axiom_stax_builder_t* typemap_om_builder = NULL; typemap_xml_reader = axiom_xml_reader_create_for_file(env, type_map_xml_file, NULL); /* encoding ?? */ if (!typemap_xml_reader) { AXIS2_LOG_ERROR_MSG(env->log, "Failed to create xml reader for typemap"); return AXIS2_FAILURE; } typemap_om_builder = axiom_stax_builder_create(env, typemap_xml_reader); if (!typemap_om_builder) { AXIS2_LOG_ERROR_MSG(env->log, "Failed to create om builder for typemap"); axiom_xml_reader_free(typemap_xml_reader, env); return AXIS2_FAILURE; } typemap_document = axiom_stax_builder_get_document(typemap_om_builder, env); if (!typemap_document) { AXIS2_LOG_ERROR_MSG(env->log, "Failed to create document for typemap"); axiom_stax_builder_free(typemap_om_builder, env); return AXIS2_FAILURE; } *type_map = axiom_document_build_all(typemap_document, env); axiom_stax_builder_free_self(typemap_om_builder, env); return AXIS2_SUCCESS; }
AXIS2_EXTERN void AXIS2_CALL axiom_stax_builder_free_self_original( axiom_stax_builder_t * om_builder, const axutil_env_t * env) { axiom_node_t *temp_node = NULL; axiom_node_t *nodes[256]; axiom_node_t *om_node = NULL; int count = 0; om_node = om_builder->root_node; nodes[count++] = om_node; if(om_node) { do { axiom_node_set_builder(om_node, env, NULL); temp_node = axiom_node_get_first_child(om_node, env); if(temp_node) { /* process the child node */ om_node = temp_node; nodes[count++] = om_node; } else { /* no child node. check whether current node has any siblings */ temp_node = axiom_node_get_next_sibling(om_node, env); if(temp_node) { /* process sibling nodes */ om_node = temp_node; nodes[count - 1] = om_node; } else { /* no siblings. so fallback to parent of current node and process */ while(count > 1 && !temp_node) { count--; om_node = nodes[count - 1]; temp_node = axiom_node_get_next_sibling(om_node, env); } if(temp_node && count > 1) { om_node = temp_node; nodes[count - 1] = om_node; } else { count--; } } } } while(count > 0); } axutil_hash_free(om_builder->declared_namespaces, env); axiom_xml_reader_free(om_builder->parser, env); axiom_document_free_self(om_builder->document, env); AXIS2_FREE(env->allocator, om_builder); }