You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by da...@apache.org on 2006/03/15 09:43:07 UTC

svn commit: r386001 - in /webservices/axis2/trunk/c/modules/wsdl: Makefile.am wsdl_desc.c wsdl_extensible_attribute.c wsdl_extensible_element.c wsdl_feature.c wsdl_import.c wsdl_include.c wsdl_types.c

Author: damitha
Date: Wed Mar 15 00:43:05 2006
New Revision: 386001

URL: http://svn.apache.org/viewcvs?rev=386001&view=rev
Log:
Work regarding to WOM

Added:
    webservices/axis2/trunk/c/modules/wsdl/wsdl_desc.c
    webservices/axis2/trunk/c/modules/wsdl/wsdl_extensible_attribute.c
    webservices/axis2/trunk/c/modules/wsdl/wsdl_import.c
    webservices/axis2/trunk/c/modules/wsdl/wsdl_include.c
    webservices/axis2/trunk/c/modules/wsdl/wsdl_types.c
Modified:
    webservices/axis2/trunk/c/modules/wsdl/Makefile.am
    webservices/axis2/trunk/c/modules/wsdl/wsdl_extensible_element.c
    webservices/axis2/trunk/c/modules/wsdl/wsdl_feature.c

Modified: webservices/axis2/trunk/c/modules/wsdl/Makefile.am
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/Makefile.am?rev=386001&r1=386000&r2=386001&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/Makefile.am (original)
+++ webservices/axis2/trunk/c/modules/wsdl/Makefile.am Wed Mar 15 00:43:05 2006
@@ -1,4 +1,5 @@
 TESTS =
+SUBDIRS=
 lib_LTLIBRARIES = libaxis2_wsdl.la
 libaxis2_wsdl_la_SOURCES = wsdl_op.c \
                         wsdl_svc.c \
@@ -15,7 +16,12 @@
                         wsdl_endpoint.c \
                         wsdl_fault_ref.c \
                         wsdl_extensible_element.c \
-                        wsdl_soap_op.c
+                        wsdl_extensible_attribute.c \
+                        wsdl_soap_op.c \
+                        wsdl_types.c \
+                        wsdl_import.c \
+                        wsdl_include.c \
+                        wsdl_desc.c
 
 INCLUDES = -I$(top_builddir)/include \
             -I$(top_builddir)/modules/util \

