blob: 6b9f991032709526afa8a14045a023bd45e55f3b [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.
*/
#ifndef AXIS2_SVC_H
#define AXIS2_SVC_H
/**
* @file axis2_svc.h
* @brief axis2 service interface
*/
#include <axis2_param_container.h>
#include <axis2_flow_container.h>
#include <axis2_wsdl_svc.h>
#include <axis2_op.h>
#include <axis2_svc_grp.h>
#include <axis2_qname.h>
#include <axis2_error.h>
#include <axis2_array_list.h>
#include <axis2.h>
#include <axis2_phase_resolver.h>
#include <axis2_module_desc.h>
#include <axis2_conf.h>
#include <axis2_wsdl_soap_op.h>
#include <axis2_string.h>
#include <axis2_wsdl_endpoint.h>
#ifdef __cplusplus
extern "C"
{
#endif
/** @defgroup axis2_svc Service description
* @ingroup axis2_core_description
* @{
*/
struct axis2_wsdl_endpoint;
struct axis2_svc_grp;
struct axis2_op;
struct axis2_flow_container;
struct axis2_param_container;
struct axis2_wsdl_svc;
struct axis2_wsdl_interface;
struct axis2_module_desc;
struct axis2_conf;
struct axis2_wsdl_soap_op;
typedef struct axis2_svc_ops axis2_svc_ops_t;
typedef struct axis2_svc axis2_svc_t;
/**
* @brief Service ops struct
* Encapsulator struct for ops of axis2_svc
*/
struct axis2_svc_ops
{
axis2_status_t (AXIS2_CALL *
free) (axis2_svc_t *svc,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
add_op) (axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_op *op);
struct axis2_op *(AXIS2_CALL *
get_op_with_qname) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_qname_t *op_qname);
struct axis2_op *(AXIS2_CALL *
get_op_with_name) (axis2_svc_t *svc,
axis2_env_t **env,
const axis2_char_t * op_name);
axis2_hash_t *(AXIS2_CALL *
get_ops) (axis2_svc_t *svc,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_parent) (axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_svc_grp *svc_grp);
struct axis2_svc_grp *(AXIS2_CALL *
get_parent) (axis2_svc_t *svc,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_qname) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_qname_t *qname);
axis2_qname_t *(AXIS2_CALL *
get_qname) (const axis2_svc_t *svc,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
add_param) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_param_t *param);
axis2_param_t *(AXIS2_CALL *
get_param) (axis2_svc_t *svc,
axis2_env_t **env,
const axis2_char_t *name);
axis2_array_list_t *(AXIS2_CALL *
get_params) (axis2_svc_t *svc,
axis2_env_t **env);
axis2_bool_t (AXIS2_CALL *
is_param_locked) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_char_t *param_name);
axis2_status_t (AXIS2_CALL *
set_svc_interface) (axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_wsdl_interface *svc_interface);
struct axis2_wsdl_interface * (AXIS2_CALL *
get_svc_interface) (axis2_svc_t *svc,
axis2_env_t **env);
/**
* To ebgage a module it is reuired to use this method
*
* @param moduleref
* @throws AxisFault
*/
axis2_status_t (AXIS2_CALL *
engage_module) (axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_module_desc * moduleref,
struct axis2_conf * axis2_config);
/**
* To add a opeartion to a service if a module requird to do so
*
* @param module
*/
axis2_status_t (AXIS2_CALL *
add_module_ops) (axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_module_desc * module_desc,
struct axis2_conf * axis2_config);
axis2_status_t (AXIS2_CALL *
add_to_engaged_module_list) (axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_module_desc *module_name);
/**
* Method getEngadgedModules
*
* @return Collection
*/
axis2_array_list_t * (AXIS2_CALL *
get_engaged_modules) (axis2_svc_t *svc,
axis2_env_t **env);
/**
* To get the WSDL opeartion element in servic einterface
* @param opName <code>QName</cde>
* @return WSDLOperation <code>WSDLOperation</code>
*/
void * (AXIS2_CALL *
get_wsdl_op) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_qname_t *op_name);
/**
* Method setContextPath
*
* @param contextPath
*/
axis2_status_t (AXIS2_CALL *
set_context_path) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_char_t *context_path);
/**
* Method getContextPath
*
* @return context path
*/
axis2_char_t * (AXIS2_CALL *
get_context_path) (axis2_svc_t *svc,
axis2_env_t **env);
/**
* Method setStyle
*
* @param style
*/
axis2_status_t (AXIS2_CALL *
set_style) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_char_t * style);
/**
* Method getStyle
*
* @return axis2_char_t *
*/
axis2_char_t * (AXIS2_CALL *
get_style) (axis2_svc_t *svc,
axis2_env_t **env);
/**
* Method getInFlow
*
* @return struct axis2_flow *
*/
struct axis2_flow * (AXIS2_CALL *
get_inflow) (axis2_svc_t *svc,
axis2_env_t **env);
/**
* Method setInFlow
*
* @param inFlow
*/
axis2_status_t (AXIS2_CALL *
set_inflow) (axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_flow *inflow);
/**
* Method getOutFlow
*
* @return struct axis2_flow *
*/
struct axis2_flow * (AXIS2_CALL *
get_outflow) (axis2_svc_t *svc,
axis2_env_t **env);
/**
* Method setOutFlow
*
* @param outFlow
*/
axis2_status_t (AXIS2_CALL *
set_outflow) (axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_flow *outflow);
/**
* Method getFaultInFlow
*
* @return struct axis2_flow *
*/
struct axis2_flow *(AXIS2_CALL *
get_fault_inflow) (axis2_svc_t *svc,
axis2_env_t **env);
/**
* Method setFaultInFlow
*
* @param fault_flow
*/
axis2_status_t (AXIS2_CALL *
set_fault_inflow) (axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_flow *fault_flow);
struct axis2_flow * (AXIS2_CALL *
get_fault_outflow) (axis2_svc_t *svc,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_fault_outflow) (axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_flow *fault_flow);
/**
* This method will return the op given particular SOAP Action.
* This method should only be called if there is only one Endpoint is defined
* for this Service. If more than one Endpoint exists one of them will be picked.
* If more than one Operation is found with the given
* SOAP Action; null will be ruturned. If no particular Operation is found with
* the given SOAP Action; null will be returned.
*
* @param soapAction SOAP Action defined for the particular Operation
* @return A struct axis2_op * if a unque Operation can be found with the given SOAP Action
* otherwise will return null.
*/
struct axis2_op * (AXIS2_CALL *
get_op_by_soap_action) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_char_t *soap_action);
/**
* This method will return the op given the particular endpoing and the
* particular SOAP Action. If more than one Operation is found with the given
* SOAP Action; null will be ruturned. If no particular Operation is found with
* the given SOAP Action; null will be returned
*
* @param endpoint Particular Enpoint in which the bining is defined with the particular SOAP
* Action.
* @param soapAction SOAP Action defined for the particular Operation
* @return A struct axis2_op * if a unque Operation can be found with the given SOAP Action
* otherwise will return null.
*/
struct axis2_op * (AXIS2_CALL *
get_op_by_soap_action_and_endpoint) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_char_t *soap_action,
axis2_qname_t * endpoint);
/**
* To get the description about the service
*
* @return axis2_char_t *
*/
axis2_char_t * (AXIS2_CALL *
get_axis2_svc_name) (axis2_svc_t *svc,
axis2_env_t **env);
/**
* Set the description about the service
*
* @param axissvcname
*/
axis2_status_t (AXIS2_CALL *
set_axis2_svc_name) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_char_t *axis2_svc_name);
/**
* This method will set the current time as last update time of the service
*/
axis2_status_t (AXIS2_CALL *
set_last_update) (axis2_svc_t *svc,
axis2_env_t **env);
long (AXIS2_CALL *
get_last_update) (axis2_svc_t *svc,
axis2_env_t **env);
axis2_char_t * (AXIS2_CALL *
get_filename) (axis2_svc_t *svc,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_filename) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_char_t *filename);
axis2_hash_t * (AXIS2_CALL *
get_endpoints) (axis2_svc_t *svc,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_endpoints) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_hash_t * endpoints);
axis2_status_t (AXIS2_CALL *
set_endpoint)(axis2_svc_t *svc,
axis2_env_t **env,
struct axis2_wsdl_endpoint * endpoint);
struct axis2_wsdl_endpoint * (AXIS2_CALL *
get_endpoint) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_qname_t * qname);
axis2_char_t * (AXIS2_CALL *
get_namespace) (axis2_svc_t *svc,
axis2_env_t **env);
/**
* To add the was action paramater into has map so that was action based dispatch can support
*/
axis2_status_t (AXIS2_CALL *
add_mapping) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_char_t * mapping_key ,
struct axis2_op * axis2_op);
axis2_status_t (AXIS2_CALL *
add_module_ref) (axis2_svc_t *svc,
axis2_env_t **env,
axis2_qname_t *moduleref);
axis2_array_list_t *(AXIS2_CALL *
get_modules) (axis2_svc_t *svc,
axis2_env_t **env);
};
/**
* @brief Service struct
* Axis2 Service
*/
struct axis2_svc
{
axis2_svc_ops_t *ops;
struct axis2_param_container *param_container;
struct axis2_flow_container *flow_container;
struct axis2_wsdl_svc *wsdl_svc;
};
/**
* Creates service struct with qname
* @return pointer to newly created service
*/
AXIS2_DECLARE(axis2_svc_t *)
axis2_svc_create (axis2_env_t **env);
/**
* Creates service struct with qname
* @param qname ualified name
* @return pointer to newly created service
*/
AXIS2_DECLARE(axis2_svc_t *)
axis2_svc_create_with_qname (axis2_env_t **env,
axis2_qname_t *qname);
/**
* Creates service struct with wsdl service
* @param wsdl_svc wsdl service
* @return pointer to newly created service
*/
AXIS2_DECLARE(axis2_svc_t *)
axis2_svc_create_with_wsdl_svc (axis2_env_t **env,
struct axis2_wsdl_svc *wsdl_svc);
/**************************** Start of function macros ************************/
#define AXIS2_SVC_FREE(svc, env) ((svc)->ops->free (svc, env))
#define AXIS2_SVC_ADD_OP(svc, env, op) \
((svc)->ops->add_op (svc, env, op))
#define AXIS2_SVC_GET_OP_WITH_QNAME(svc, env, op_qname) \
((svc)->ops->get_op_with_qname (svc, env, op_qname))
#define AXIS2_SVC_GET_OP_WITH_NAME(svc, env, op_name) \
((svc)->ops->get_op_with_name (svc, env, op_name))
#define AXIS2_SVC_GET_OPS(svc, env) ((svc)->ops->get_ops (svc, env))
#define AXIS2_SVC_SET_PARENT(svc, env , svc_grp) ((svc)->ops->set_parent \
(svc, env, svc_grp))
#define AXIS2_SVC_GET_PARENT(svc, env) ((svc)->ops->get_parent (svc, env))
#define AXIS2_SVC_SET_QNAME(svc, env, qname) ((svc)->ops->set_qname(svc , env, qname))
#define AXIS2_SVC_GET_QNAME(svc, env) ((svc)->ops->get_qname(svc , env))
#define AXIS2_SVC_ADD_PARAM(svc, env, param) ((svc)->ops->add_param(svc , env, param))
#define AXIS2_SVC_GET_PARAM(svc, env, name) ((svc)->ops->get_param(svc , env, name))
#define AXIS2_SVC_GET_PARAMS(svc, env) ((svc)->ops->get_params(svc , env))
#define AXIS2_SVC_IS_PARAM_LOCKED(svc, env, param_name) \
((svc)->ops->is_param_locked(svc, env, param_name))
#define AXIS2_SVC_SET_SVC_INTERFACE(svc, env, svc_interface) \
((svc)->ops->set_svc_interface(svc, env, svc_interface))
#define AXIS2_SVC_GET_SVC_INTERFACE(svc, env) \
((svc)->ops->get_svc_interface(svc, env))
#define AXIS2_SVC_ENGAGE_MODULE(svc, env, moduleref, axis2_config) \
((svc)->ops->engage_module(svc, env, moduleref, axis2_config))
#define AXIS2_SVC_ADD_MODULE_OPS(svc, env, module_desc, axis2_config) \
((svc)->ops->add_module_ops(svc, env, module_desc, axis2_config))
#define AXIS2_SVC_ADD_TO_ENGAGED_MODULE_LIST(svc, env, module_name) \
((svc)->ops->add_to_engaged_module_list(svc, env, module_name))
#define AXIS2_SVC_GET_ENGAGED_MODULES(svc, env) \
((svc)->ops->get_engaged_modules(svc, env))
#define AXIS2_SVC_GET_WSDL_OP(svc, env, op_name) \
((svc)->ops->get_wsdl_op(svc, env, op_name))
#define AXIS2_SVC_SET_CONTEXT_PATH(svc, env, context_path) \
((svc)->ops->set_context_path(svc, env, context_path))
#define AXIS2_SVC_GET_CONTEXT_PATH(svc, env) \
((svc)->ops->get_context_path(svc, env))
#define AXIS2_SVC_SET_STYLE(svc, env, style) \
((svc)->ops->set_style(svc, env, style))
#define AXIS2_SVC_GET_STYLE(svc, env) \
((svc)->ops->get_style(svc, env))
#define AXIS2_SVC_GET_INFLOW(svc, env) \
((svc)->ops->get_inflow(svc, env))
#define AXIS2_SVC_SET_INFLOW(svc, env, inflow) \
((svc)->ops->set_inflow(svc, env, inflow))
#define AXIS2_SVC_GET_OUTFLOW(svc, env) \
((svc)->ops->get_outflow(svc, env))
#define AXIS2_SVC_SET_OUTFLOW(svc, env, outflow) \
((svc)->ops->set_outflow(svc, env, outflow))
#define AXIS2_SVC_GET_FAULT_INFLOW(svc, env) \
((svc)->ops->get_fault_inflow(svc, env))
#define AXIS2_SVC_SET_FAULT_INFLOW(svc, env, fault_inflow) \
((svc)->ops->set_fault_inflow(svc, env, fault_inflow))
#define AXIS2_SVC_GET_FAULT_OUTFLOW(svc, env) \
((svc)->ops->get_fault_outflow(svc, env))
#define AXIS2_SVC_SET_FAULT_OUTFLOW(svc, env, fault_outflow) \
((svc)->ops->set_fault_outflow(svc, env, fault_outflow))
#define AXIS2_SVC_GET_OP_BY_SOAP_ACTION(svc, env, soap_action) \
((svc)->ops->get_op_by_soap_action(svc, env, soap_action))
#define AXIS2_SVC_GET_OP_BY_SOAP_ACTION_AND_ENDPOINT(svc, env, soap_action, endpoint) \
((svc)->ops->get_op_by_soap_action_and_endpoint(svc, env, soap_action, endpoint))
#define AXIS2_SVC_GET_AXIS2_SVC_NAME(svc, env) \
((svc)->ops->get_axis2_svc_name(svc, env))
#define AXIS2_SVC_SET_AXIS2_SVC_NAME(svc, env, axis2_svc_name) \
((svc)->ops->set_axis2_svc_name(svc, env, axis2_svc_name))
#define AXIS2_SVC_SET_LAST_UPDATE(svc, env) \
((svc)->ops->set_last_update(svc, env))
#define AXIS2_SVC_GET_LAST_UPDATE(svc, env) \
((svc)->ops->get_last_update(svc, env))
#define AXIS2_SVC_GET_FILENAME(svc, env) \
((svc)->ops->get_filename(svc, env))
#define AXIS2_SVC_SET_FILENAME(svc, env, filename) \
((svc)->ops->set_filename(svc, env, filename))
#define AXIS2_SVC_GET_ENDPOINTS(svc, env) \
((svc)->ops->get_endpoints(svc, env))
#define AXIS2_SVC_SET_ENDPOINTS(svc, env, endpoints) \
((svc)->ops->set_endpoints(svc, env, endpoints))
#define AXIS2_SVC_SET_ENDPOINT(svc, env, endpoint) \
((svc)->ops->set_endpoint(svc, env, endpoint))
#define AXIS2_SVC_GET_ENDPOINT(svc, env, qname) \
((svc)->ops->get_endpoint(svc, env, qname))
#define AXIS2_SVC_GET_QNAMESPACE(svc, env) \
((svc)->ops->get_namespace(svc, env))
#define AXIS2_SVC_ADD_MAPPING(svc, env, mapping_key, axis2_opt) \
((svc)->ops->add_mapping(svc, env, mapping_key, axis2_opt))
#define AXIS2_SVC_ADD_MODULE_REF(svc, env, moduleref) \
((svc)->ops->add_module_ref(svc, env, moduleref))
#define AXIS2_SVC_GET_MODULES(svc, env) \
((svc)->ops->get_modules(svc, env))
/**************************** End of function macros **************************/
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_SVC_H */