示例#1
0
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);
}
示例#3
0
文件: util.c 项目: AdrianRys/wsf
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;
}
示例#4
0
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);
}