Added: webservices/axis2/trunk/c/modules/wsdl/wsdl_desc.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/wsdl_desc.c?rev=386001&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/wsdl_desc.c (added)
+++ webservices/axis2/trunk/c/modules/wsdl/wsdl_desc.c Wed Mar 15 00:43:05 2006
@@ -0,0 +1,1106 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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 <axis2_wsdl_desc.h>
+#include <axis2_wsdl_types.h>
+#include <axis2_wsdl_component.h>
+#include <axis2_wsdl_binding.h>
+#include <axis2_wsdl_import.h>
+#include <axis2_wsdl_include.h>
+#include <axis2_wsdl_extensible_attribute.h>
+#include <axis2_wsdl_binding_fault.h>
+
+
+/** 
+ * @brief Wsdl Description struct impl
+ *	Axis2 Wsdl Description Implementation 
+ */ 
+typedef struct axis2_wsdl_desc_impl
+{
+	axis2_wsdl_desc_t wsdl_desc;
+    /**
+     * The name token of WSDL 1.1 Definition.
+     */
+    axis2_qname_t *wsdl1_def_name;
+    /* TODO local name and the naspace name to be made static or through a 
+     * Constant class.*/
+    /* TODO required; thus check it up */
+    /**
+     * Field targetNameSpace
+     */
+    axis2_char_t *target_namespace;
+    /* TODO The object structure of some external xml data binding is going to 
+     *be pluged here eventually.*/  
+    /**
+     * Field types
+     */
+    axis2_wsdl_types_t *types;
+    /**
+     * This List will be a list of <code>WSDLInterface</code> objects.
+     */
+    axis2_hash_t *interfaces;
+    /**
+     * This <code>HashMap </code> is a Map of <code>WSDLBinding </code> objects.
+     */
+    axis2_hash_t *bindings;
+    /**
+     * This <code>HashMap </code> is a list of <code>WSDLService </code> objects.
+     * Support of multiple is backed by the requirements in the specification.
+     */
+    axis2_hash_t *svcs;
+    /**
+     * WSDL imports
+     */
+    axis2_array_list_t *imports;
+    /**
+     * WSDL Includes.
+     */
+    axis2_array_list_t *includes;
+    /**
+     * Will keep a map of all the Namespaces associated with the
+     * Definition Component and will be keyed by the Namespace prefix.
+     */
+    axis2_hash_t *namespaces;
+    
+} axis2_wsdl_desc_impl_t;
+
+#define AXIS2_INTF_TO_IMPL(wsdl_desc) ((axis2_wsdl_desc_impl_t *)wsdl_desc)
+	
+/*************************** Function headers *********************************/
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_free (axis2_wsdl_desc_t *wsdl_desc, 
+                        axis2_env_t **env);	
+
+/**
+ * Returns a Map of <code>wsdl_bindings</code> Objects keyed by the 
+ * <code>axis2_qname_t</code> of the Binding.
+ *
+ * @return
+ */
+axis2_hash_t *AXIS2_CALL
+axis2_wsdl_desc_get_bindings(axis2_wsdl_desc_t *wsdl_desc,  
+                                axis2_env_t **env);
+
+/**
+ * Sets the whole new set of Bindings to the axis2_wsd_desc.
+ *
+ * @param bindings
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_bindings(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_hash_t *bindings);
+
+/**
+ * The axis2_wsdl_binding Will be added to the map keyed  with its own qname.
+ * If the  axis2_wsdl_binding is null it will not be added.
+ * If the axis2_wsdl_binding is not null and  Binding name is null then
+ * error is set.
+ *
+ * @param binding <code>axis2_wsdl_binding</code> Object
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_add_binding(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_wsdl_binding_t *binding);
+
+/**
+ * Retrives the <code>axis2_wsdl_binding_t</code> by its qname. Wil return NULL
+ * if <code>axis2_wsdl_binding_t</code> is not found.
+ *
+ * @param qname The qname of the Binding.
+ * @return
+ */
+axis2_wsdl_binding_t *AXIS2_CALL
+axis2_wsdl_desc_get_binding(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_qname_t *qname);
+
+/**
+ * The Interface component will be added to the map keyed with its own name.
+ * If the Interface is NULL it will not be added.
+ * If the interface name is NULL an Error will be set and return.
+ *
+ * @param interface
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_add_interface(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_wsdl_interface_t *interface);
+
+/**
+ * The Interface will be returned if it exsists,
+ * otherwise null will be returned.
+ *
+ * @param qname qname of the Interface.
+ * @return The Interface with the relavent qname
+ */
+axis2_wsdl_interface_t *AXIS2_CALL
+axis2_wsdl_desc_get_interface(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_qname_t *qname);
+
+/**
+ * Method get_interfaces
+ *
+ * @return
+ */
+axis2_hash_t *AXIS2_CALL
+axis2_wsdl_desc_get_interfaces(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env);
+
+/**
+ * Method axis2_wsdl_desc_set_interfaces
+ *
+ * @param interfaces
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_interfaces(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_hash_t *interfaces);
+
+/**
+ * Method get_svcs
+ *
+ * @return
+ */
+axis2_hash_t *AXIS2_CALL
+axis2_wsdl_desc_get_svcs(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env);
+
+/**
+ * Method axis2_wsdl_desc_set_svcs
+ *
+ * @param svcs
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_svcs(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_hash_t *svcs);
+
+/**
+ * Will return the <code>axis2_wsdl_svc </code> if found otherwise return NULL.
+ *
+ * @param qname <code>qname</code> of the svc
+ * @return The svc with the relevant qname
+ */
+axis2_wsdl_svc_t *AXIS2_CALL
+axis2_wsdl_desc_get_svc(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_qname_t *qname);
+
+/**
+ * Will add the <code>axis2_wsdl_svc_t</code> to the map.
+ * If svc is NULL it will not be added.
+ * If the <code>axis2_wsdl_svc_t</code> name is NULL an error will be set.
+ *
+ * @param svc
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_add_svc(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_wsdl_svc_t *svc);
+
+/**
+ * Method get_target_namespace
+ *
+ * @return
+ */
+axis2_char_t *AXIS2_CALL
+axis2_wsdl_desc_get_target_namespace(axis2_wsdl_desc_t *wsdl_desc,
+                                        axis2_env_t **env);
+
+/**
+ * Method set_target_namespace
+ *
+ * @param target_namespace
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_target_namespace(axis2_wsdl_desc_t *wsdl_desc,
+                                        axis2_env_t **env,
+                                        axis2_char_t *target_namespace);
+
+/**
+ * Method get_types
+ *
+ * @return
+ */
+axis2_wsdl_types_t *AXIS2_CALL
+axis2_wsdl_desc_get_types(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env);
+
+/**
+ * Method axis2_wsdl_desc_set_types
+ *
+ * @param types
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_types(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_wsdl_types_t *types);
+
+/**
+ * Gets the name attribute of the WSDL 1.1 Definitions Element
+ *
+ * @return
+ */
+axis2_qname_t *AXIS2_CALL
+axis2_wsdl_desc_get_wsdl1_def_name(axis2_wsdl_desc_t *wsdl_desc,
+                                    axis2_env_t **env);
+
+/**
+ * Sets the name attribute of the WSDL 1.1 Definitions Element
+ *
+ * @param wsdl1_def_name
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_wsdl1_def_name(axis2_wsdl_desc_t *wsdl_desc,
+                                    axis2_env_t **env,
+                                    axis2_qname_t *wsdl1_def_name);
+
+/**
+ * Will return the Namespace URI as a String if there exists an
+ * Namespace URI associated with the given prefix, in the Definition
+ * Component, Will return NULL if not found.
+ *
+ * @param prefix Prefix defined in the Definitions elemet in the WSDL file
+ * @return The Namespace URI for the prefix.
+ */
+axis2_char_t *AXIS2_CALL
+axis2_wsdl_desc_get_namespace(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_char_t *prefix);
+
+/**
+ * Will return all the Namespaces associated with the Definition
+ * Component and will be keyed by the Napespace Prefix.
+ *
+ * @return
+ */
+axis2_hash_t *AXIS2_CALL
+axis2_wsdl_desc_get_namespaces(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env);
+
+/**
+ * Sets the Namespaces associated with the Difinition Component
+ * and they should be keyed by its Namespace Prefix.
+ *
+ * @param namespaces
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_namespaces(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_hash_t *namespaces);
+
+/**
+ * Returns the WSDL Imports in an <code>axis2_array_list_t</code>
+ *
+ * @return
+ */
+axis2_array_list_t *AXIS2_CALL
+axis2_wsdl_desc_get_imports(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t *env);
+
+/**
+ * Sets the imports as an <code>axis2_array_list_t</code>
+ *
+ * @param imports
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_imports(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_array_list_t *imports);
+
+/**
+ * Adds an import to the list.
+ *
+ * @param wsdl_import
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_add_import(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_wsdl_import_t *wsdl_import);
+
+/**
+ * Returns the Includes in an <code>axis2_array_list_t</code>
+ *
+ * @return
+ */
+axis2_array_list_t *AXIS2_CALL
+axis2_wsdl_desc_get_includes(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t *env);
+
+/**
+ * Sets the includes as an <code>axis2_array_list_t</code>
+ *
+ * @param includes
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_includes(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_array_list_t *includes);
+
+/**
+ * Adds an wsdl include to the list.
+ *
+ * @param wsdl_include
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_add_include(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_wsdl_include_t *wsdl_include);
+
+
+/************************* End of function headers ****************************/	
+
+axis2_wsdl_desc_t * AXIS2_CALL
+axis2_wsdl_desc_create (axis2_env_t **env)
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    
+	wsdl_desc_impl = (axis2_wsdl_desc_impl_t *) AXIS2_MALLOC ((*env)->
+        allocator, sizeof (axis2_wsdl_desc_impl_t));
+     
+	if(NULL == wsdl_desc_impl)
+	{
+		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+	}
+    
+    wsdl_desc_impl->wsdl1_def_name = NULL;
+    wsdl_desc_impl->target_namespace = NULL;
+    wsdl_desc_impl->types = NULL;
+    wsdl_desc_impl->interfaces = NULL;
+    wsdl_desc_impl->bindings = NULL;
+    wsdl_desc_impl->svcs = NULL;
+    wsdl_desc_impl->imports = NULL;
+    wsdl_desc_impl->includes = NULL;
+    wsdl_desc_impl->namespaces = NULL;
+    wsdl_desc_impl->wsdl_desc.ops = NULL;
+    
+    wsdl_desc_impl->wsdl_desc.component = axis2_wsdl_component_create(env);
+    
+	if(NULL == wsdl_desc_impl->wsdl_desc.component)
+	{
+        axis2_wsdl_desc_free(&(wsdl_desc_impl->wsdl_desc), env);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;        
+	}    
+    
+    wsdl_desc_impl->wsdl_desc.ops = AXIS2_MALLOC((*env)->allocator, 
+        sizeof(axis2_wsdl_desc_ops_t));
+	if(NULL == wsdl_desc_impl->wsdl_desc.ops)
+	{
+        axis2_wsdl_desc_free(&(wsdl_desc_impl->wsdl_desc), env);
+		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+	}
+	
+	wsdl_desc_impl->wsdl_desc.ops->free = axis2_wsdl_desc_free;
+    wsdl_desc_impl->wsdl_desc.ops->get_bindings = axis2_wsdl_desc_get_bindings;
+    wsdl_desc_impl->wsdl_desc.ops->set_bindings = axis2_wsdl_desc_set_bindings;
+    wsdl_desc_impl->wsdl_desc.ops->add_binding = axis2_wsdl_desc_add_binding;
+    wsdl_desc_impl->wsdl_desc.ops->get_binding = axis2_wsdl_desc_get_binding;
+    wsdl_desc_impl->wsdl_desc.ops->add_interface = axis2_wsdl_desc_add_interface;
+    wsdl_desc_impl->wsdl_desc.ops->get_interface = axis2_wsdl_desc_get_interface;
+    wsdl_desc_impl->wsdl_desc.ops->get_interfaces = axis2_wsdl_desc_get_interfaces;
+    wsdl_desc_impl->wsdl_desc.ops->set_interfaces = axis2_wsdl_desc_set_interfaces;
+    wsdl_desc_impl->wsdl_desc.ops->get_svcs = axis2_wsdl_desc_get_svcs;
+    wsdl_desc_impl->wsdl_desc.ops->set_svcs = axis2_wsdl_desc_set_svcs;
+    wsdl_desc_impl->wsdl_desc.ops->get_svc = axis2_wsdl_desc_get_svc;
+    wsdl_desc_impl->wsdl_desc.ops->add_svc = axis2_wsdl_desc_add_svc;
+    wsdl_desc_impl->wsdl_desc.ops->get_target_namespace = 
+        axis2_wsdl_desc_get_target_namespace;
+    wsdl_desc_impl->wsdl_desc.ops->set_target_namespace = 
+            axis2_wsdl_desc_set_target_namespace;
+    wsdl_desc_impl->wsdl_desc.ops->get_types = axis2_wsdl_desc_get_types;
+    wsdl_desc_impl->wsdl_desc.ops->set_types = axis2_wsdl_desc_set_types;
+    wsdl_desc_impl->wsdl_desc.ops->get_wsdl1_def_name = 
+            axis2_wsdl_desc_get_wsdl1_def_name;
+    wsdl_desc_impl->wsdl_desc.ops->set_wsdl1_def_name = 
+            axis2_wsdl_desc_set_wsdl1_def_name;
+    wsdl_desc_impl->wsdl_desc.ops->get_namespace = axis2_wsdl_desc_get_namespace;
+    wsdl_desc_impl->wsdl_desc.ops->get_namespaces = axis2_wsdl_desc_get_namespaces;
+    wsdl_desc_impl->wsdl_desc.ops->set_namespaces = axis2_wsdl_desc_set_namespaces;
+    wsdl_desc_impl->wsdl_desc.ops->get_imports = axis2_wsdl_desc_get_imports;
+    wsdl_desc_impl->wsdl_desc.ops->set_imports = axis2_wsdl_desc_set_imports;
+    wsdl_desc_impl->wsdl_desc.ops->add_import = axis2_wsdl_desc_add_import;
+    wsdl_desc_impl->wsdl_desc.ops->get_includes = axis2_wsdl_desc_get_includes;
+    wsdl_desc_impl->wsdl_desc.ops->set_includes = axis2_wsdl_desc_set_includes;
+    wsdl_desc_impl->wsdl_desc.ops->add_include = axis2_wsdl_desc_add_include; 
+    
+	return &(wsdl_desc_impl->wsdl_desc);
+}
+
+/*************************Function implementations*****************************/
+
+axis2_status_t AXIS2_CALL 
+axis2_wsdl_desc_free (
+                        axis2_wsdl_desc_t *wsdl_desc, 
+                        axis2_env_t **env)
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE); 
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+	if(wsdl_desc->ops)
+    {
+        AXIS2_FREE((*env)->allocator, wsdl_desc->ops);
+        wsdl_desc->ops = NULL;
+    }
+    
+    if(wsdl_desc->component)
+    {
+        AXIS2_WSDL_COMPONENT_FREE(wsdl_desc->component, env);
+        wsdl_desc->component = NULL;
+    }
+    
+    if(wsdl_desc_impl)
+        AXIS2_FREE((*env)->allocator, wsdl_desc_impl);
+    wsdl_desc_impl = NULL;
+    
+	return AXIS2_SUCCESS;
+}
+
+/**
+ * Returns a Map of <code>wsdl_bindings</code> Objects keyed by the 
+ * <code>axis2_qname_t</code> of the Binding.
+ *
+ * @return
+ */
+axis2_hash_t *AXIS2_CALL
+axis2_wsdl_desc_get_bindings(axis2_wsdl_desc_t *wsdl_desc,  
+                                axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    
+    return AXIS2_INTF_TO_IMPL(wsdl_desc)->bindings;
+}
+
+/**
+ * Sets the whole new set of Bindings to the axis2_wsd_desc.
+ *
+ * @param bindings
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_bindings(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_hash_t *bindings) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    /* TODO free previous bindings before assign new bindings */
+    wsdl_desc_impl->bindings = bindings;
+  
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * The axis2_wsdl_binding Will be added to the map keyed  with its own qname.
+ * If the  axis2_wsdl_binding is null it will not be added.
+ * If the axis2_wsdl_binding is not null and  Binding name is null then
+ * error is set.
+ *
+ * @param binding <code>axis2_wsdl_binding</code> Object
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_add_binding(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_wsdl_binding_t *binding) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+    axis2_qname_t *binding_qname = NULL;
+    axis2_char_t *binding_name = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, binding, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+
+    binding_qname = AXIS2_WSDL_BINDING_GET_NAME(binding, env);
+    if(NULL == binding_name)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_WSDL_BINDING_NAME_IS_REQUIRED,
+            AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    binding_name = AXIS2_QNAME_TO_STRING(binding_qname, env);
+    if(!wsdl_desc_impl->bindings)
+    {
+        wsdl_desc_impl->bindings = axis2_hash_make(env);
+        if(!wsdl_desc_impl->bindings)
+        {
+            AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+            return AXIS2_FAILURE;
+        }
+    }
+    axis2_hash_set(wsdl_desc_impl->bindings, binding_name, AXIS2_HASH_KEY_STRING,
+        binding);
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * Retrives the <code>axis2_wsdl_binding_t</code> by its qname. Wil return NULL
+ * if <code>axis2_wsdl_binding_t</code> is not found.
+ *
+ * @param qname The qname of the Binding.
+ * @return
+ */
+axis2_wsdl_binding_t *AXIS2_CALL
+axis2_wsdl_desc_get_binding(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_qname_t *qname) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+    axis2_char_t *name = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    name = AXIS2_QNAME_TO_STRING(qname, env);
+    if(wsdl_desc_impl->bindings)
+    {
+        return (axis2_wsdl_binding_t *) axis2_hash_get(wsdl_desc_impl->bindings, 
+            name, AXIS2_HASH_KEY_STRING);
+    }
+    return NULL;
+}
+
+/**
+ * The Interface component will be added to the map keyed with its own name.
+ * If the Interface is NULL it will not be added.
+ * If the interface name is NULL an Error will be set and return.
+ *
+ * @param interface
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_add_interface(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_wsdl_interface_t *interface) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+    axis2_qname_t *interface_qname = NULL;
+    axis2_char_t *interface_name = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, interface, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+
+    interface_qname = AXIS2_WSDL_INTERFACE_GET_NAME(interface, env);
+    if(NULL == interface_qname)
+    {
+        AXIS2_ERROR_SET((*env)->error, 
+            AXIS2_ERROR_WSDL_INTERFACE_NAME_IS_REQUIRED, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    interface_name = AXIS2_QNAME_TO_STRING(interface_qname, env);
+    if(!wsdl_desc_impl->interfaces)
+    {
+        wsdl_desc_impl->interfaces = axis2_hash_make(env);
+        if(!wsdl_desc_impl->interfaces)
+        {
+            AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+            return AXIS2_FAILURE;
+        }
+    }
+    axis2_hash_set(wsdl_desc_impl->interfaces, interface_name, 
+        AXIS2_HASH_KEY_STRING, interface);
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * The Interface will be returned if it exsists,
+ * otherwise null will be returned.
+ *
+ * @param qname qname of the Interface.
+ * @return The Interface with the relavent qname
+ */
+axis2_wsdl_interface_t *AXIS2_CALL
+axis2_wsdl_desc_get_interface(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_qname_t *qname) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+    axis2_char_t *name = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    name = AXIS2_QNAME_TO_STRING(qname, env);
+    if(wsdl_desc_impl->interfaces)
+    {
+        return (axis2_wsdl_interface_t *) axis2_hash_get(wsdl_desc_impl->interfaces, 
+            name, AXIS2_HASH_KEY_STRING);
+    }
+    return NULL;
+}
+
+/**
+ * Method get_interfaces
+ *
+ * @return
+ */
+axis2_hash_t *AXIS2_CALL
+axis2_wsdl_desc_get_interfaces(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_INTF_TO_IMPL(wsdl_desc)->interfaces;
+}
+
+/**
+ * Method axis2_wsdl_desc_set_interfaces
+ *
+ * @param interfaces
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_interfaces(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_hash_t *interfaces) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    /*TODO free existing interfaces before setting new map */
+    wsdl_desc_impl->interfaces = interfaces;
+  
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * Method get_svcs
+ *
+ * @return
+ */
+axis2_hash_t *AXIS2_CALL
+axis2_wsdl_desc_get_svcs(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_INTF_TO_IMPL(wsdl_desc)->svcs;
+}
+
+/**
+ * Method axis2_wsdl_desc_set_svcs
+ *
+ * @param svcs
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_svcs(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_hash_t *svcs) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    /*TODO free existing svcs before setting new map */
+    wsdl_desc_impl->svcs = svcs;
+  
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * Will return the <code>axis2_wsdl_svc </code> if found otherwise return NULL.
+ *
+ * @param qname <code>qname</code> of the svc
+ * @return The svc with the relevant qname
+ */
+axis2_wsdl_svc_t *AXIS2_CALL
+axis2_wsdl_desc_get_svc(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_qname_t *qname) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+    axis2_char_t *name = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    name = AXIS2_QNAME_TO_STRING(qname, env);
+    if(wsdl_desc_impl->svcs)
+    {
+        return (axis2_wsdl_svc_t *) axis2_hash_get(wsdl_desc_impl->svcs, 
+            name, AXIS2_HASH_KEY_STRING);
+    }
+    return NULL;
+}
+
+/**
+ * Will add the <code>axis2_wsdl_svc_t</code> to the map.
+ * If svc is NULL it will not be added.
+ * If the <code>axis2_wsdl_svc_t</code> name is NULL an error will be set.
+ *
+ * @param svc
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_add_svc(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_wsdl_svc_t *svc) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+    axis2_qname_t *svc_qname = NULL;
+    axis2_char_t *svc_name = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, svc, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+
+    svc_qname = AXIS2_WSDL_SVC_GET_QNAME(svc, env);
+    if(NULL == svc_qname)
+    {
+        AXIS2_ERROR_SET((*env)->error, 
+            AXIS2_ERROR_WSDL_SVC_NAME_IS_REQUIRED, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    svc_name = AXIS2_QNAME_TO_STRING(svc_qname, env);
+    if(!wsdl_desc_impl->svcs)
+    {
+        wsdl_desc_impl->svcs = axis2_hash_make(env);
+        if(!wsdl_desc_impl->svcs)
+        {
+            AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+            return AXIS2_FAILURE;
+        }
+    }
+    axis2_hash_set(wsdl_desc_impl->svcs, svc_name, 
+        AXIS2_HASH_KEY_STRING, svc);
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * Method get_target_namespace
+ *
+ * @return
+ */
+axis2_char_t *AXIS2_CALL
+axis2_wsdl_desc_get_target_namespace(axis2_wsdl_desc_t *wsdl_desc,
+                                        axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_INTF_TO_IMPL(wsdl_desc)->target_namespace;
+}
+
+/**
+ * Method set_target_namespace
+ *
+ * @param target_namespace
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_target_namespace(axis2_wsdl_desc_t *wsdl_desc,
+                                        axis2_env_t **env,
+                                        axis2_char_t *target_namespace) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, target_namespace, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+
+    if(wsdl_desc_impl->target_namespace)
+    {
+        AXIS2_FREE((*env)->allocator, wsdl_desc_impl->target_namespace);
+        wsdl_desc_impl->target_namespace = NULL;
+    }
+    wsdl_desc_impl->target_namespace = AXIS2_STRDUP(target_namespace, env);
+    if(wsdl_desc_impl->target_namespace)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * Method get_types
+ *
+ * @return
+ */
+axis2_wsdl_types_t *AXIS2_CALL
+axis2_wsdl_desc_get_types(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_INTF_TO_IMPL(wsdl_desc)->types;
+}
+
+/**
+ * Method axis2_wsdl_desc_set_types
+ *
+ * @param types
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_types(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_wsdl_types_t *types) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    AXIS2_PARAM_CHECK((*env)->error, types, AXIS2_FAILURE);
+    
+    if(wsdl_desc_impl->types)
+    {
+        AXIS2_WSDL_TYPES_FREE(wsdl_desc_impl->types, env);
+        wsdl_desc_impl->types = NULL;
+    }
+    wsdl_desc_impl->types = types;
+  
+    return AXIS2_SUCCESS;
+}
+
+
+/**
+ * Gets the name attribute of the WSDL 1.1 Definitions Element
+ *
+ * @return
+ */
+axis2_qname_t *AXIS2_CALL
+axis2_wsdl_desc_get_wsdl1_def_name(axis2_wsdl_desc_t *wsdl_desc,
+                                    axis2_env_t **env)
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_INTF_TO_IMPL(wsdl_desc)->wsdl1_def_name;
+}
+
+/**
+ * Sets the name attribute of the WSDL 1.1 Definitions Element
+ *
+ * @param wsdl1_def_name
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_wsdl1_def_name(axis2_wsdl_desc_t *wsdl_desc,
+                                    axis2_env_t **env,
+                                    axis2_qname_t *wsdl1_def_name) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    if(wsdl_desc_impl->wsdl1_def_name)
+    {
+        AXIS2_QNAME_FREE(wsdl_desc_impl->wsdl1_def_name, env);
+        wsdl_desc_impl->wsdl1_def_name = NULL;
+    }
+    wsdl_desc_impl->wsdl1_def_name = AXIS2_QNAME_CLONE(wsdl1_def_name, env);
+  
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * Will return the Namespace URI as a String if there exists an
+ * Namespace URI associated with the given prefix, in the Definition
+ * Component, Will return NULL if not found.
+ *
+ * @param prefix Prefix defined in the Definitions elemet in the WSDL file
+ * @return The Namespace URI for the prefix.
+ */
+axis2_char_t *AXIS2_CALL
+axis2_wsdl_desc_get_namespace(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env,
+                                axis2_char_t *prefix) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK((*env)->error, prefix, NULL);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+
+    return (axis2_char_t *) axis2_hash_get(wsdl_desc_impl->namespaces, prefix, 
+        AXIS2_HASH_KEY_STRING);
+}
+
+/**
+ * Will return all the Namespaces associated with the Definition
+ * Component and will be keyed by the Napespace Prefix.
+ *
+ * @return
+ */
+axis2_hash_t *AXIS2_CALL
+axis2_wsdl_desc_get_namespaces(axis2_wsdl_desc_t *wsdl_desc,
+                                axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    
+    return AXIS2_INTF_TO_IMPL(wsdl_desc)->namespaces;
+}
+
+/**
+ * Sets the Namespaces associated with the Difinition Component
+ * and they should be keyed by its Namespace Prefix.
+ *
+ * @param namespaces
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_namespaces(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_hash_t *namespaces) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    /*TODO free existing namespaces before setting new map */
+    wsdl_desc_impl->namespaces = namespaces;
+  
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * Returns the WSDL Imports in an <code>axis2_array_list_t</code>
+ *
+ * @return
+ */
+axis2_array_list_t *AXIS2_CALL
+axis2_wsdl_desc_get_imports(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t *env) 
+{
+    return AXIS2_INTF_TO_IMPL(wsdl_desc)->imports;
+}
+
+/**
+ * Sets the imports as an <code>axis2_array_list_t</code>
+ *
+ * @param imports
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_imports(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_array_list_t *imports) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    AXIS2_PARAM_CHECK((*env)->error, imports, AXIS2_FAILURE);
+    
+    if(wsdl_desc_impl->imports)
+    {
+        /* TODO Free elements of the array */
+        AXIS2_ARRAY_LIST_FREE(wsdl_desc_impl->imports, env);
+        wsdl_desc_impl->imports = NULL;
+    }
+    wsdl_desc_impl->imports = imports;
+  
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * Adds an import to the list.
+ *
+ * @param wsdl_import
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_add_import(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_wsdl_import_t *wsdl_import) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, wsdl_import, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    return AXIS2_ARRAY_LIST_ADD(wsdl_desc_impl->imports, env, wsdl_import);
+}
+
+/**
+ * Returns the Includes in an <code>axis2_array_list_t</code>
+ *
+ * @return
+ */
+axis2_array_list_t *AXIS2_CALL
+axis2_wsdl_desc_get_includes(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t *env) 
+{
+    return AXIS2_INTF_TO_IMPL(wsdl_desc)->includes;
+}
+
+/**
+ * Sets the includes as an <code>axis2_array_list_t</code>
+ *
+ * @param includes
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_set_includes(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_array_list_t *includes) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    AXIS2_PARAM_CHECK((*env)->error, includes, AXIS2_FAILURE);
+    
+    if(wsdl_desc_impl->includes)
+    {
+        /* TODO Free elements of the array */
+        AXIS2_ARRAY_LIST_FREE(wsdl_desc_impl->includes, env);
+        wsdl_desc_impl->includes = NULL;
+    }
+    wsdl_desc_impl->includes = includes;
+  
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * Adds an wsdl include to the list.
+ *
+ * @param wsdl_include
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_desc_add_include(axis2_wsdl_desc_t *wsdl_desc,
+                            axis2_env_t **env,
+                            axis2_wsdl_include_t *wsdl_include) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, wsdl_include, AXIS2_FAILURE);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    return AXIS2_ARRAY_LIST_ADD(wsdl_desc_impl->includes, env, wsdl_include);
+}
+
+axis2_wsdl_binding_t *AXIS2_CALL
+axis2_wsdl_desc_get_first_binding(axis2_wsdl_desc_t *wsdl_desc,
+                                    axis2_env_t **env) 
+{
+    axis2_wsdl_desc_impl_t *wsdl_desc_impl = NULL;
+    axis2_hash_index_t *index = NULL;
+    void *v = NULL;
+
+    AXIS2_ENV_CHECK(env, NULL);
+    wsdl_desc_impl = AXIS2_INTF_TO_IMPL(wsdl_desc);
+    
+    index = axis2_hash_first(wsdl_desc_impl->bindings, env);
+    axis2_hash_this (index, NULL, NULL, &v);
+    if(v)
+        return (axis2_wsdl_binding_t *)v;
+    return NULL;
+}

