blob: 4c771f1a817d1f503f976c69850e6da521a4df6e [file] [log] [blame]
/*
* 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_qname)
{
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;
}