| |
| /* |
| * 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. |
| */ |
| |
| #include <axiom_stax_builder.h> |
| #include <axiom_document.h> |
| #include <axiom_node.h> |
| #include <axiom_element.h> |
| #include <axiom_text.h> |
| #include <axiom_data_source.h> |
| #include <axutil_stream.h> |
| #include <axutil_log_default.h> |
| #include <axutil_error_default.h> |
| #include <axiom_xml_reader.h> |
| #include <stdio.h> |
| #include <axiom_xml_writer.h> |
| #include <axutil_env.h> |
| axiom_node_t * return_policy_element(axis2_char_t * name, |
| const axutil_env_t * env, |
| axis2_char_t * wsdl_name); |
| axis2_char_t * get_policy_ref(axiom_node_t * node, const axutil_env_t * env); |
| void get_all_policy( |
| axis2_char_t * element_name, |
| const axutil_env_t * env, |
| axutil_array_list_t * policy_node_list, |
| axis2_char_t * wsdl_name); |
| |
| |
| /** |
| Define the environment related variables globaly so that they are available |
| for both functions |
| */ |
| axutil_allocator_t * allocator = NULL; |
| axutil_env_t * environment = NULL; |
| axutil_stream_t * stream = NULL; |
| axutil_error_t * error = NULL; |
| axutil_log_t * axis_log = NULL; |
| FILE * f = NULL; |
| FILE * o = NULL; |
| |
| |
| /** a method that demonstrate creating a om model using an xml file */ |
| int AXIS2_CALL |
| read_input( |
| char *buffer, |
| int size, |
| void *ctx) |
| { |
| int len = 0; |
| char *pos = NULL; |
| len = fread(buffer, sizeof(char), size, f); |
| if (buffer) |
| pos = strstr(buffer, "---"); |
| if (pos) |
| |
| { |
| len = pos - buffer; |
| *pos = '\0'; |
| } |
| return len; |
| } |
| int |
| main( |
| int argc, |
| char *argv[]) |
| { |
| axutil_qname_t * qname = NULL; |
| axiom_node_t * policy_node = NULL, *node = NULL; |
| axiom_xml_writer_t * writer = NULL; |
| axiom_output_t * om_output = NULL; |
| axis2_char_t * pol_ref = NULL; |
| axiom_element_t * policy_element = NULL, *ele = NULL; |
| axiom_node_t * child_node = NULL; |
| axutil_array_list_t * policy_array = NULL; |
| char *buffer = NULL; |
| const char *file_name = |
| "C:\\OMWsdl\\wsdltest\\debug\\PolicyAttachments.wsdl"; |
| const char *out_file_name = "C:\\OMWsdl\\wsdltest\\debug\\out.xml"; |
| allocator = axutil_allocator_init(NULL); |
| axis_log = axutil_log_create(allocator, NULL, NULL); |
| error = axutil_error_create(allocator); |
| environment = |
| axutil_env_create_with_error_log(allocator, error, axis_log); |
| policy_array = axutil_array_list_create(environment, 10); |
| |
| /*get all the policy values of "Binding_2B"*/ |
| get_all_policy("Binding-2B", environment, policy_array, file_name); |
| node = |
| (axiom_node_t *) axutil_array_list_get(policy_array, environment, 2); |
| ele = (axiom_element_t *) axiom_node_get_data_element(node, environment); |
| qname = axiom_element_get_qname(ele, environment, node); |
| printf("qname %s\n", axutil_qname_get_uri(qname, environment)); |
| writer = |
| axiom_xml_writer_create_for_memory(environment, NULL, AXIS2_TRUE, 0, |
| AXIS2_XML_PARSER_TYPE_BUFFER); |
| om_output = axiom_output_create(environment, writer); |
| axiom_node_serialize(node, environment, om_output); |
| buffer = (axis2_char_t *) axiom_xml_writer_get_xml(writer, environment); |
| if (buffer) |
| |
| { |
| /*printf(outfilename);*/ |
| o = fopen("C:\\OMWsdl\\wsdltest\\debug\\out.xml", "w"); |
| if (!o) |
| return -1; |
| printf("Printing the Buffer...\n"); |
| printf("%s", buffer); |
| fprintf(o, "<?xml version=\"1.0\" ?>\n%s", buffer); |
| } |
| axiom_output_free(om_output, environment); |
| fclose(f); |
| axutil_env_free(environment); |
| return 0; |
| } |
| |
| axiom_node_t * return_policy_element(axis2_char_t * name, |
| const axutil_env_t * env, |
| axis2_char_t * wsdl_name) |
| { |
| axiom_element_t * ele1 = NULL, *ele2 = NULL; |
| axiom_document_t * document = NULL; |
| axiom_node_t * node1 = NULL, *node2 = NULL, *policy_node = NULL; |
| axiom_namespace_t * ns = NULL; |
| axiom_xml_reader_t * reader = NULL; |
| axiom_stax_builder_t * builder = NULL; |
| char *buffer = NULL; |
| axiom_attribute_t * attr = NULL; |
| axis2_char_t * value = NULL; |
| axis2_char_t * val = NULL; |
| axutil_hash_t * attr_hash = NULL; |
| axis2_char_t * xml_output = NULL; |
| axutil_hash_index_t * hi; |
| f = fopen(wsdl_name, "r"); |
| if (!f) |
| return NULL; |
| reader = |
| axiom_xml_reader_create_for_io(environment, read_input, NULL, NULL, |
| NULL); |
| if (!reader) |
| |
| { |
| printf("ERROR CREATING PULLPARSER"); |
| return NULL; |
| } |
| builder = axiom_stax_builder_create(environment, reader); |
| if (!builder) |
| |
| { |
| printf("ERROR CREATING PULL PARSER"); |
| return NULL; |
| } |
| document = axiom_stax_builder_get_document(builder, environment); |
| if (!document) |
| return NULL; |
| node1 = axiom_document_get_root_element(document, environment); |
| if (!node1) |
| |
| { |
| printf(" root element null "); |
| axiom_stax_builder_free(builder, environment); |
| return NULL; |
| } |
| |
| do |
| |
| { |
| node2 = axiom_document_build_next(document, environment); |
| if (!node2) |
| break; |
| if (axiom_node_get_node_type(node2, environment) == AXIOM_ELEMENT) |
| |
| { |
| ele2 = |
| (axiom_element_t *) axiom_node_get_data_element(node2, |
| environment); |
| attr_hash = axiom_element_get_all_attributes(ele2, environment); |
| if (attr_hash) |
| |
| { |
| hi = axutil_hash_first(attr_hash, environment); |
| axutil_hash_this(hi, NULL, NULL, &attr); |
| if (axutil_strcmp |
| (axiom_attribute_get_value(attr, environment), name) == 0) |
| |
| { |
| policy_node = node2; |
| } |
| } |
| } |
| } |
| while (node2); |
| return policy_node; |
| } |
| |
| axis2_char_t * get_policy_ref(axiom_node_t * node, const axutil_env_t * env) |
| { |
| axiom_element_t * policy_element = NULL; |
| axiom_children_iterator_t * children_iter = NULL; |
| axiom_node_t * child_node = NULL; |
| axutil_qname_t * qname = NULL; |
| axis2_char_t * value = NULL; |
| axis2_char_t * val = NULL; |
| axiom_attribute_t * attr = NULL; |
| policy_element = |
| (axiom_element_t *) axiom_node_get_data_element(node, env); |
| children_iter = axiom_element_get_children(policy_element, env, node); |
| while (axiom_children_iterator_has_next(children_iter, env)) |
| |
| { |
| child_node = axiom_children_iterator_next(children_iter, env); |
| if (axiom_node_get_node_type(child_node, environment) == AXIOM_ELEMENT) |
| |
| { |
| policy_element = |
| (axiom_element_t *) axiom_node_get_data_element(child_node, |
| environment); |
| if (axutil_strcmp |
| (axiom_element_get_localname(policy_element, environment), |
| "PolicyReference") == 0) |
| |
| { |
| qname = axutil_qname_create(environment, "URI", NULL, NULL); |
| attr = |
| axiom_element_get_attribute(policy_element, environment, |
| qname); |
| if (attr) |
| |
| { |
| value = axiom_attribute_get_value(attr, environment); |
| val = axutil_string_substring_starting_at(value, 1); |
| return val; |
| } |
| } |
| } |
| } |
| return NULL; |
| } |
| void |
| get_all_policy( |
| axis2_char_t * element_name, |
| const axutil_env_t * env, |
| axutil_array_list_t * policy_node_list, |
| axis2_char_t * wsdl_name) |
| { |
| axutil_hash_t * attr_hash = NULL; |
| axutil_hash_index_t * hi = NULL; |
| axiom_element_t * element = NULL; |
| axiom_attribute_t * attribute = NULL; |
| axis2_char_t * attribute_val = NULL; |
| axiom_node_t * parent_policy_node = NULL, *parent_node = NULL; |
| parent_node = return_policy_element(element_name, env, wsdl_name); |
| if (!parent_node) |
| return; |
| parent_policy_node = |
| return_policy_element(get_policy_ref(parent_node, env), env, wsdl_name); |
| axutil_array_list_add(policy_node_list, env, parent_policy_node); |
| if (axiom_node_get_node_type(parent_node, env) == AXIOM_ELEMENT) |
| |
| { |
| element = |
| (axiom_element_t *) axiom_node_get_data_element(parent_node, env); |
| attr_hash = axiom_element_get_all_attributes(element, env); |
| if (attr_hash) |
| |
| { |
| hi = axutil_hash_next(env, axutil_hash_first(attr_hash, env)); |
| |
| do |
| |
| { |
| if (hi) |
| |
| { |
| axutil_hash_this(hi, NULL, NULL, &attribute); |
| attribute_val = axiom_attribute_get_value(attribute, env); |
| attribute_val = axutil_rindex(attribute_val, ':'); |
| attribute_val = |
| axutil_string_substring_starting_at(attribute_val, 1); |
| get_all_policy(attribute_val, env, policy_node_list, |
| wsdl_name); |
| hi = axutil_hash_next(env, hi); |
| } |
| } |
| while (hi); |
| } |
| } |
| return; |
| } |
| |