Added: webservices/axis2/trunk/c/modules/wsdl/wsdl_extensible_attribute.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/wsdl_extensible_attribute.c?rev=386001&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/wsdl_extensible_attribute.c (added)
+++ webservices/axis2/trunk/c/modules/wsdl/wsdl_extensible_attribute.c Wed Mar 15 00:43:05 2006
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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 <axis2_wsdl_extensible_attribute.h>
+
+/** 
+ * @brief Wsdl extensible attribute struct impl
+ *	Wsdl extensible attribute
+ */ 
+typedef struct axis2_wsdl_extensible_attribute_impl
+{
+	axis2_wsdl_extensible_attribute_t extensible_attribute;
+    
+    axis2_qname_t *key;
+    axis2_qname_t *value;
+
+    
+} axis2_wsdl_extensible_attribute_impl_t;
+
+#define AXIS2_INTF_TO_IMPL(extensible_attribute) \
+		((axis2_wsdl_extensible_attribute_impl_t *)extensible_attribute)
+
+/************************* Function prototypes ********************************/
+
+axis2_status_t AXIS2_CALL
+	axis2_wsdl_extensible_attribute_free (
+                axis2_wsdl_extensible_attribute_t *extensible_attribute,
+				axis2_env_t **env);
+
+axis2_qname_t *AXIS2_CALL
+axis2_wsdl_extensible_attribute_get_key(
+                            axis2_wsdl_extensible_attribute_t *extensible_attribute,
+                            axis2_env_t **env);
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_extensible_attribute_set_key(
+                            axis2_wsdl_extensible_attribute_t *extensible_attribute,
+                            axis2_env_t **env,
+                            axis2_qname_t *key);
+                        
+axis2_qname_t *AXIS2_CALL
+axis2_wsdl_extensible_attribute_get_value(
+                            axis2_wsdl_extensible_attribute_t *extensible_attribute,
+                            axis2_env_t **env);
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_extensible_attribute_set_value(
+                            axis2_wsdl_extensible_attribute_t *extensible_attribute,
+                            axis2_env_t **env,
+                            axis2_qname_t *value);
+                        
+/************************** End of function prototypes ************************/
+
+axis2_wsdl_extensible_attribute_t * AXIS2_CALL 
+axis2_wsdl_extensible_attribute_create (axis2_env_t **env)
+{
+    axis2_wsdl_extensible_attribute_impl_t *extensible_attribute_impl = NULL;
+    
+	AXIS2_ENV_CHECK(env, NULL);
+	
+	extensible_attribute_impl = (axis2_wsdl_extensible_attribute_impl_t *) 
+        AXIS2_MALLOC((*env)->allocator, sizeof(axis2_wsdl_extensible_attribute_impl_t));
+	
+	
+	if(NULL == extensible_attribute_impl)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;        
+    }
+    
+    extensible_attribute_impl->key = NULL;
+    extensible_attribute_impl->value = NULL;
+    extensible_attribute_impl->extensible_attribute.ops = NULL;
+    
+	extensible_attribute_impl->extensible_attribute.ops = 
+		AXIS2_MALLOC ((*env)->allocator, sizeof(axis2_wsdl_extensible_attribute_ops_t));
+	if(NULL == extensible_attribute_impl->extensible_attribute.ops)
+    {
+        axis2_wsdl_extensible_attribute_free(&(extensible_attribute_impl->
+            extensible_attribute), env);
+		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    
+    extensible_attribute_impl->extensible_attribute.ops->free =  
+        axis2_wsdl_extensible_attribute_free;
+    
+	extensible_attribute_impl->extensible_attribute.ops->get_key =  
+        axis2_wsdl_extensible_attribute_get_key;
+	extensible_attribute_impl->extensible_attribute.ops->set_key = 
+        axis2_wsdl_extensible_attribute_set_key;
+	extensible_attribute_impl->extensible_attribute.ops->get_value =  
+        axis2_wsdl_extensible_attribute_get_value;
+	extensible_attribute_impl->extensible_attribute.ops->set_value = 
+        axis2_wsdl_extensible_attribute_set_value;
+	
+    
+	return &(extensible_attribute_impl->extensible_attribute);
+}
+
+/***************************Function implementation****************************/
+
+axis2_status_t AXIS2_CALL 
+axis2_wsdl_extensible_attribute_free (
+                        axis2_wsdl_extensible_attribute_t *extensible_attribute, 
+                        axis2_env_t **env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+	if(NULL != extensible_attribute->ops)
+        AXIS2_FREE((*env)->allocator, extensible_attribute->ops);
+    
+    if(NULL != AXIS2_INTF_TO_IMPL(extensible_attribute)->key)
+    {
+        AXIS2_QNAME_FREE(AXIS2_INTF_TO_IMPL(extensible_attribute)->
+            key, env);
+        AXIS2_INTF_TO_IMPL(extensible_attribute)->key = NULL;    
+    }
+    
+    if(NULL != AXIS2_INTF_TO_IMPL(extensible_attribute)->value)
+    {
+        AXIS2_QNAME_FREE(AXIS2_INTF_TO_IMPL(extensible_attribute)->
+            value, env);
+        AXIS2_INTF_TO_IMPL(extensible_attribute)->value = NULL;
+    }
+    
+    AXIS2_FREE((*env)->allocator, AXIS2_INTF_TO_IMPL(extensible_attribute));
+    
+	return AXIS2_SUCCESS;
+}
+
+axis2_qname_t *AXIS2_CALL
+axis2_wsdl_extensible_attribute_get_key(
+                            axis2_wsdl_extensible_attribute_t *extensible_attribute,
+                            axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_INTF_TO_IMPL(extensible_attribute)->key;
+}
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_extensible_attribute_set_key(
+                            axis2_wsdl_extensible_attribute_t *extensible_attribute,
+                            axis2_env_t **env,
+                            axis2_qname_t *key) 
+{
+    axis2_wsdl_extensible_attribute_impl_t *extensible_attribute_impl = 
+        AXIS2_INTF_TO_IMPL(extensible_attribute);
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, key, AXIS2_FAILURE);
+    
+    if(extensible_attribute_impl->key)
+    {
+        AXIS2_QNAME_FREE(extensible_attribute_impl->key, env);
+        extensible_attribute_impl->key = NULL;
+    }
+    
+    extensible_attribute_impl->key = AXIS2_QNAME_CLONE(key, env);
+    if(!extensible_attribute_impl->key)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
+}
+
+axis2_qname_t *AXIS2_CALL
+axis2_wsdl_extensible_attribute_get_value(
+                            axis2_wsdl_extensible_attribute_t *extensible_attribute,
+                            axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_INTF_TO_IMPL(extensible_attribute)->value;
+}
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_extensible_attribute_set_value(
+                            axis2_wsdl_extensible_attribute_t *extensible_attribute,
+                            axis2_env_t **env,
+                            axis2_qname_t *value) 
+{
+    axis2_wsdl_extensible_attribute_impl_t *extensible_attribute_impl = 
+        AXIS2_INTF_TO_IMPL(extensible_attribute);
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, value, AXIS2_FAILURE);
+    
+    if(extensible_attribute_impl->value)
+    {
+        AXIS2_QNAME_FREE(extensible_attribute_impl->value, env);
+        extensible_attribute_impl->value = NULL;
+    }
+    
+    extensible_attribute_impl->value = AXIS2_QNAME_CLONE(value, env);
+    if(!extensible_attribute_impl->value)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
+}

