diff options
author | gmcdonald | 2010-02-13 01:32:03 +0000 |
---|---|---|
committer | gmcdonald | 2010-02-13 01:32:03 +0000 |
commit | 0425aadc78680e53000fd0108b540d6eca048516 (patch) | |
tree | 8ec7ab8e015d454c5ec586dfc91e05a2dce1cfc0 /test/find_policy.c | |
download | axis2c-0425aadc78680e53000fd0108b540d6eca048516.tar.gz axis2c-0425aadc78680e53000fd0108b540d6eca048516.tar.bz2 |
Moving axis svn, part of TLP move INFRA-2441
git-svn-id: http://svn.apache.org/repos/asf/axis/axis2/c/core/trunk@909681 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'test/find_policy.c')
-rw-r--r-- | test/find_policy.c | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/test/find_policy.c b/test/find_policy.c new file mode 100644 index 0000000..9549fdf --- /dev/null +++ b/test/find_policy.c @@ -0,0 +1,303 @@ + +/*
+ * 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; +
} |