axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dushshan...@apache.org
Subject svn commit: r537792 - /webservices/axis2/scratch/c/neethi/axis2c/test/find_policy.c
Date Mon, 14 May 2007 12:04:13 GMT
Author: dushshantha
Date: Mon May 14 05:04:12 2007
New Revision: 537792

URL: http://svn.apache.org/viewvc?view=rev&rev=537792
Log:
added wsdl passing file

Added:
    webservices/axis2/scratch/c/neethi/axis2c/test/find_policy.c

Added: webservices/axis2/scratch/c/neethi/axis2c/test/find_policy.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/neethi/axis2c/test/find_policy.c?view=auto&rev=537792
==============================================================================
--- webservices/axis2/scratch/c/neethi/axis2c/test/find_policy.c (added)
+++ webservices/axis2/scratch/c/neethi/axis2c/test/find_policy.c Mon May 14 05:04:12 2007
@@ -0,0 +1,280 @@
+/*
+ * 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;
+}
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org


Mime
View raw message