Modified: webservices/axis2/trunk/c/modules/wsdl/wsdl_extensible_element.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/wsdl_extensible_element.c?rev=386001&r1=386000&r2=386001&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/wsdl_extensible_element.c (original)
+++ webservices/axis2/trunk/c/modules/wsdl/wsdl_extensible_element.c Wed Mar 15 00:43:05 2006
@@ -182,6 +182,11 @@
         extensible_element_impl->type = NULL;
     }
     
-    extensible_element_impl->type = type;
+    extensible_element_impl->type = AXIS2_QNAME_CLONE(type, env);
+    if(!extensible_element_impl->type)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    } 
     return AXIS2_SUCCESS;
 }

Modified: webservices/axis2/trunk/c/modules/wsdl/wsdl_feature.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/wsdl_feature.c?rev=386001&r1=386000&r2=386001&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/wsdl_feature.c (original)
+++ webservices/axis2/trunk/c/modules/wsdl/wsdl_feature.c Wed Mar 15 00:43:05 2006
@@ -167,7 +167,12 @@
         AXIS2_FREE((*env)->allocator, feature_impl->name);
         feature_impl->name = NULL;
     }
-    feature_impl->name = name;
+    feature_impl->name = AXIS2_STRDUP(name, env);
+    if(!feature_impl->name)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
     return AXIS2_SUCCESS;
 }
 

