blob: 971ebbac99de480f281bc4c1991ee32c160c6daf [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_svc.h>
#include <axis2_addr.h>
#include <axis2_property.h>
#include <xml_schema_obj_collection.h>
#include <axis2_module.h>
#include "../deployment/axis2_desc_builder.h"
typedef struct axis2_svc_impl axis2_svc_impl_t;
struct axis2_svc_impl
{
axis2_svc_t svc;
axis2_svc_grp_t *parent;
axis2_char_t *axis_svc_name;
/** to keep last update time of the service */
long last_update;
axis2_char_t *filename;
/** to store module descriptions at deploy time parsing */
axis2_array_list_t *module_list;
/* service description */
axis2_char_t *svc_desc;
/**
* WSDL related stuff
*/
axis2_hash_t *ns_map;
/* count of the entries in the namespace map */
int ns_count;
/* to keep the XML scheama either from WSDL or
* C2WSDL(in the future)
*/
axis2_array_list_t *schema_list;
/**
* A table that keeps a mapping of unique XSD names (Strings)
* against the schema objects. This is populated in the first
* instance the schemas are asked for and then used to serve
* the subsequent requests
*/
axis2_hash_t *schema_mapping_table;
/**
* This is where operations are kept
*/
axis2_hash_t *op_alias_map;
/**
* This is where action mappings are kept
*/
axis2_hash_t *op_action_map;
/**
* Keeps track whether the schema locations are adjusted
*/
axis2_bool_t schema_loc_adjusted;
/**
* A custom schema name prefix. if set this will be used to
* modify the schema names
*/
axis2_char_t *custom_schema_name_prefix;
/**
* A custom schema name suffix. will be attached to the
* schema file name when the files are uniquely named.
* A good place to add a file extension if needed
*/
axis2_char_t *custom_schema_name_suffix;
/* to store the target namespace for the schema */
axis2_char_t *schema_target_ns;
axis2_char_t *schema_target_ns_prefix;
/* to keep the service target name space */
axis2_char_t *target_ns;
axis2_char_t *target_ns_prefix;
/* Used for schema name calculations */
int sc_calc_count;
};
#define AXIS2_INTF_TO_IMPL(svc) ((axis2_svc_impl_t *)svc)
axis2_status_t AXIS2_CALL
axis2_svc_free(
axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_add_op(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_op_t *op);
axis2_op_t *AXIS2_CALL
axis2_svc_get_op_with_qname(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *op_name);
axis2_op_t *AXIS2_CALL
axis2_svc_get_op_with_name(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *op_name);
axis2_hash_t *AXIS2_CALL
axis2_svc_get_all_ops(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_parent(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_svc_grp_t *svc_grp);
axis2_svc_grp_t *AXIS2_CALL
axis2_svc_get_parent(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_qname(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *qname);
const axis2_qname_t *AXIS2_CALL
axis2_svc_get_qname(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_add_param(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_param_t *param);
axis2_param_t *AXIS2_CALL
axis2_svc_get_param(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *name);
axis2_array_list_t *AXIS2_CALL
axis2_svc_get_all_params(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_bool_t AXIS2_CALL
axis2_svc_is_param_locked(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *param_name);
axis2_status_t AXIS2_CALL
axis2_svc_set_wsdl_interface(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_wsdl_interface_t *svc_interface);
axis2_wsdl_interface_t *AXIS2_CALL
axis2_svc_get_wsdl_interface(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_engage_module(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_module_desc_t *module_desc,
axis2_conf_t *conf);
axis2_status_t AXIS2_CALL
axis2_svc_add_module_ops(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_module_desc_t *module,
axis2_conf_t *conf);
axis2_status_t AXIS2_CALL
axis2_svc_add_to_engaged_module_list(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_module_desc_t *module_name);
axis2_array_list_t *AXIS2_CALL
axis2_svc_get_all_engaged_modules(
const axis2_svc_t *svc,
const axis2_env_t *env);
void *AXIS2_CALL
axis2_svc_get_wsdl_op(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *op_name);
axis2_status_t AXIS2_CALL
axis2_svc_set_style(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *style);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_style(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_flow_t *AXIS2_CALL
axis2_svc_get_in_flow(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_in_flow(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_flow_t *in_flow);
axis2_flow_t *AXIS2_CALL
axis2_svc_get_out_flow(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_out_flow(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_flow_t *out_flow);
axis2_flow_t *AXIS2_CALL
axis2_svc_get_fault_in_flow(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_fault_in_flow(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_flow_t *fault_flow);
axis2_flow_t *AXIS2_CALL
axis2_svc_get_fault_out_flow(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_fault_out_flow(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_flow_t *fault_flow);
axis2_op_t *AXIS2_CALL
axis2_svc_get_op_by_soap_action(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *soap_action);
axis2_op_t *AXIS2_CALL
axis2_svc_get_op_by_soap_action_and_endpoint(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *soap_action,
const axis2_qname_t *endpoint);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_name(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_name(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *axis_svc_name);
axis2_status_t AXIS2_CALL
axis2_svc_set_last_update(
axis2_svc_t *svc,
const axis2_env_t *env);
long AXIS2_CALL
axis2_svc_get_last_update(
const axis2_svc_t *svc,
const axis2_env_t *env);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_file_name(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_file_name(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *filename);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_svc_desc(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_svc_desc(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *svc_desc);
axis2_hash_t *AXIS2_CALL
axis2_svc_get_all_endpoints(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_all_endpoints(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_hash_t *endpoints);
axis2_status_t AXIS2_CALL
axis2_svc_set_endpoint(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_wsdl_endpoint_t *endpoint);
axis2_wsdl_endpoint_t *AXIS2_CALL
axis2_svc_get_endpoint(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *qname);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_namespace(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_add_mapping(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *mapping_key ,
axis2_op_t *op_desc);
axis2_status_t AXIS2_CALL
axis2_svc_add_module_qname(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *module_qname);
axis2_array_list_t *AXIS2_CALL
axis2_svc_get_all_module_qnames(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_bool_t AXIS2_CALL
axis2_svc_is_schema_location_adjusted(
axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_schema_location_adjusted(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_bool_t adjusted);
axis2_hash_t *AXIS2_CALL
axis2_svc_get_schema_mapping_table(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_schema_mapping_table(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_hash_t *table);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_custom_schema_prefix(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_custom_schema_prefix(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *prefix);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_custom_schema_suffix(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_custom_schema_suffix(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *suffix);
axis2_status_t AXIS2_CALL
axis2_svc_print_schema(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_stream_t *out_stream);
xml_schema_t *AXIS2_CALL
axis2_svc_get_schema(
const axis2_svc_t *svc,
const axis2_env_t *env,
int index);
xml_schema_t *AXIS2_CALL
axis2_svc_add_all_namespaces(
axis2_svc_t *svc,
const axis2_env_t *env,
int index);
axis2_array_list_t *AXIS2_CALL
axis2_svc_get_all_schemas(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_add_schema(
axis2_svc_t *svc,
const axis2_env_t *env,
xml_schema_t *schema);
axis2_status_t AXIS2_CALL
axis2_svc_add_all_schemas(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_array_list_t *schemas);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_schema_target_ns(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_schema_target_ns(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *ns);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_schema_target_ns_prefix(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_schema_target_ns_prefix(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *prefix);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_target_ns(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_target_ns(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *ns);
const axis2_char_t *AXIS2_CALL
axis2_svc_get_target_ns_prefix(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_target_ns_prefix(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *prefix);
xml_schema_element_t *AXIS2_CALL
axis2_svc_get_schema_element(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *qname);
axis2_hash_t *AXIS2_CALL
axis2_svc_get_ns_map(
const axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_set_ns_map(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_hash_t *ns_map);
axis2_status_t AXIS2_CALL
axis2_svc_add_schema_ns(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *ns);
axis2_status_t AXIS2_CALL
axis2_svc_populate_schema_mappings(
axis2_svc_t *svc,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
axis2_svc_calculate_schema_names(
axis2_svc_t *svc,
const axis2_env_t *env,
xml_schema_t *schema,
axis2_hash_t *names);
axis2_status_t AXIS2_CALL
axis2_svc_adjust_schema_names(
axis2_svc_t *svc,
const axis2_env_t *env,
xml_schema_t *schema,
axis2_hash_t *names);
axis2_hash_t *AXIS2_CALL
axis2_svc_swap_mapping_table(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_hash_t *orig_table);
AXIS2_EXTERN axis2_svc_t *AXIS2_CALL
axis2_svc_create(
const axis2_env_t *env)
{
axis2_svc_impl_t *svc_impl = NULL;
axis2_array_list_t *array_list_l = NULL;
axis2_param_container_t *param_container_l = NULL;
axis2_wsdl_interface_t *wsdl_interface_l = NULL;
axis2_status_t status = AXIS2_FAILURE;
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, NULL);
svc_impl = (axis2_svc_impl_t *)
AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_impl_t));
if (NULL == svc_impl)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
svc_impl->parent = NULL;
svc_impl->axis_svc_name = NULL;
svc_impl->filename = NULL;
svc_impl->svc_desc = NULL;
svc_impl->last_update = 0;
svc_impl->svc.param_container = NULL;
svc_impl->svc.flow_container = NULL;
svc_impl->svc.wsdl_svc = NULL;
svc_impl->op_alias_map = NULL;
svc_impl->op_action_map = NULL;
svc_impl->module_list = NULL;
svc_impl->ns_map = NULL;
svc_impl->ns_count = 0;
svc_impl->schema_list = NULL;
svc_impl->schema_mapping_table = NULL;
svc_impl->schema_loc_adjusted = AXIS2_FALSE;
svc_impl->custom_schema_name_prefix = NULL;
svc_impl->custom_schema_name_suffix = NULL;
svc_impl->schema_target_ns = NULL;
svc_impl->schema_target_ns_prefix = NULL;
svc_impl->target_ns = NULL;
svc_impl->target_ns_prefix = NULL;
svc_impl->sc_calc_count = 0;
svc_impl->svc.param_container = axis2_param_container_create(env);
if (NULL == svc_impl->svc.param_container)
{
axis2_svc_free(&(svc_impl->svc), env);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
svc_impl->svc.flow_container = axis2_flow_container_create(env);
if (NULL == svc_impl->svc.flow_container)
{
axis2_svc_free(&(svc_impl->svc), env);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
svc_impl->svc.wsdl_svc = axis2_wsdl_svc_create(env);
if (NULL == svc_impl->svc.wsdl_svc)
{
axis2_svc_free(&(svc_impl->svc), env);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
svc_impl->op_alias_map = axis2_hash_make(env);
if (NULL == svc_impl->op_alias_map)
{
axis2_svc_free(&(svc_impl->svc), env);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
/** create module list of default size */
svc_impl->op_action_map = axis2_hash_make(env);
if (NULL == svc_impl->op_action_map)
{
axis2_svc_free(&(svc_impl->svc), env);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
svc_impl->module_list = axis2_array_list_create(env, 0);
if (NULL == svc_impl->module_list)
{
axis2_svc_free(&(svc_impl->svc), env);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
svc_impl->svc.ops = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_ops_t));
if (NULL == svc_impl->svc.ops)
{
axis2_svc_free(&(svc_impl->svc), env);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
wsdl_interface_l = axis2_wsdl_interface_create(env);
if (NULL == wsdl_interface_l)
{
axis2_svc_free(&(svc_impl->svc), env);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
status = axis2_svc_set_wsdl_interface(&(svc_impl->svc), env, wsdl_interface_l);
if (AXIS2_FAILURE == status)
{
axis2_svc_free(&(svc_impl->svc), env);
return NULL;
}
param_container_l = axis2_param_container_create(env);
if (NULL == param_container_l)
{
axis2_svc_free(&(svc_impl->svc), env);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
property = axis2_property_create(env);
AXIS2_PROPERTY_SET_FREE_FUNC(property, env,
axis2_param_container_free_void_arg);
AXIS2_PROPERTY_SET_VALUE(property, env, param_container_l);
status = AXIS2_WSDL_COMPONENT_SET_COMPONENT_PROPERTY(svc_impl->svc.wsdl_svc->
wsdl_component, env, AXIS2_PARAMETER_KEY, property);
if (AXIS2_SUCCESS != status)
{
axis2_svc_free(&(svc_impl->svc), env);
return NULL;
}
array_list_l = axis2_array_list_create(env, 0);
if (NULL == array_list_l)
{
axis2_svc_free(&(svc_impl->svc), env);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
property = axis2_property_create(env);
AXIS2_PROPERTY_SET_FREE_FUNC(property, env,
axis2_array_list_free_void_arg);
AXIS2_PROPERTY_SET_SCOPE(property, env, AXIS2_SCOPE_SESSION);
AXIS2_PROPERTY_SET_VALUE(property, env, array_list_l);
status = AXIS2_WSDL_COMPONENT_SET_COMPONENT_PROPERTY(svc_impl->svc.wsdl_svc->
wsdl_component, env, AXIS2_MODULEREF_KEY, property);
if (AXIS2_SUCCESS != status)
{
axis2_svc_free(&(svc_impl->svc), env);
return NULL;
}
svc_impl->schema_list = axis2_array_list_create(env,
AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
if (NULL == svc_impl->schema_list)
{
axis2_svc_free(&(svc_impl->svc), env);
return NULL;
}
svc_impl->schema_loc_adjusted = AXIS2_FALSE;
if (svc_impl->schema_target_ns_prefix)
{
AXIS2_FREE(env->allocator, svc_impl->schema_target_ns_prefix);
svc_impl->schema_target_ns_prefix = NULL;
}
svc_impl->schema_target_ns_prefix = AXIS2_STRDUP("ns", env);
if (svc_impl->target_ns)
{
AXIS2_FREE(env->allocator, svc_impl->target_ns);
svc_impl->target_ns = NULL;
}
svc_impl->target_ns = AXIS2_STRDUP("http://ws.apache.org/axis2", env);
if (svc_impl->target_ns_prefix)
{
AXIS2_FREE(env->allocator, svc_impl->target_ns_prefix);
svc_impl->target_ns_prefix = NULL;
}
svc_impl->target_ns_prefix = AXIS2_STRDUP("tns", env);
svc_impl->sc_calc_count = 0;
svc_impl->svc.ops->free = axis2_svc_free;
svc_impl->svc.ops->add_op = axis2_svc_add_op;
svc_impl->svc.ops->get_op_with_qname = axis2_svc_get_op_with_qname;
svc_impl->svc.ops->get_op_with_name = axis2_svc_get_op_with_name;
svc_impl->svc.ops->get_all_ops = axis2_svc_get_all_ops;
svc_impl->svc.ops->set_parent = axis2_svc_set_parent;
svc_impl->svc.ops->get_parent = axis2_svc_get_parent;
svc_impl->svc.ops->set_qname = axis2_svc_set_qname;
svc_impl->svc.ops->get_qname = axis2_svc_get_qname;
svc_impl->svc.ops->add_param = axis2_svc_add_param;
svc_impl->svc.ops->get_param = axis2_svc_get_param;
svc_impl->svc.ops->get_all_params = axis2_svc_get_all_params;
svc_impl->svc.ops->is_param_locked = axis2_svc_is_param_locked;
svc_impl->svc.ops->set_wsdl_interface = axis2_svc_set_wsdl_interface;
svc_impl->svc.ops->get_wsdl_interface = axis2_svc_get_wsdl_interface;
svc_impl->svc.ops->engage_module = axis2_svc_engage_module;
svc_impl->svc.ops->add_module_ops = axis2_svc_add_module_ops;
svc_impl->svc.ops->add_to_engaged_module_list =
axis2_svc_add_to_engaged_module_list;
svc_impl->svc.ops->get_all_engaged_modules = axis2_svc_get_all_engaged_modules;
svc_impl->svc.ops->get_wsdl_op = axis2_svc_get_wsdl_op;
svc_impl->svc.ops->set_style = axis2_svc_set_style;
svc_impl->svc.ops->get_style = axis2_svc_get_style;
svc_impl->svc.ops->get_in_flow = axis2_svc_get_in_flow;
svc_impl->svc.ops->set_in_flow = axis2_svc_set_in_flow;
svc_impl->svc.ops->get_out_flow = axis2_svc_get_out_flow;
svc_impl->svc.ops->set_out_flow = axis2_svc_set_out_flow;
svc_impl->svc.ops->get_fault_in_flow = axis2_svc_get_fault_in_flow;
svc_impl->svc.ops->set_fault_in_flow = axis2_svc_set_fault_in_flow;
svc_impl->svc.ops->get_fault_out_flow = axis2_svc_get_fault_out_flow;
svc_impl->svc.ops->set_fault_out_flow = axis2_svc_set_fault_out_flow;
svc_impl->svc.ops->get_op_by_soap_action = axis2_svc_get_op_by_soap_action;
svc_impl->svc.ops->get_op_by_soap_action_and_endpoint =
axis2_svc_get_op_by_soap_action_and_endpoint;
svc_impl->svc.ops->get_name = axis2_svc_get_name;
svc_impl->svc.ops->set_name = axis2_svc_set_name;
svc_impl->svc.ops->set_last_update = axis2_svc_set_last_update;
svc_impl->svc.ops->get_last_update = axis2_svc_get_last_update;
svc_impl->svc.ops->get_file_name = axis2_svc_get_file_name;
svc_impl->svc.ops->set_file_name = axis2_svc_set_file_name;
svc_impl->svc.ops->get_svc_desc = axis2_svc_get_svc_desc;
svc_impl->svc.ops->set_svc_desc = axis2_svc_set_svc_desc;
svc_impl->svc.ops->get_all_endpoints = axis2_svc_get_all_endpoints;
svc_impl->svc.ops->set_all_endpoints = axis2_svc_set_all_endpoints;
svc_impl->svc.ops->set_endpoint = axis2_svc_set_endpoint;
svc_impl->svc.ops->get_endpoint = axis2_svc_get_endpoint;
svc_impl->svc.ops->get_namespace = axis2_svc_get_namespace;
svc_impl->svc.ops->add_mapping = axis2_svc_add_mapping;
svc_impl->svc.ops->add_module_qname = axis2_svc_add_module_qname;
svc_impl->svc.ops->get_all_module_qnames = axis2_svc_get_all_module_qnames;
svc_impl->svc.ops->is_schema_location_adjusted =
axis2_svc_is_schema_location_adjusted;
svc_impl->svc.ops->set_schema_location_adjusted =
axis2_svc_set_schema_location_adjusted;
svc_impl->svc.ops->get_schema_mapping_table =
axis2_svc_get_schema_mapping_table;
svc_impl->svc.ops->set_schema_mapping_table =
axis2_svc_set_schema_mapping_table;
svc_impl->svc.ops->get_custom_schema_prefix =
axis2_svc_get_custom_schema_prefix;
svc_impl->svc.ops->set_custom_schema_prefix =
axis2_svc_set_custom_schema_prefix;
svc_impl->svc.ops->get_custom_schema_suffix =
axis2_svc_get_custom_schema_suffix;
svc_impl->svc.ops->set_custom_schema_suffix =
axis2_svc_set_custom_schema_suffix;
svc_impl->svc.ops->print_schema = axis2_svc_print_schema;
svc_impl->svc.ops->get_schema = axis2_svc_get_schema;
svc_impl->svc.ops->add_all_namespaces = axis2_svc_add_all_namespaces;
svc_impl->svc.ops->get_all_schemas = axis2_svc_get_all_schemas;
svc_impl->svc.ops->add_schema = axis2_svc_add_schema;
svc_impl->svc.ops->add_all_schemas = axis2_svc_add_all_schemas;
svc_impl->svc.ops->get_schema_target_ns = axis2_svc_get_schema_target_ns;
svc_impl->svc.ops->set_schema_target_ns = axis2_svc_set_schema_target_ns;
svc_impl->svc.ops->get_schema_target_ns_prefix =
axis2_svc_get_schema_target_ns_prefix;
svc_impl->svc.ops->set_schema_target_ns_prefix =
axis2_svc_set_schema_target_ns_prefix;
svc_impl->svc.ops->get_target_ns = axis2_svc_get_target_ns;
svc_impl->svc.ops->set_target_ns = axis2_svc_set_target_ns;
svc_impl->svc.ops->get_target_ns_prefix = axis2_svc_get_target_ns_prefix;
svc_impl->svc.ops->set_target_ns_prefix = axis2_svc_set_target_ns_prefix;
svc_impl->svc.ops->get_schema_element = axis2_svc_get_schema_element;
svc_impl->svc.ops->get_ns_map = axis2_svc_get_ns_map;
svc_impl->svc.ops->set_ns_map = axis2_svc_set_ns_map;
svc_impl->svc.ops->populate_schema_mappings =
axis2_svc_populate_schema_mappings;
return &(svc_impl->svc);
}
axis2_svc_t *AXIS2_CALL
axis2_svc_create_with_qname(
const axis2_env_t *env,
const axis2_qname_t *qname)
{
axis2_svc_impl_t *svc_impl = NULL;
axis2_status_t status = AXIS2_FAILURE;
AXIS2_PARAM_CHECK(env->error, qname, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(axis2_svc_create(env));
if (NULL == svc_impl)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
status = axis2_svc_set_qname(&(svc_impl->svc), env, qname);
if (AXIS2_FAILURE == status)
{
axis2_svc_free(&(svc_impl->svc), env);
return NULL;
}
return &(svc_impl->svc);
}
AXIS2_EXTERN axis2_svc_t *AXIS2_CALL
axis2_svc_create_with_wsdl_svc(
const axis2_env_t *env,
axis2_wsdl_svc_t *wsdl_svc)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK(env->error, wsdl_svc, NULL);
svc_impl = AXIS2_INTF_TO_IMPL(axis2_svc_create(env));
if (NULL == svc_impl)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
if (svc_impl->svc.wsdl_svc)
{
AXIS2_WSDL_SVC_FREE(svc_impl->svc.wsdl_svc, env);
}
svc_impl->svc.wsdl_svc = wsdl_svc;
return &(svc_impl->svc);
}
axis2_status_t AXIS2_CALL
axis2_svc_free(
axis2_svc_t *svc,
const axis2_env_t *env)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc->param_container)
{
AXIS2_PARAM_CONTAINER_FREE(svc->param_container, env);
svc->param_container = NULL;
}
if (svc->flow_container)
{
AXIS2_FLOW_CONTAINER_FREE(svc->flow_container, env);
svc->flow_container = NULL;
}
if (svc->wsdl_svc)
{
AXIS2_WSDL_SVC_FREE(svc->wsdl_svc, env);
svc->wsdl_svc = NULL;
}
if (svc_impl->filename)
{
AXIS2_FREE(env->allocator, svc_impl->filename);
svc_impl->filename = NULL;
}
if (svc_impl->svc_desc)
{
AXIS2_FREE (env->allocator, svc_impl->svc_desc);
svc_impl->svc_desc = NULL;
}
svc_impl->parent = NULL;
if (svc_impl->module_list)
{
int i = 0;
int size = 0;
size = AXIS2_ARRAY_LIST_SIZE(svc_impl->module_list, env);
for (i = 0; i < size; i++)
{
axis2_qname_t *qname = NULL;
qname = AXIS2_ARRAY_LIST_GET(svc_impl->module_list, env, i);
if (qname)
{
AXIS2_QNAME_FREE(qname, env);
qname = NULL;
}
}
AXIS2_ARRAY_LIST_FREE(svc_impl->module_list, env);
svc_impl->module_list = NULL;
}
if (svc_impl->schema_list)
{
AXIS2_ARRAY_LIST_FREE(svc_impl->schema_list, env);
svc_impl->schema_list = NULL;
}
if (svc_impl->axis_svc_name)
{
AXIS2_FREE(env->allocator, svc_impl->axis_svc_name);
svc_impl->axis_svc_name = NULL;
}
if (svc_impl->op_alias_map)
{
axis2_hash_index_t *hi = NULL;
void *val = NULL;
for (hi = axis2_hash_first(svc_impl->op_alias_map, env); hi;
hi = axis2_hash_next(env, hi))
{
axis2_hash_this(hi, NULL, NULL, &val);
if (val)
{
if (AXIS2_OP_IS_FROM_MODULE((axis2_op_t *)val, env) == AXIS2_FALSE )
AXIS2_OP_FREE((axis2_op_t *)val, env);
val = NULL;
}
}
axis2_hash_free(svc_impl->op_alias_map, env);
svc_impl->op_alias_map = NULL;
}
if (svc_impl->op_action_map)
{
axis2_hash_free(svc_impl->op_action_map, env);
svc_impl->op_action_map = NULL;
}
if (svc_impl->schema_target_ns_prefix)
{
AXIS2_FREE(env->allocator, svc_impl->schema_target_ns_prefix);
svc_impl->schema_target_ns_prefix = NULL;
}
if (svc_impl->target_ns)
{
AXIS2_FREE(env->allocator, svc_impl->target_ns);
svc_impl->target_ns = NULL;
}
if (svc_impl->target_ns_prefix)
{
AXIS2_FREE(env->allocator, svc_impl->target_ns_prefix);
svc_impl->target_ns_prefix = NULL;
}
if (svc_impl->svc.ops)
{
AXIS2_FREE(env->allocator, svc_impl->svc.ops);
svc_impl->svc.ops = NULL;
}
if (svc_impl)
{
AXIS2_FREE(env->allocator, svc_impl);
svc_impl = NULL;
}
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
axis2_svc_add_op(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_op_t *op)
{
axis2_svc_impl_t *svc_impl = NULL;
axis2_status_t status = AXIS2_FAILURE;
axis2_array_list_t *modules = NULL;
int i = 0, size = 0;
axis2_msg_recv_t *msg_recv = NULL;
const axis2_qname_t *qname = NULL;
axis2_char_t *key = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, op, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
status = AXIS2_OP_SET_PARENT(op, env, svc);
if (AXIS2_SUCCESS != status)
{
return status;
}
modules = axis2_svc_get_all_engaged_modules(svc, env);
if (modules)
size = AXIS2_ARRAY_LIST_SIZE(modules, env);
for (i = 0; i < size; i++)
{
axis2_module_desc_t *module_desc = NULL;
axis2_module_t *module_impl = NULL;
axis2_svc_grp_t *parent = NULL;
axis2_conf_t *conf = NULL;
module_desc = (axis2_module_desc_t *) AXIS2_ARRAY_LIST_GET(modules, env, i);
parent = (axis2_svc_grp_t *) axis2_svc_get_parent(svc, env);
if (parent)
{
conf = (axis2_conf_t *) AXIS2_SVC_GRP_GET_PARENT(parent, env);
}
if (module_desc)
module_impl = AXIS2_MODULE_DESC_GET_MODULE(module_desc, env);
if (module_impl)
{
/* TODO: Notify module for service engagement */
/*AXIS2_MODULE_ENGAGE_NOTIFY(module_impl, env, op); */
}
status = AXIS2_OP_ENGAGE_MODULE(op, env, module_desc, conf);
if (AXIS2_SUCCESS != status)
{
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"Module already engaged to operation");
}
}
msg_recv = AXIS2_OP_GET_MSG_RECV(op, env);
if (msg_recv == NULL)
{
msg_recv = axis2_desc_builder_load_default_msg_recv(env);
AXIS2_OP_SET_MSG_RECV(op, env, msg_recv);
}
qname = AXIS2_OP_GET_QNAME(op, env);
if (qname)
key = AXIS2_QNAME_GET_LOCALPART(qname, env);
if (key)
axis2_hash_set(svc_impl->op_alias_map, key, AXIS2_HASH_KEY_STRING, op);
return AXIS2_SUCCESS;
}
axis2_op_t *AXIS2_CALL
axis2_svc_get_op_with_qname(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *op_qname)
{
axis2_svc_impl_t *svc_impl = NULL;
axis2_op_t *op = NULL;
axis2_char_t *key = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK(env->error, op_qname, NULL);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
key = AXIS2_QNAME_GET_LOCALPART(op_qname, env);
op = axis2_hash_get(svc_impl->op_alias_map, key, AXIS2_HASH_KEY_STRING);
if (NULL == op)
op = axis2_hash_get(svc_impl->op_action_map, key, AXIS2_HASH_KEY_STRING);
return op;
}
axis2_op_t *AXIS2_CALL
axis2_svc_get_op_with_name(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *nc_name)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK(env->error, nc_name, NULL);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
return (axis2_op_t *) axis2_hash_get(svc_impl->op_alias_map, nc_name,
AXIS2_HASH_KEY_STRING);
}
axis2_hash_t *AXIS2_CALL
axis2_svc_get_all_ops(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, NULL);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
return svc_impl->op_alias_map;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_parent(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_svc_grp_t *svc_grp)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, svc_grp, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
svc_impl->parent = svc_grp;
return AXIS2_SUCCESS;
}
axis2_svc_grp_t *AXIS2_CALL
axis2_svc_get_parent(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->parent;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_qname(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *qname)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, qname, AXIS2_FAILURE);
return AXIS2_WSDL_SVC_SET_QNAME(svc->wsdl_svc, env, qname);
}
const axis2_qname_t *AXIS2_CALL
axis2_svc_get_qname(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_WSDL_SVC_GET_QNAME(svc->wsdl_svc, env);
}
axis2_status_t AXIS2_CALL
axis2_svc_add_param(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_param_t *param)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, param, AXIS2_FAILURE);
if (AXIS2_TRUE == axis2_svc_is_param_locked(svc, env,
AXIS2_PARAM_GET_NAME(param, env)))
{
AXIS2_ERROR_SET(env->error,
AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, AXIS2_FAILURE);
return AXIS2_FAILURE;
}
else
{
return AXIS2_PARAM_CONTAINER_ADD_PARAM(svc->param_container, env, param);
}
return AXIS2_FAILURE;
}
axis2_param_t *AXIS2_CALL
axis2_svc_get_param(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *name)
{
axis2_param_t *param = NULL;
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, name, NULL);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
param = AXIS2_PARAM_CONTAINER_GET_PARAM(svc->param_container, env, name);
if (param == NULL && svc_impl->parent)
{
param = AXIS2_SVC_GRP_GET_PARAM(svc_impl->parent, env, name);
}
return param;
}
axis2_array_list_t *AXIS2_CALL
axis2_svc_get_all_params(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_PARAM_CONTAINER_GET_PARAMS(svc->param_container, env);
}
axis2_bool_t AXIS2_CALL
axis2_svc_is_param_locked(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *param_name)
{
axis2_bool_t locked = AXIS2_FALSE;
axis2_param_t *param = NULL;
axis2_svc_grp_t *parent = NULL;
axis2_bool_t ret = AXIS2_FALSE;
AXIS2_ENV_CHECK(env, AXIS2_FALSE);
AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FALSE);
/* checking the locked value of parent */
parent = axis2_svc_get_parent(svc, env);
if (parent)
locked = AXIS2_SVC_GRP_IS_PARAM_LOCKED(parent, env, param_name);
if (parent && AXIS2_TRUE == locked)
{
return AXIS2_TRUE;
}
param = axis2_svc_get_param(svc, env, param_name);
if (param)
{
ret = AXIS2_PARAM_IS_LOCKED(param, env);
}
return ret;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_wsdl_interface(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_wsdl_interface_t *svc_interface)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, svc_interface, AXIS2_FAILURE);
return AXIS2_WSDL_SVC_SET_SVC_INTERFACE(svc->wsdl_svc, env, svc_interface);
}
axis2_wsdl_interface_t *AXIS2_CALL
axis2_svc_get_wsdl_interface(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_WSDL_SVC_GET_SVC_INTERFACE(svc->wsdl_svc, env);
}
axis2_status_t AXIS2_CALL
axis2_svc_engage_module(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_module_desc_t *module_desc,
axis2_conf_t *conf)
{
axis2_module_desc_t *modu = NULL;
axis2_array_list_t *collection_module = NULL;
axis2_phase_resolver_t *phase_resolver = NULL;
int i = 0;
axis2_status_t status = AXIS2_FAILURE;
int size = 0;
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE);
property = (axis2_property_t *)
AXIS2_WSDL_COMPONENT_GET_COMPONENT_PROPERTY(svc->wsdl_svc->wsdl_component,
env, AXIS2_MODULEREF_KEY);
if (property)
collection_module = (axis2_array_list_t *)
AXIS2_PROPERTY_GET_VALUE(property, env);
if (!collection_module)
{
return AXIS2_FAILURE;
}
size = AXIS2_ARRAY_LIST_SIZE(collection_module, env);
if (AXIS2_SUCCESS != AXIS2_ERROR_GET_STATUS_CODE(env->error))
{
return AXIS2_ERROR_GET_STATUS_CODE(env->error);
}
for (i = 0; i < size; i++)
{
modu = (axis2_module_desc_t *) AXIS2_ARRAY_LIST_GET(collection_module,
env, i);
if (AXIS2_QNAME_EQUALS(AXIS2_MODULE_DESC_GET_QNAME(modu, env), env,
AXIS2_MODULE_DESC_GET_QNAME(module_desc, env)))
{
/* module has already been engaged on the service. */
AXIS2_ERROR_SET(env->error,
AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_SVC, AXIS2_FAILURE);
return AXIS2_FAILURE;
}
}
phase_resolver = axis2_phase_resolver_create_with_config(env, conf);
if (!phase_resolver)
{
return AXIS2_FAILURE;
}
status = AXIS2_PHASE_RESOLVER_ENGAGE_MODULE_TO_SVC(phase_resolver, env, svc,
module_desc);
if (status)
{
status = AXIS2_ARRAY_LIST_ADD(collection_module, env, module_desc);
}
if (phase_resolver)
{
AXIS2_PHASE_RESOLVER_FREE(phase_resolver, env);
phase_resolver = NULL;
}
return status;
}
axis2_status_t AXIS2_CALL
axis2_svc_add_module_ops(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_module_desc_t *module_desc,
axis2_conf_t *conf)
{
axis2_hash_t *map = NULL;
axis2_hash_index_t *index = NULL;
axis2_phase_resolver_t *pr = NULL;
axis2_op_t *op_desc = NULL;
axis2_array_list_t *params = NULL;
axis2_param_t *param = NULL;
axis2_status_t status = AXIS2_FAILURE;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE);
map = AXIS2_MODULE_DESC_GET_ALL_OPS(module_desc, env);
pr = axis2_phase_resolver_create_with_config_and_svc(env, conf, svc);
if (!pr)
{
return AXIS2_FAILURE;
}
for (index = axis2_hash_first(map, env); index; index =
axis2_hash_next(env, index))
{
int size = 0;
int j = 0;
void *v = NULL;
axis2_hash_this(index, NULL, NULL, &v);
op_desc = (axis2_op_t *) v;
params = AXIS2_OP_GET_ALL_PARAMS(op_desc, env);
/* adding WSA mapping into service */
size = AXIS2_ARRAY_LIST_SIZE(params, env);
if (AXIS2_SUCCESS != AXIS2_ERROR_GET_STATUS_CODE(env->error))
{
if (pr)
{
AXIS2_PHASE_RESOLVER_FREE(pr, env);
pr = NULL;
}
return AXIS2_FAILURE;
}
for (j = 0; j < size; j++)
{
axis2_char_t *key = NULL;
param = (axis2_param_t *) AXIS2_ARRAY_LIST_GET(params, env, j);
if (0 == AXIS2_STRCMP(AXIS2_PARAM_GET_NAME(param, env),
AXIS2_WSA_MAPPING))
{
key = (axis2_char_t *) AXIS2_PARAM_GET_VALUE(param, env);
status = axis2_svc_add_mapping(svc, env, key, op_desc);
if (AXIS2_SUCCESS != status)
{
if (pr)
{
AXIS2_PHASE_RESOLVER_FREE(pr, env);
pr = NULL;
}
return status;
}
break;
}
}
status = AXIS2_PHASE_RESOLVER_BUILD_MODULE_OP(pr, env, op_desc);
if (AXIS2_SUCCESS != status)
{
if (pr)
{
AXIS2_PHASE_RESOLVER_FREE(pr, env);
pr = NULL;
}
return status;
}
status = axis2_svc_add_op(svc, env, op_desc);
if (AXIS2_SUCCESS != status)
{
if (pr)
{
AXIS2_PHASE_RESOLVER_FREE(pr, env);
pr = NULL;
}
return status;
}
}
if (pr)
{
AXIS2_PHASE_RESOLVER_FREE(pr, env);
pr = NULL;
}
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
axis2_svc_add_to_engaged_module_list(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_module_desc_t *module_name)
{
axis2_array_list_t *collection_module = NULL;
axis2_module_desc_t *module_desc = NULL;
int i = 0;
int size = 0;
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE);
property = (axis2_property_t *)
AXIS2_WSDL_COMPONENT_GET_COMPONENT_PROPERTY(svc->wsdl_svc->
wsdl_component, env, AXIS2_MODULEREF_KEY);
if (property)
collection_module = (axis2_array_list_t *) AXIS2_PROPERTY_GET_VALUE(
property, env);
if (!collection_module)
{
return AXIS2_FAILURE;
}
size = AXIS2_ARRAY_LIST_SIZE(collection_module, env);
if (AXIS2_SUCCESS != AXIS2_ERROR_GET_STATUS_CODE(env->error))
{
return AXIS2_ERROR_GET_STATUS_CODE(env->error);
}
for (i = 0; i < size; i++)
{
const axis2_qname_t *module_d_name = NULL;
const axis2_qname_t *module_d_name_l = NULL;
module_desc = (axis2_module_desc_t *) AXIS2_ARRAY_LIST_GET(
collection_module, env, i);
module_d_name = AXIS2_MODULE_DESC_GET_QNAME(module_desc, env);
module_d_name_l = AXIS2_MODULE_DESC_GET_QNAME(module_name, env);
if (AXIS2_QNAME_EQUALS(module_d_name, env, module_d_name_l))
{
/* module is already engaged, so return */
return AXIS2_SUCCESS;
}
}
return AXIS2_ARRAY_LIST_ADD(collection_module, env, module_name);
}
axis2_array_list_t *AXIS2_CALL
axis2_svc_get_all_engaged_modules(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, NULL);
property = (axis2_property_t *)
AXIS2_WSDL_COMPONENT_GET_COMPONENT_PROPERTY(
svc->wsdl_svc->wsdl_component, env, AXIS2_MODULEREF_KEY);
if (property)
return (axis2_array_list_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
return NULL;
}
void *AXIS2_CALL
axis2_svc_get_wsdl_op(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *op_name)
{
axis2_wsdl_interface_t *svc_interface = NULL;
axis2_char_t *op_str = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK(env->error, op_name, NULL);
op_str = AXIS2_QNAME_GET_LOCALPART(op_name, env);
svc_interface = axis2_svc_get_wsdl_interface(svc, env);
if (svc_interface)
{
return AXIS2_WSDL_INTERFACE_GET_OP(svc_interface, env, op_str) ;
}
else
return NULL;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_style(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *style)
{
axis2_char_t *style_l = NULL;
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, style, AXIS2_FAILURE);
style_l = AXIS2_STRDUP(style, env);
if (!style_l)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return AXIS2_FAILURE;
}
property = axis2_property_create(env);
AXIS2_PROPERTY_SET_VALUE(property, env, style_l);
return AXIS2_WSDL_COMPONENT_SET_COMPONENT_PROPERTY(svc->wsdl_svc->
wsdl_component, env, AXIS2_STYLE_KEY, property);
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_style(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, NULL);
property = (axis2_property_t *)
AXIS2_WSDL_COMPONENT_GET_COMPONENT_PROPERTY(
svc->wsdl_svc->wsdl_component, env, AXIS2_STYLE_KEY);
if (property)
return (axis2_char_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
return NULL;
}
axis2_flow_t *AXIS2_CALL
axis2_svc_get_in_flow(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, NULL);
property = (axis2_property_t *)
AXIS2_WSDL_COMPONENT_GET_COMPONENT_PROPERTY(
svc->wsdl_svc->wsdl_component, env, AXIS2_IN_FLOW_KEY);
if (property)
return (axis2_flow_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
return NULL;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_in_flow(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_flow_t *in_flow)
{
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, in_flow, AXIS2_FAILURE);
property = axis2_property_create(env);
AXIS2_PROPERTY_SET_VALUE(property, env, in_flow);
AXIS2_PROPERTY_SET_FREE_FUNC(property, env, axis2_flow_free_void_arg);
return AXIS2_WSDL_COMPONENT_SET_COMPONENT_PROPERTY(svc->wsdl_svc->
wsdl_component, env, AXIS2_IN_FLOW_KEY, property);
}
axis2_flow_t *AXIS2_CALL
axis2_svc_get_out_flow(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, NULL);
property = (axis2_property_t *)
AXIS2_WSDL_COMPONENT_GET_COMPONENT_PROPERTY(
svc->wsdl_svc->wsdl_component, env, AXIS2_OUT_FLOW_KEY);
if (property)
return (axis2_flow_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
return NULL;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_out_flow(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_flow_t *out_flow)
{
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, out_flow, AXIS2_FAILURE);
property = axis2_property_create(env);
AXIS2_PROPERTY_SET_VALUE(property, env, out_flow);
AXIS2_PROPERTY_SET_FREE_FUNC(property, env, axis2_flow_free_void_arg);
return AXIS2_WSDL_COMPONENT_SET_COMPONENT_PROPERTY(svc->wsdl_svc->
wsdl_component, env, AXIS2_OUT_FLOW_KEY, property);
}
axis2_flow_t *AXIS2_CALL
axis2_svc_get_fault_in_flow(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, NULL);
property = (axis2_property_t *)
AXIS2_WSDL_COMPONENT_GET_COMPONENT_PROPERTY(
svc->wsdl_svc->wsdl_component, env, AXIS2_IN_FAULTFLOW_KEY);
if (property)
return (axis2_flow_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
return NULL;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_fault_in_flow(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_flow_t *fault_flow)
{
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, fault_flow, AXIS2_FAILURE);
property = axis2_property_create(env);
AXIS2_PROPERTY_SET_VALUE(property, env, fault_flow);
AXIS2_PROPERTY_SET_FREE_FUNC(property, env, axis2_flow_free_void_arg);
return AXIS2_WSDL_COMPONENT_SET_COMPONENT_PROPERTY(svc->wsdl_svc->
wsdl_component, env, AXIS2_IN_FAULTFLOW_KEY, property);
}
axis2_flow_t *AXIS2_CALL
axis2_svc_get_fault_out_flow(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, NULL);
property = (axis2_property_t *)
AXIS2_WSDL_COMPONENT_GET_COMPONENT_PROPERTY(
svc->wsdl_svc->wsdl_component, env, AXIS2_OUT_FAULTFLOW_KEY);
if (property)
return (axis2_flow_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
return NULL;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_fault_out_flow(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_flow_t *fault_flow)
{
axis2_property_t *property = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, fault_flow, AXIS2_FAILURE);
property = axis2_property_create(env);
AXIS2_PROPERTY_SET_VALUE(property, env, fault_flow);
AXIS2_PROPERTY_SET_FREE_FUNC(property, env, axis2_flow_free_void_arg);
return AXIS2_WSDL_COMPONENT_SET_COMPONENT_PROPERTY(svc->wsdl_svc->
wsdl_component, env, AXIS2_OUT_FAULTFLOW_KEY, property);
}
axis2_op_t *AXIS2_CALL
axis2_svc_get_op_by_soap_action(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *soap_action)
{
axis2_svc_impl_t *svc_impl = NULL;
axis2_hash_t *endpoints = NULL;
axis2_hash_index_t *index = NULL;
void *value = NULL;
axis2_wsdl_endpoint_t *endpoint = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK(env->error, soap_action, NULL);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (0 == AXIS2_STRCMP(soap_action, ""))
return NULL;
endpoints = axis2_svc_get_all_endpoints(svc, env);
if (!endpoints)
{
return NULL;
}
index = axis2_hash_first(endpoints, env);
if (index)
{
axis2_qname_t *endpoint_qname = NULL;
axis2_hash_this(index, NULL, NULL, &value);
endpoint = (axis2_wsdl_endpoint_t *) value;
endpoint_qname = AXIS2_WSDL_ENDPOINT_GET_NAME(endpoint, env);
return axis2_svc_get_op_by_soap_action_and_endpoint(svc, env,
soap_action, endpoint_qname);
}
return NULL;
}
axis2_op_t *AXIS2_CALL
axis2_svc_get_op_by_soap_action_and_endpoint(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *soap_action,
const axis2_qname_t *endpoint)
{
axis2_svc_impl_t *svc_impl = NULL;
axis2_hash_t *binding_ops = NULL;
int count = 0;
axis2_hash_index_t *index_i = NULL;
axis2_wsdl_binding_op_t *binding_op = NULL;
axis2_wsdl_soap_op_t *element = NULL;
axis2_op_t *op = NULL;
axis2_linked_list_t *extensiblity_elements = NULL;
axis2_qname_t *type_1 = NULL;
axis2_wsdl_binding_t *wsdl_binding = NULL;
axis2_wsdl_endpoint_t *wsdl_endpoint = NULL;
svc_impl = AXIS2_INTF_TO_IMPL(svc);
type_1 = axis2_qname_create(env, "op", AXIOM_SOAP_11_OP, NULL);
wsdl_endpoint = axis2_svc_get_endpoint(svc, env, endpoint);
wsdl_binding = AXIS2_WSDL_ENDPOINT_GET_BINDING(wsdl_endpoint, env);
binding_ops = AXIS2_WSDL_BINDING_GET_BINDING_OPS(wsdl_binding, env);
if (NULL == binding_ops)
{
return NULL;
}
index_i = axis2_hash_first(binding_ops, env);
while (index_i)
{
int j = 0;
int size = 0;
const void *k = NULL;
axis2_status_t status = AXIS2_FAILURE;
axis2_hash_this(index_i, &k, NULL, NULL);
binding_op = (axis2_wsdl_binding_op_t *) k;
extensiblity_elements = AXIS2_WSDL_COMPONENT_GET_EXTENSIBILITY_ELEMENTS(
binding_op->extensible_component->wsdl_component, env);
size = AXIS2_LINKED_LIST_SIZE(extensiblity_elements, env);
status = AXIS2_ERROR_GET_STATUS_CODE(env->error);
if (AXIS2_SUCCESS != status)
{
return NULL;
}
while (j < size)
{
axis2_qname_t *type_2 = NULL;
element = (axis2_wsdl_soap_op_t *) AXIS2_LINKED_LIST_GET(
extensiblity_elements, env, j);
type_2 = AXIS2_WSDL_EXTENSIBLE_ELEMENT_GET_TYPE(element->
extensible_element, env);
if (AXIS2_QNAME_EQUALS(type_2, env, type_1))
{
if (0 == AXIS2_STRCMP(AXIS2_WSDL_SOAP_OP_GET_SOAP_ACTION(
element, env), soap_action))
{
op = (axis2_op_t *)
AXIS2_WSDL_BINDING_OP_GET_OP(binding_op,
env);
count++;
}
}
AXIS2_QNAME_FREE(type_2, env);
type_2 = NULL;
j++;
}
index_i = axis2_hash_next(env, index_i);
}
if (1 == count)
{
return op;
}
AXIS2_QNAME_FREE(type_1, env);
type_1 = NULL;
return NULL;
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_name(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
axis2_svc_impl_t *svc_impl = NULL;
const axis2_qname_t *qname = NULL;
AXIS2_ENV_CHECK(env, NULL);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->axis_svc_name)
return svc_impl->axis_svc_name;
qname = AXIS2_WSDL_SVC_GET_QNAME(svc->wsdl_svc, env);
if (qname)
{
return AXIS2_QNAME_GET_LOCALPART(qname, env);
}
return NULL;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_name(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *axis_svc_name)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, axis_svc_name, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->axis_svc_name)
{
AXIS2_FREE(env->allocator, svc_impl->axis_svc_name);
svc_impl->axis_svc_name = NULL;
}
svc_impl->axis_svc_name = AXIS2_STRDUP(axis_svc_name, env);
if (!svc_impl->axis_svc_name)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return AXIS2_FAILURE;
}
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_last_update(
axis2_svc_t *svc,
const axis2_env_t *env)
{
return AXIS2_SUCCESS;
}
long AXIS2_CALL
axis2_svc_get_last_update(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
return AXIS2_INTF_TO_IMPL(svc)->last_update;
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_file_name(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
return AXIS2_INTF_TO_IMPL(svc)->filename;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_file_name(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *filename)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, filename, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->filename)
{
AXIS2_FREE(env->allocator, svc_impl->filename);
svc_impl->filename = NULL;
}
svc_impl->filename = (axis2_char_t *) AXIS2_STRDUP(filename, env);
if (!svc_impl->filename)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return AXIS2_FAILURE;
}
return AXIS2_SUCCESS;
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_svc_desc(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
return AXIS2_INTF_TO_IMPL(svc)->svc_desc;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_svc_desc(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *svc_desc)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, svc_desc, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->svc_desc)
{
AXIS2_FREE(env->allocator, svc_impl->svc_desc);
svc_impl->svc_desc = NULL;
}
svc_impl->svc_desc = (axis2_char_t *) AXIS2_STRDUP(svc_desc, env);
if (!svc_impl->svc_desc)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return AXIS2_FAILURE;
}
return AXIS2_SUCCESS;
}
axis2_hash_t *AXIS2_CALL
axis2_svc_get_all_endpoints(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
return AXIS2_WSDL_SVC_GET_ENDPOINTS(svc->wsdl_svc, env);
}
axis2_status_t AXIS2_CALL
axis2_svc_set_all_endpoints(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_hash_t *endpoints)
{
return AXIS2_WSDL_SVC_SET_ENDPOINTS(svc->wsdl_svc, env, endpoints);
}
axis2_status_t AXIS2_CALL
axis2_svc_set_endpoint(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_wsdl_endpoint_t *endpoint)
{
return AXIS2_WSDL_SVC_SET_ENDPOINT(svc->wsdl_svc, env, endpoint);
}
axis2_wsdl_endpoint_t *AXIS2_CALL
axis2_svc_get_endpoint(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *qname)
{
return AXIS2_WSDL_SVC_GET_ENDPOINT(svc->wsdl_svc, env, qname);
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_namespace(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
return AXIS2_WSDL_SVC_GET_NAMESPACE(svc->wsdl_svc, env);
}
axis2_status_t AXIS2_CALL
axis2_svc_add_mapping(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *mapping_key ,
axis2_op_t *op_desc)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, mapping_key, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, op_desc, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
axis2_hash_set(svc_impl->op_action_map, AXIS2_STRDUP(mapping_key, env),
AXIS2_HASH_KEY_STRING, op_desc);
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
axis2_svc_add_module_qname(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *module_qname)
{
axis2_svc_impl_t *svc_impl = NULL;
axis2_qname_t *qmodule_qname_l = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, module_qname, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
qmodule_qname_l = AXIS2_QNAME_CLONE(module_qname, env);
return AXIS2_ARRAY_LIST_ADD(AXIS2_INTF_TO_IMPL(svc)->module_list, env,
qmodule_qname_l);
}
axis2_array_list_t *AXIS2_CALL
axis2_svc_get_all_module_qnames(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->module_list;
}
axis2_bool_t AXIS2_CALL
axis2_svc_is_schema_location_adjusted(
axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, AXIS2_FALSE);
return AXIS2_INTF_TO_IMPL(svc)->schema_loc_adjusted;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_schema_location_adjusted(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_bool_t adjusted)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_INTF_TO_IMPL(svc)->schema_loc_adjusted = adjusted;
return AXIS2_SUCCESS;
}
axis2_hash_t *AXIS2_CALL
axis2_svc_get_schema_mapping_table(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->schema_mapping_table;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_schema_mapping_table(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_hash_t *table)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, table, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->schema_mapping_table)
{
axis2_hash_free(svc_impl->schema_mapping_table, env);
svc_impl->schema_mapping_table = NULL;
}
svc_impl->schema_mapping_table = table;
return AXIS2_SUCCESS;
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_custom_schema_prefix(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->custom_schema_name_prefix;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_custom_schema_prefix(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *prefix)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->custom_schema_name_prefix)
{
AXIS2_FREE(env->allocator, svc_impl->custom_schema_name_prefix);
svc_impl->custom_schema_name_prefix = NULL;
}
svc_impl->custom_schema_name_prefix = AXIS2_STRDUP(prefix, env);
if (NULL == svc_impl->custom_schema_name_prefix)
{
return AXIS2_FAILURE;
}
return AXIS2_SUCCESS;
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_custom_schema_suffix(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->custom_schema_name_suffix;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_custom_schema_suffix(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *suffix)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->custom_schema_name_suffix)
{
AXIS2_FREE(env->allocator, svc_impl->custom_schema_name_suffix);
svc_impl->custom_schema_name_suffix = NULL;
}
svc_impl->custom_schema_name_suffix = AXIS2_STRDUP(suffix, env);
if (NULL == svc_impl->custom_schema_name_suffix)
{
return AXIS2_FAILURE;
}
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
axis2_svc_print_schema(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_stream_t *out_stream)
{
axis2_svc_impl_t *svc_impl = NULL;
int size = 0;
int i = 0;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (NULL == svc_impl->schema_list)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_EMPTY_SCHEMA_LIST,
AXIS2_FAILURE);
return AXIS2_FAILURE;
}
size = AXIS2_ARRAY_LIST_SIZE(svc_impl->schema_list, env);
for (i = 0; i < size; i++)
{
xml_schema_t *schema = NULL;
axis2_char_t *buffer = NULL;
schema = AXIS2_ARRAY_LIST_GET(svc_impl->schema_list, env, i);
buffer = XML_SCHEMA_SERIALIZE(schema, env);
if (buffer)
{
AXIS2_STREAM_WRITE(out_stream, env, buffer, AXIS2_STRLEN(buffer));
}
AXIS2_FREE(env->allocator, buffer);
}
return AXIS2_SUCCESS;
}
xml_schema_t *AXIS2_CALL
axis2_svc_get_schema(
const axis2_svc_t *svc,
const axis2_env_t *env,
int index)
{
AXIS2_ENV_CHECK(env, NULL);
return axis2_svc_add_all_namespaces((axis2_svc_t *) svc, env, index);
}
xml_schema_t *AXIS2_CALL
axis2_svc_add_all_namespaces(
axis2_svc_t *svc,
const axis2_env_t *env,
int index)
{
xml_schema_t *schema = NULL;
axis2_svc_impl_t *svc_impl = NULL;
axis2_hash_t *prefix_map = NULL;
axis2_hash_index_t *hi = NULL;
AXIS2_ENV_CHECK(env, NULL);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (NULL == svc_impl->schema_list)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_EMPTY_SCHEMA_LIST,
AXIS2_FAILURE);
return NULL;
}
schema = (xml_schema_t *)AXIS2_ARRAY_LIST_GET(svc_impl->schema_list, env, index);
prefix_map = XML_SCHEMA_GET_PREFIX_TO_NAMESPACE_MAP(schema, env);
if (NULL == prefix_map)
{
return NULL;
}
for (hi = axis2_hash_first(svc_impl->ns_map, env); hi;
hi = axis2_hash_next(env, hi))
{
void * value = NULL;
void *key = NULL;
axis2_hash_this(hi, (const void **)&key, NULL, (void **)&value);
if (value)
{
axis2_hash_set(prefix_map, key, AXIS2_HASH_KEY_STRING, value);
}
}
return schema;
}
axis2_array_list_t *AXIS2_CALL
axis2_svc_get_all_schemas(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->schema_list;
}
axis2_status_t AXIS2_CALL
axis2_svc_add_schema(
axis2_svc_t *svc,
const axis2_env_t *env,
xml_schema_t *schema)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, schema, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (NULL == svc_impl->schema_list)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_EMPTY_SCHEMA_LIST,
AXIS2_FAILURE);
return AXIS2_FAILURE;
}
AXIS2_ARRAY_LIST_ADD(svc_impl->schema_list, env, schema);
return axis2_svc_add_schema_ns(svc, env, XML_SCHEMA_GET_TARGET_NAMESPACE(
schema, env));
}
axis2_status_t AXIS2_CALL
axis2_svc_add_all_schemas(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_array_list_t *schemas)
{
int i = 0;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, schemas, AXIS2_FAILURE);
for (i = 0; i < AXIS2_ARRAY_LIST_SIZE(schemas, env); i++)
{
xml_schema_t *schema = AXIS2_ARRAY_LIST_GET(schemas, env, i);
axis2_svc_add_schema(svc, env, schema);
}
return AXIS2_SUCCESS;
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_schema_target_ns(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->schema_target_ns;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_schema_target_ns(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *ns)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, ns, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->schema_target_ns)
{
AXIS2_FREE(env->allocator, svc_impl->schema_target_ns);
svc_impl->schema_target_ns = NULL;
}
svc_impl->schema_target_ns = AXIS2_STRDUP(ns, env);
return AXIS2_SUCCESS;
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_schema_target_ns_prefix(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->schema_target_ns_prefix;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_schema_target_ns_prefix(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *prefix)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->schema_target_ns_prefix)
{
AXIS2_FREE(env->allocator, svc_impl->schema_target_ns_prefix);
svc_impl->schema_target_ns_prefix = NULL;
}
svc_impl->schema_target_ns_prefix = AXIS2_STRDUP(prefix, env);
return AXIS2_SUCCESS;
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_target_ns(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->target_ns;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_target_ns(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *ns)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, ns, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->target_ns)
{
AXIS2_FREE(env->allocator, svc_impl->target_ns);
svc_impl->target_ns = NULL;
}
svc_impl->target_ns = AXIS2_STRDUP(ns, env);
return AXIS2_SUCCESS;
}
const axis2_char_t *AXIS2_CALL
axis2_svc_get_target_ns_prefix(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->target_ns_prefix;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_target_ns_prefix(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *prefix)
{
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->target_ns_prefix)
{
AXIS2_FREE(env->allocator, svc_impl->target_ns_prefix);
svc_impl->target_ns_prefix = NULL;
}
svc_impl->target_ns_prefix = AXIS2_STRDUP(prefix, env);
return AXIS2_SUCCESS;
}
xml_schema_element_t *AXIS2_CALL
axis2_svc_get_schema_element(
const axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_qname_t *qname)
{
axis2_svc_impl_t *svc_impl = NULL;
int i = 0;
AXIS2_ENV_CHECK(env, NULL);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
for (i = 0; i < AXIS2_ARRAY_LIST_SIZE(svc_impl->schema_list, env); i++)
{
xml_schema_t *schema = NULL;
xml_schema_element_t *schema_element = NULL;
schema = AXIS2_ARRAY_LIST_GET(svc_impl->schema_list, env, i);
if (schema)
{
schema_element = XML_SCHEMA_GET_ELEMENT_BY_QNAME(schema, env,
qname);
if (schema_element)
{
return schema_element;
}
}
}
return NULL;
}
axis2_hash_t *AXIS2_CALL
axis2_svc_get_ns_map(
const axis2_svc_t *svc,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(svc)->ns_map;
}
axis2_status_t AXIS2_CALL
axis2_svc_set_ns_map(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_hash_t *ns_map)
{
axis2_svc_impl_t *svc_impl = NULL;
axis2_hash_index_t *hi = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, ns_map, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->ns_map)
{
for (hi = axis2_hash_first(svc_impl->ns_map, env); hi;
hi = axis2_hash_next(env, hi))
{
void * value = NULL;
void *key = NULL;
axis2_hash_this(hi, (const void **)&key, NULL,
(void **)&value);
if (key)
{
AXIS2_FREE(env->allocator, key);
key = NULL;
}
if (value)
{
AXIS2_FREE(env->allocator, value);
value = NULL;
}
}
axis2_hash_free(svc_impl->ns_map, env);
}
svc_impl->ns_map = ns_map;
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
axis2_svc_add_schema_ns(
axis2_svc_t *svc,
const axis2_env_t *env,
const axis2_char_t *ns)
{
axis2_svc_impl_t *svc_impl = NULL;
axis2_bool_t found = AXIS2_FALSE;
axis2_hash_index_t *hi = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, ns, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
if (svc_impl->ns_map && axis2_hash_count(svc_impl->ns_map) > 0)
{
for (hi = axis2_hash_first(svc_impl->ns_map, env); hi;
hi = axis2_hash_next(env, hi))
{
void * value = NULL;
void *key = NULL;
axis2_hash_this(hi, (const void **)&key, NULL,
(void **)&value);
if (0 == AXIS2_STRCMP((axis2_char_t *)value, ns))
{
found = AXIS2_TRUE;
break;
}
}
}
if (NULL == svc_impl->ns_map)
{
svc_impl->ns_map = axis2_hash_make(env);
svc_impl->ns_map = NULL;
}
if (AXIS2_FALSE == found)
{
axis2_char_t str_count[32];
axis2_char_t *tmp_val = NULL;
axis2_char_t *key = NULL;
tmp_val = AXIS2_STRDUP(ns, env);
sprintf(str_count, "%d", svc_impl->ns_count);
key = AXIS2_STRACAT("ns", str_count, env);
axis2_hash_set(svc_impl->ns_map, key, AXIS2_HASH_KEY_STRING, tmp_val);
svc_impl->ns_count++;
}
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
axis2_svc_populate_schema_mappings(
axis2_svc_t *svc,
const axis2_env_t *env)
{
axis2_array_list_t *schemas = NULL;
axis2_svc_impl_t *svc_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
schemas = axis2_svc_get_all_schemas(svc, env);
if (NULL == schemas)
{
return AXIS2_FAILURE;
}
if (AXIS2_FALSE == axis2_svc_is_schema_location_adjusted(svc, env))
{
int count = 0;
int i = 0;
axis2_hash_t *name_table = axis2_hash_make(env);
axis2_hash_t *schema_table = NULL;
count = AXIS2_ARRAY_LIST_SIZE(schemas, env);
/* calculate unique names for the schemas */
for (i = 0; i < count; i++)
{
xml_schema_t *schema = AXIS2_ARRAY_LIST_GET(schemas, env, i);
axis2_svc_calculate_schema_names(svc, env, schema, name_table);
}
/* adjust the schema locations as per the calculated names */
for (i = 0; i < count; i++)
{
xml_schema_t *schema = AXIS2_ARRAY_LIST_GET(schemas, env, i);
axis2_svc_adjust_schema_names(svc, env, schema, name_table);
}
/* reverse the name table so that there is a mapping from the
* name to the schema
*/
schema_table = axis2_svc_swap_mapping_table(svc, env, name_table);
axis2_svc_set_schema_mapping_table(svc, env, schema_table);
}
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
axis2_svc_calculate_schema_names(
axis2_svc_t *svc,
const axis2_env_t *env,
xml_schema_t *schema,
axis2_hash_t *name_table)
{
axis2_svc_impl_t *svc_impl = NULL;
xml_schema_obj_collection_t *collection = NULL;
xml_schema_obj_t *schema_obj = NULL;
int count = 0;
int i = 0;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, schema, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, name_table, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
collection = XML_SCHEMA_GET_INCLUDES(schema, env);
count = XML_SCHEMA_OBJ_COLLECTION_GET_COUNT(collection, env);
for (i = 0; i < count; i++)
{
schema_obj = XML_SCHEMA_OBJ_COLLECTION_GET_ITEM(collection, env, i);
if (XML_SCHEMA_EXTERNAL == XML_SCHEMA_OBJ_GET_TYPE(schema_obj, env))
{
xml_schema_external_t *schema_external = NULL;
xml_schema_t *schema1 = NULL;
schema_external = (xml_schema_external_t *)schema_obj;
schema1 = XML_SCHEMA_EXTERNAL_GET_SCHEMA(schema_external, env);
if (schema1)
{
axis2_char_t *name = NULL;
axis2_char_t str_count[32];
sprintf(str_count, "%d", svc_impl->sc_calc_count++);
axis2_svc_calculate_schema_names(svc, env, schema1, name_table);
name = axis2_strcat(env, "xsd", str_count,
svc_impl->custom_schema_name_suffix, NULL);
axis2_hash_set(name_table, schema1, AXIS2_HASH_KEY_STRING,
name);
}
}
}
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
axis2_svc_adjust_schema_names(
axis2_svc_t *svc,
const axis2_env_t *env,
xml_schema_t *schema,
axis2_hash_t *names)
{
axis2_svc_impl_t *svc_impl = NULL;
xml_schema_obj_collection_t *collection = NULL;
xml_schema_obj_t *schema_obj = NULL;
int count = 0;
int i = 0;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, schema, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, names, AXIS2_FAILURE);
svc_impl = AXIS2_INTF_TO_IMPL(svc);
collection = XML_SCHEMA_GET_INCLUDES(schema, env);
count = XML_SCHEMA_OBJ_COLLECTION_GET_COUNT(collection, env);
for (i = 0; i < count; i++)
{
schema_obj = XML_SCHEMA_OBJ_COLLECTION_GET_ITEM(collection, env, i);
if (XML_SCHEMA_EXTERNAL == XML_SCHEMA_OBJ_GET_TYPE(schema_obj, env))
{
xml_schema_external_t *schema_external = NULL;
xml_schema_t *schema1 = NULL;
schema_external = (xml_schema_external_t *)schema_obj;
schema1 = XML_SCHEMA_EXTERNAL_GET_SCHEMA(schema_external, env);
if (schema1)
{
axis2_char_t *name = NULL;
axis2_char_t *value = NULL;
axis2_svc_adjust_schema_names(svc, env, schema1, names);
value = (axis2_char_t *) axis2_hash_get(names, schema1,
AXIS2_HASH_KEY_STRING);
if (value)
{
if (svc_impl->custom_schema_name_prefix)
{
name = axis2_strcat(env,
svc_impl->custom_schema_name_prefix, value, NULL);
}
else
{
name = axis2_strcat(env, "?xsd=", value, NULL);
}
XML_SCHEMA_EXTERNAL_SET_SCHEMA_LOCATION(schema_external, env,
name);
}
}
}
}
return AXIS2_SUCCESS;
}
axis2_hash_t *AXIS2_CALL
axis2_svc_swap_mapping_table(
axis2_svc_t *svc,
const axis2_env_t *env,
axis2_hash_t *orig_table)
{
axis2_hash_t *new_table = NULL;
axis2_hash_index_t *hi = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK(env->error, orig_table, AXIS2_FAILURE);
new_table = axis2_hash_make(env);
for (hi = axis2_hash_first(orig_table, env); env;
hi = axis2_hash_next(env, hi))
{
void * value = NULL;
void *key = NULL;
axis2_hash_this(hi, (const void **)&key, NULL,
(void **)&value);
axis2_hash_set(new_table, value, AXIS2_HASH_KEY_STRING, key);
}
return new_table;
}