Added: webservices/axis2/trunk/c/modules/wsdl/wsdl_import.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/wsdl_import.c?rev=386001&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/wsdl_import.c (added)
+++ webservices/axis2/trunk/c/modules/wsdl/wsdl_import.c Wed Mar 15 00:43:05 2006
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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 <axis2_wsdl_import.h>
+
+/** 
+ * @brief Wsdl import struct impl
+ *	Wsdl imports  
+ */ 
+typedef struct axis2_wsdl_import_impl
+{
+	axis2_wsdl_import_t wsdl_import;
+    
+    axis2_char_t *location;
+    axis2_char_t *namespace;	
+} axis2_wsdl_import_impl_t;
+
+#define AXIS2_INTF_TO_IMPL(wsdl_import) \
+		((axis2_wsdl_import_impl_t *)wsdl_import)
+
+/************************* Function prototypes ********************************/
+
+axis2_status_t AXIS2_CALL
+	axis2_wsdl_import_free (axis2_wsdl_import_t *wsdl_import,
+									axis2_env_t **env);
+
+axis2_char_t *AXIS2_CALL
+axis2_wsdl_import_get_namespace(axis2_wsdl_import_t *wsdl_import,
+                                axis2_env_t **env);
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_import_set_namespace(axis2_wsdl_import_t *wsdl_import,
+                                axis2_env_t **env,
+                                axis2_char_t *namespace);
+
+axis2_char_t *AXIS2_CALL
+axis2_wsdl_import_get_location(axis2_wsdl_import_t *wsdl_import,
+                                axis2_env_t **env);
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_import_set_location(axis2_wsdl_import_t *wsdl_import,
+                                axis2_env_t **env,
+                                axis2_char_t *location);
+                                
+/************************** End of function prototypes ************************/
+
+axis2_wsdl_import_t * AXIS2_CALL 
+axis2_wsdl_import_create (axis2_env_t **env)
+{
+    axis2_wsdl_import_impl_t *wsdl_import_impl = NULL;
+    
+	AXIS2_ENV_CHECK(env, NULL);
+	
+	wsdl_import_impl = (axis2_wsdl_import_impl_t *) AXIS2_MALLOC((*env)->allocator,
+			sizeof(axis2_wsdl_import_impl_t));
+	
+	
+	if(NULL == wsdl_import_impl)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); 
+        return NULL;
+    }
+    
+    wsdl_import_impl->namespace = NULL;
+    wsdl_import_impl->location = NULL;
+    wsdl_import_impl->wsdl_import.ops = NULL;
+    wsdl_import_impl->wsdl_import.wsdl_component = NULL;
+	
+    wsdl_import_impl->wsdl_import.wsdl_component = axis2_wsdl_component_create(env);
+    if(NULL == wsdl_import_impl->wsdl_import.wsdl_component)
+    {
+        axis2_wsdl_import_free(&(wsdl_import_impl->wsdl_import), env);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }    
+    
+	wsdl_import_impl->wsdl_import.ops = 
+		AXIS2_MALLOC ((*env)->allocator, sizeof(axis2_wsdl_import_ops_t));
+	if(NULL == wsdl_import_impl->wsdl_import.ops)
+    {
+        axis2_wsdl_import_free(&(wsdl_import_impl->wsdl_import), env);
+		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    
+	wsdl_import_impl->wsdl_import.ops->free =  axis2_wsdl_import_free;
+	wsdl_import_impl->wsdl_import.ops->get_namespace = 
+        axis2_wsdl_import_get_namespace;
+    wsdl_import_impl->wsdl_import.ops->set_namespace = 
+        axis2_wsdl_import_set_namespace;
+	wsdl_import_impl->wsdl_import.ops->get_location = 
+        axis2_wsdl_import_get_location;
+    wsdl_import_impl->wsdl_import.ops->set_location = 
+        axis2_wsdl_import_set_location;
+	
+	return &(wsdl_import_impl->wsdl_import);
+}
+
+/***************************Function implementation****************************/
+
+axis2_status_t AXIS2_CALL 
+axis2_wsdl_import_free (axis2_wsdl_import_t *wsdl_import, 
+                            axis2_env_t **env)
+{
+    axis2_wsdl_import_impl_t *import_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    
+    import_impl = AXIS2_INTF_TO_IMPL(wsdl_import);
+    
+	if(NULL != wsdl_import->ops)
+        AXIS2_FREE((*env)->allocator, wsdl_import->ops);
+    
+    if(NULL != import_impl->namespace)
+    {
+        AXIS2_FREE((*env)->allocator, import_impl->namespace);
+        import_impl->namespace = NULL;
+    }
+
+    if(NULL != import_impl->location)
+    {
+        AXIS2_FREE((*env)->allocator, import_impl->location);
+        import_impl->location = NULL;
+    }
+    
+    if(NULL != wsdl_import->wsdl_component)
+    {
+        AXIS2_WSDL_COMPONENT_FREE(wsdl_import->wsdl_component, env);
+        wsdl_import->wsdl_component = NULL;
+    }
+    
+    AXIS2_FREE((*env)->allocator, import_impl);
+    import_impl = NULL;
+    
+	return AXIS2_SUCCESS;
+}
+
+axis2_char_t *AXIS2_CALL
+axis2_wsdl_import_get_namespace(axis2_wsdl_import_t *wsdl_import,
+                                axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_INTF_TO_IMPL(wsdl_import)->namespace;
+}
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_import_set_namespace(axis2_wsdl_import_t *wsdl_import,
+                                axis2_env_t **env,
+                                axis2_char_t *namespace) 
+{
+    axis2_wsdl_import_impl_t *import_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, namespace, AXIS2_FAILURE);
+    
+    import_impl = AXIS2_INTF_TO_IMPL(wsdl_import);
+    
+    if(import_impl->namespace)
+    {
+        AXIS2_FREE((*env)->allocator, import_impl->namespace);
+        import_impl->namespace = NULL;
+    }
+    import_impl->namespace = AXIS2_STRDUP(namespace, env);
+    if(!import_impl->namespace)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
+}
+
+axis2_char_t *AXIS2_CALL
+axis2_wsdl_import_get_location(axis2_wsdl_import_t *wsdl_import,
+                                axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_INTF_TO_IMPL(wsdl_import)->location;
+}
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_import_set_location(axis2_wsdl_import_t *wsdl_import,
+                                axis2_env_t **env,
+                                axis2_char_t *location) 
+{
+    axis2_wsdl_import_impl_t *import_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, location, AXIS2_FAILURE);
+    
+    import_impl = AXIS2_INTF_TO_IMPL(wsdl_import);
+    
+    if(import_impl->location)
+    {
+        AXIS2_FREE((*env)->allocator, import_impl->location);
+        import_impl->location = NULL;
+    }
+    import_impl->location = AXIS2_STRDUP(location, env);
+    if(!import_impl->location)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
+}

Added: webservices/axis2/trunk/c/modules/wsdl/wsdl_include.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/wsdl_include.c?rev=386001&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/wsdl_include.c (added)
+++ webservices/axis2/trunk/c/modules/wsdl/wsdl_include.c Wed Mar 15 00:43:05 2006
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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 <axis2_wsdl_include.h>
+
+/** 
+ * @brief Wsdl Include struct impl
+ *	Wsdl Includes  
+ */ 
+typedef struct axis2_wsdl_include_impl
+{
+	axis2_wsdl_include_t wsdl_include;
+    
+    axis2_char_t *location;
+} axis2_wsdl_include_impl_t;
+
+#define AXIS2_INTF_TO_IMPL(wsdl_include) \
+		((axis2_wsdl_include_impl_t *)wsdl_include)
+
+/************************* Function prototypes ********************************/
+
+axis2_status_t AXIS2_CALL
+	axis2_wsdl_include_free (axis2_wsdl_include_t *wsdl_include,
+									axis2_env_t **env);
+
+axis2_char_t *AXIS2_CALL
+axis2_wsdl_include_get_location(axis2_wsdl_include_t *wsdl_include,
+                                axis2_env_t **env);
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_include_set_location(axis2_wsdl_include_t *wsdl_include,
+                                axis2_env_t **env,
+                                axis2_char_t *location);
+                                
+/************************** End of function prototypes ************************/
+
+axis2_wsdl_include_t * AXIS2_CALL 
+axis2_wsdl_include_create (axis2_env_t **env)
+{
+    axis2_wsdl_include_impl_t *wsdl_include_impl = NULL;
+    
+	AXIS2_ENV_CHECK(env, NULL);
+	
+	wsdl_include_impl = (axis2_wsdl_include_impl_t *) AXIS2_MALLOC((*env)->allocator,
+			sizeof(axis2_wsdl_include_impl_t));
+	
+	
+	if(NULL == wsdl_include_impl)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); 
+        return NULL;
+    }
+    
+    wsdl_include_impl->location = NULL;
+    wsdl_include_impl->wsdl_include.ops = NULL;
+    wsdl_include_impl->wsdl_include.wsdl_component = NULL;
+	
+    wsdl_include_impl->wsdl_include.wsdl_component = axis2_wsdl_component_create(env);
+    if(NULL == wsdl_include_impl->wsdl_include.wsdl_component)
+    {
+        axis2_wsdl_include_free(&(wsdl_include_impl->wsdl_include), env);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }    
+    
+	wsdl_include_impl->wsdl_include.ops = 
+		AXIS2_MALLOC ((*env)->allocator, sizeof(axis2_wsdl_include_ops_t));
+	if(NULL == wsdl_include_impl->wsdl_include.ops)
+    {
+        axis2_wsdl_include_free(&(wsdl_include_impl->wsdl_include), env);
+		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    
+	wsdl_include_impl->wsdl_include.ops->free =  axis2_wsdl_include_free;
+	wsdl_include_impl->wsdl_include.ops->get_location = 
+        axis2_wsdl_include_get_location;
+    wsdl_include_impl->wsdl_include.ops->set_location = 
+        axis2_wsdl_include_set_location;
+	
+	return &(wsdl_include_impl->wsdl_include);
+}
+
+/***************************Function implementation****************************/
+
+axis2_status_t AXIS2_CALL 
+axis2_wsdl_include_free (axis2_wsdl_include_t *wsdl_include, 
+                            axis2_env_t **env)
+{
+    axis2_wsdl_include_impl_t *include_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    
+    include_impl = AXIS2_INTF_TO_IMPL(wsdl_include);
+    
+	if(NULL != wsdl_include->ops)
+        AXIS2_FREE((*env)->allocator, wsdl_include->ops);
+
+    if(NULL != include_impl->location)
+    {
+        AXIS2_FREE((*env)->allocator, include_impl->location);
+        include_impl->location = NULL;
+    }
+    
+    if(NULL != wsdl_include->wsdl_component)
+    {
+        AXIS2_WSDL_COMPONENT_FREE(wsdl_include->wsdl_component, env);
+        wsdl_include->wsdl_component = NULL;
+    }
+    
+    AXIS2_FREE((*env)->allocator, include_impl);
+    include_impl = NULL;
+    
+	return AXIS2_SUCCESS;
+}
+
+axis2_char_t *AXIS2_CALL
+axis2_wsdl_include_get_location(axis2_wsdl_include_t *wsdl_include,
+                                axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_INTF_TO_IMPL(wsdl_include)->location;
+}
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_include_set_location(axis2_wsdl_include_t *wsdl_include,
+                                axis2_env_t **env,
+                                axis2_char_t *location) 
+{
+    axis2_wsdl_include_impl_t *include_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, location, AXIS2_FAILURE);
+    
+    include_impl = AXIS2_INTF_TO_IMPL(wsdl_include);
+    
+    if(include_impl->location)
+    {
+        AXIS2_FREE((*env)->allocator, include_impl->location);
+        include_impl->location = NULL;
+    }
+    include_impl->location = AXIS2_STRDUP(location, env);
+    if(!include_impl->location)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
+}

Added: webservices/axis2/trunk/c/modules/wsdl/wsdl_types.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/wsdl_types.c?rev=386001&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/wsdl_types.c (added)
+++ webservices/axis2/trunk/c/modules/wsdl/wsdl_types.c Wed Mar 15 00:43:05 2006
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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 <axis2_wsdl_types.h>
+#include <axis2_wsdl_extensible_element.h>
+#include <axis2_wsdl_extensible_component.h>
+
+/** 
+ * @brief Wsdl Types struct impl
+ *	Axis2 Wsdl Types Implementation 
+ */ 
+typedef struct axis2_wsdl_types_impl
+{
+	axis2_wsdl_types_t wsdl_types;
+    
+} axis2_wsdl_types_impl_t;
+
+#define AXIS2_INTF_TO_IMPL(wsdl_types) ((axis2_wsdl_types_impl_t *)wsdl_types)
+	
+/*************************** Function headers *********************************/
+
+axis2_status_t AXIS2_CALL
+axis2_wsdl_types_free (axis2_wsdl_types_t *wsdl_types, 
+                        axis2_env_t **env);	
+
+/**
+ * Adds the <code>ExtensionElement</code> to the map keyed with the 
+ * <code>axis2_qname_t</code>
+ *
+ * @param element
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_types_add_element(axis2_wsdl_types_t *wsdl_types,
+                                axis2_env_t **env,
+                                axis2_wsdl_extensible_element_t *element);
+
+
+/**
+ * Will return the first Element with the given <code>QName</code>
+ * Returns null if not found.
+ *
+ * @param qname
+ * @return
+ */
+axis2_wsdl_extensible_element_t *AXIS2_CALL
+axis2_wsdl_types_get_first_element(axis2_wsdl_types_t *wsdl_types,
+                                    axis2_env_t **env,
+                                    axis2_qname_t *qname);
+
+/************************* End of function headers ****************************/	
+
+axis2_wsdl_types_t * AXIS2_CALL
+axis2_wsdl_types_create (axis2_env_t **env)
+{
+    axis2_wsdl_types_impl_t *wsdl_types_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    
+	wsdl_types_impl = (axis2_wsdl_types_impl_t *) AXIS2_MALLOC ((*env)->
+        allocator, sizeof (axis2_wsdl_types_impl_t));
+     
+	if(NULL == wsdl_types_impl)
+	{
+		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+	}
+    
+    wsdl_types_impl->wsdl_types.ops = NULL;
+    
+    wsdl_types_impl->wsdl_types.ext_component = 
+        axis2_wsdl_extensible_component_create(env);
+    
+	if(NULL == wsdl_types_impl->wsdl_types.ext_component)
+	{
+        axis2_wsdl_types_free(&(wsdl_types_impl->wsdl_types), env);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;        
+	}    
+    
+    wsdl_types_impl->wsdl_types.ops = AXIS2_MALLOC((*env)->allocator, 
+        sizeof(axis2_wsdl_types_ops_t));
+	if(NULL == wsdl_types_impl->wsdl_types.ops)
+	{
+        axis2_wsdl_types_free(&(wsdl_types_impl->wsdl_types), env);
+		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+	}
+	
+	wsdl_types_impl->wsdl_types.ops->free = axis2_wsdl_types_free;
+    wsdl_types_impl->wsdl_types.ops->add_element = axis2_wsdl_types_add_element;
+    wsdl_types_impl->wsdl_types.ops->get_first_element = 
+            axis2_wsdl_types_get_first_element;
+	return &(wsdl_types_impl->wsdl_types);
+}
+
+/*************************Function implementations*****************************/
+
+axis2_status_t AXIS2_CALL 
+axis2_wsdl_types_free (
+                        axis2_wsdl_types_t *wsdl_types, 
+                        axis2_env_t **env)
+{
+    axis2_wsdl_types_impl_t *wsdl_types_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE); 
+    wsdl_types_impl = AXIS2_INTF_TO_IMPL(wsdl_types);
+    
+	if(wsdl_types->ops)
+    {
+        AXIS2_FREE((*env)->allocator, wsdl_types->ops);
+        wsdl_types->ops = NULL;
+    }
+    
+    if(wsdl_types->ext_component)
+    {
+        AXIS2_WSDL_COMPONENT_FREE(wsdl_types->ext_component, env);
+        wsdl_types->ext_component = NULL;
+    }
+    
+    if(wsdl_types_impl)
+        AXIS2_FREE((*env)->allocator, wsdl_types_impl);
+    wsdl_types_impl = NULL;
+    
+	return AXIS2_SUCCESS;
+}
+
+
+/**
+ * Adds the <code>ExtensionElement</code> to the map keyed with the 
+ * <code>axis2_qname_t</code>
+ *
+ * @param element
+ */
+axis2_status_t AXIS2_CALL
+axis2_wsdl_types_add_element(axis2_wsdl_types_t *wsdl_types,
+                                axis2_env_t **env,
+                                axis2_wsdl_extensible_element_t *element)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, element, AXIS2_FAILURE); 
+
+    return AXIS2_WSDL_COMPONENT_ADD_EXTENSIBILITY_ELEMENT(wsdl_types->
+        ext_component->wsdl_component, env, element);
+}
+
+/**
+ * Will return the first Element with the given <code>QName</code>
+ * Returns null if not found.
+ *
+ * @param qname
+ * @return
+ */
+axis2_wsdl_extensible_element_t *AXIS2_CALL
+axis2_wsdl_types_get_first_element(axis2_wsdl_types_t *wsdl_types,
+                                    axis2_env_t **env,
+                                    axis2_qname_t *qname)
+{
+    axis2_linked_list_t *ext_elements = NULL;
+    int i = 0;
+    int size = 0;
+
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK((*env)->error, qname, NULL);
+    
+    ext_elements = AXIS2_WSDL_COMPONENT_GET_EXTENSIBILITY_ELEMENTS(wsdl_types->
+        ext_component->wsdl_component, env);
+    size = AXIS2_LINKED_LIST_SIZE(ext_elements, env);
+    for(i = 0; i < size; i++)
+    {
+        axis2_wsdl_extensible_element_t *temp = NULL;
+        axis2_qname_t *qname_l = NULL;
+        temp = AXIS2_LINKED_LIST_GET(ext_elements, env, i);
+        qname_l = AXIS2_WSDL_EXTENSIBLE_ELEMENT_GET_TYPE(temp, env);
+        if(AXIS2_QNAME_EQUALS(qname, env, qname_l))
+        {
+            return temp;
+        }
+    }
+    return NULL;;
+}