blob: c399a3a54636e3c593357c37c98496f4955f04bf [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_OP_H
#define AXIS2_OP_H
/**
* @file axis2_op.h
* @brief axis2 op interface
*/
#include <axis2_param_container.h>
#include <axis2_wsdl_op.h>
#include <axis2_svc.h>
#include <axis2_msg_recv.h>
#include <axis2_array_list.h>
#include <axis2_module_desc.h>
#include <axis2_wsdl_msg_ref.h>
#include <axis2_description.h>
#include <axis2_phase_meta.h>
#include <axis2_relates_to.h>
#include <axis2_msg_ctx.h>
#include <axis2_op_ctx.h>
#include <axis2_svc_ctx.h>
#include <axis2_conf_ctx.h>
#ifdef __cplusplus
extern "C"
{
#endif
/** @defgroup axis2_op Operation Description
* @ingroup axis2_core_description
* @{
*/
struct axis2_wsdl_op;
struct axis2_svc;
struct axis2_msg_recv;
struct axis2_param_container;
struct axis2_module_desc;
struct axis2_op;
struct axis2_wsdl_feature;
struct axis2_wsdl_property;
struct axis2_wsdl_fault_ref;
struct axis2_relates_to;
struct axis2_op_ctx;
struct axis2_svc_ctx;
struct axis2_msg_ctx;
struct axis2_conf_ctx;
typedef struct axis2_op_ops axis2_op_ops_t;
typedef struct axis2_op axis2_op_t;
/**
* @brief Operation ops struct
* Encapsulator struct for ops of axis2_op
*/
AXIS2_DECLARE_DATA struct axis2_op_ops
{
/**
* De-allocate memory
* @return status code
*/
axis2_status_t (AXIS2_CALL *
free) (axis2_op_t *op,
axis2_env_t **env);
/**
* De-allocate memory
* @param void op to be freed
* @return status code
*/
axis2_status_t (AXIS2_CALL *
free_void_arg) (void *op,
axis2_env_t **env);
/**
* Method addParameter
*
* @param param Parameter that will be added
*/
axis2_status_t (AXIS2_CALL *
add_param)(axis2_op_t *op,
axis2_env_t **env,
axis2_param_t *param);
/**
* Method getParameter
*
* @param name Name of the parameter
*/
axis2_param_t *(AXIS2_CALL *
get_param)(axis2_op_t *op,
axis2_env_t **env,
axis2_char_t *name);
axis2_array_list_t *(AXIS2_CALL *
get_params) (axis2_op_t *op,
axis2_env_t **env);
/**
* To check whether a given paramter is locked
*/
axis2_bool_t (AXIS2_CALL *
is_param_locked) (axis2_op_t *op,
axis2_env_t **env,
axis2_char_t *param_name);
axis2_status_t (AXIS2_CALL *
set_parent) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_svc *service_desc);
struct axis2_svc *(AXIS2_CALL *
get_parent) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_qname) (axis2_op_t *op,
axis2_env_t **env,
axis2_qname_t *qname);
axis2_qname_t *(AXIS2_CALL *
get_qname) (void *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_msg_exchange_pattern) (axis2_op_t *op,
axis2_env_t **env,
axis2_char_t *pattern);
axis2_char_t *(AXIS2_CALL *
get_msg_exchange_pattern) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_msg_recv) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_msg_recv *msg_recv);
struct axis2_msg_recv *(AXIS2_CALL *
get_msg_recv) (axis2_op_t *op,
axis2_env_t **env);
axis2_char_t *(AXIS2_CALL *
get_style) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_style) (axis2_op_t *op,
axis2_env_t **env,
axis2_char_t *style);
/**
* To ebgage a module it is reuired to use this method
*
* @param moduleref
* @throws org.apache.axis2.AxisFault
*/
axis2_status_t (AXIS2_CALL *
engage_module) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_module_desc *moduleref);
axis2_status_t (AXIS2_CALL *
add_to_engage_module_list) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_module_desc *module_name);
/**
* Method getEngadgedModules
*
*/
axis2_array_list_t *(AXIS2_CALL *
get_modules) (axis2_op_t *op,
axis2_env_t **env);
/**
* This method will simply map the String URI of the Message exchange
* pattern to a integer. Further in the first lookup it will cash the looked
* up value so that the subsequent method calls will be extremely efficient.
*
*/
int (AXIS2_CALL *
get_axis_specific_mep_const) (axis2_op_t *op,
axis2_env_t **env);
axis2_array_list_t *(AXIS2_CALL *
get_phases_in_fault_flow) (axis2_op_t *op,
axis2_env_t **env);
axis2_array_list_t *(AXIS2_CALL *
get_phases_out_fault_flow) (axis2_op_t *op,
axis2_env_t **env);
axis2_array_list_t * (AXIS2_CALL *
get_phases_outflow) (axis2_op_t *op,
axis2_env_t **env);
axis2_array_list_t *(AXIS2_CALL *
get_remaining_phases_inflow) (axis2_op_t *op,
axis2_env_t **env);
/**
* @param list
*/
axis2_status_t (AXIS2_CALL *
set_phases_in_fault_flow) (axis2_op_t *op,
axis2_env_t **env,
axis2_array_list_t *list);
/**
* @param list
*/
axis2_status_t (AXIS2_CALL *
set_phases_out_fault_flow) (axis2_op_t *op,
axis2_env_t **env,
axis2_array_list_t *list);
/**
* @param list
*/
axis2_status_t (AXIS2_CALL *
set_phases_outflow) (axis2_op_t *op,
axis2_env_t **env,
axis2_array_list_t *list);
/**
* @param list
*/
axis2_status_t (AXIS2_CALL *
set_remaining_phases_inflow) (axis2_op_t *op,
axis2_env_t **env,
axis2_array_list_t *list);
axis2_status_t (AXIS2_CALL *
add_module) (axis2_op_t *op,
axis2_env_t **env,
axis2_qname_t *module_name);
axis2_array_list_t *(AXIS2_CALL *
get_module_refs) (axis2_op_t *op,
axis2_env_t **env);
axis2_linked_list_t *(AXIS2_CALL *
get_in_faults) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_in_faults) (axis2_op_t *op,
axis2_env_t **env,
axis2_linked_list_t *in_faults);
struct axis2_wsdl_msg_ref *(AXIS2_CALL *
get_input_msg) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_input_msg) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_wsdl_msg_ref *input_msg);
axis2_linked_list_t *(AXIS2_CALL *
get_out_faults) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_out_faults) (axis2_op_t *op,
axis2_env_t **env,
axis2_linked_list_t *out_faults);
struct axis2_wsdl_msg_ref *(AXIS2_CALL *
get_output_msg) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_output_msg) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_wsdl_msg_ref *output_msg);
axis2_bool_t (AXIS2_CALL *
is_safe) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_safety) (axis2_op_t *op,
axis2_env_t **env,
axis2_bool_t safe);
axis2_char_t *(AXIS2_CALL *
get_target_namespace) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
add_in_fault) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_wsdl_fault_ref *in_fault);
axis2_status_t (AXIS2_CALL *
add_out_fault) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_wsdl_fault_ref *out_fault);
axis2_status_t (AXIS2_CALL *
add_feature) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_wsdl_feature *feature);
axis2_linked_list_t *(AXIS2_CALL *
get_features) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
add_property) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_wsdl_property *wsdl_property);
axis2_linked_list_t *(AXIS2_CALL *
get_Properties) (axis2_op_t *op,
axis2_env_t **env);
axis2_status_t (AXIS2_CALL *
set_wsdl_op) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_wsdl_op *wsdl_op);
/**
* This method is responsible for finding a MEPContext for an incomming
* messages. An incomming message can be of two states.
* <p/>
* 1)This is a new incomming message of a given MEP. 2)This message is a
* part of an MEP which has already begun.
* <p/>
* The method is special cased for the two MEPs
* <p/>
* #IN_ONLY #IN_OUT
* <p/>
* for two reasons. First reason is the wide usage and the second being that
* the need for the MEPContext to be saved for further incomming messages.
* <p/>
* In the event that MEP of this op is different from the two MEPs
* deafulted above the decession of creating a new or this message relates
* to a MEP which already in business is decided by looking at the WSA
* Relates TO of the incomming message.
*
* @param msgContext
*/
struct axis2_op_ctx *(AXIS2_CALL *
find_op_ctx) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_msg_ctx *msg_ctx,
struct axis2_svc_ctx *svc_ctx);
/**
* This will not create a new op context if there is no one already.
* @param msgContext
* @return
* @throws AxisFault
*/
struct axis2_op_ctx *(AXIS2_CALL *
find_for_existing_op_ctx) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_msg_ctx *msg_ctx);
axis2_status_t (AXIS2_CALL *
register_op_ctx) (axis2_op_t *op,
axis2_env_t **env,
struct axis2_msg_ctx *msg_ctx,
struct axis2_op_ctx *op_ctx);
};
/**
* @brief Operaton struct
* Axis2 Operation
*/
AXIS2_DECLARE_DATA struct axis2_op
{
axis2_wsdl_op_t base;
axis2_op_ops_t *ops;
struct axis2_param_container *param_container;
};
/**
* Creates op struct
* @return pointer to newly created op
*/
AXIS2_DECLARE(axis2_op_t *)
axis2_op_create (axis2_env_t **env);
/**
* Creates op struct with name
* @param name op name
* @return pointer to newly created op
*/
AXIS2_DECLARE(axis2_op_t *)
axis2_op_create_with_qname (axis2_env_t **env,
axis2_qname_t *name);
/**
* Creates op struct with wsdl op
* @param wsdl_op wsdl op
* @return pointer to newly created op
*/
AXIS2_DECLARE(axis2_op_t *)
axis2_op_create_with_wsdl_op (axis2_env_t **env,
struct axis2_wsdl_op *wsdl_op);
AXIS2_DECLARE(axis2_status_t)
axis2_op_free_void_arg(void *op,
axis2_env_t **env);
/************************** Start of function macros **************************/
#define AXIS2_OP_FREE(op, env) \
((op)->ops->free (op, env))
#define AXIS2_OP_ADD_PARAM(op, env, param) \
((op)->ops->add_param (op, env, param))
#define AXIS2_OP_GET_PARAM(op, env, key) \
((op)->ops->get_param (op, env, key))
#define AXIS2_OP_GET_PARAMS(op, env) \
((op)->ops->get_params (op, env))
#define AXIS2_OP_IS_PARAM_LOCKED(op, env, param_name) \
((op)->ops->is_param_locked(op, env, param_name))
#define AXIS2_OP_SET_PARENT(op, env, service_desc) \
((op)->ops->set_parent (op, env, service_desc))
#define AXIS2_OP_GET_PARENT(op, env) \
((op)->ops->get_parent (op, env))
#define AXIS2_OP_SET_MSG_RECEIVER(op, env, msg_recv) \
((op)->ops->set_msg_recv (op, env, msg_recv))
#define AXIS2_OP_GET_MSG_RECEIVER(op, env) \
((op)->ops->get_msg_recv (op, env))
#define AXIS2_OP_SET_QNAME(op, env, qname) \
((op)->ops->set_qname (op, env, qname))
#define AXIS2_OP_GET_QNAME(op, env) \
(((axis2_op_t *) op)->ops->get_qname (op, env))
#define AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op , env, \
msg_exchange_pattern) \
((op)->ops->set_msg_exchange_pattern (op, env, \
msg_exchange_pattern))
#define AXIS2_OP_GET_MSG_EXCHANGE_PATTERN(op, env) \
((op)->ops->get_msg_exchange_pattern (op, env))
#define AXIS2_OP_GET_STYLE(op, env) \
((op)->ops->get_style (op, env))
#define AXIS2_OP_SET_STYLE(op, env, style) \
((op)->ops->set_style (op, env, style))
#define AXIS2_OP_ENGAGE_MODULE(op, env, moduleref) \
((op)->ops->engage_module (op, env, moduleref))
#define AXIS2_OP_ADD_TO_ENGAGE_MODULE_LIST(op, env, module_name) \
((op)->ops->add_to_engage_module_list (op, env, module_name))
#define AXIS2_OP_GET_MODULES(op, env) \
((op)->ops->get_modules (op, env))
#define AXIS2_OP_GET_AXIS_SPECIFIC_MEP_CONST(op, env) \
((op)->ops->get_axis_specific_mep_const (op, env))
#define AXIS2_OP_GET_PHASES_IN_FAULT_FLOW(op, env) \
((op)->ops->get_phases_in_fault_flow (op, env))
#define AXIS2_OP_GET_PHASES_OUT_FAULT_FLOW(op, env) \
((op)->ops->get_phases_out_fault_flow (op, env))
#define AXIS2_OP_GET_PHASES_OUTFLOW(op, env) \
((op)->ops->get_phases_outflow (op, env))
#define AXIS2_OP_GET_REMAINING_PHASES_INFLOW(op, env) \
((op)->ops->get_remaining_phases_inflow (op, env))
#define AXIS2_OP_SET_PHASES_IN_FAULT_FLOW(op, env, list) \
((op)->ops->set_phases_in_fault_flow (op, env, list))
#define AXIS2_OP_SET_PHASES_OUT_FAULT_FLOW(op, env, list) \
((op)->ops->set_phases_out_fault_flow (op, env, list))
#define AXIS2_OP_SET_PHASES_OUTFLOW(op, env, list) \
((op)->ops->set_phases_outflow (op, env, list))
#define AXIS2_OP_SET_REMAINING_PHASES_INFLOW(op, env, list) \
((op)->ops->set_remaining_phases_inflow (op, env, list))
#define AXIS2_OP_ADD_MODULE(op, env, module_name) \
((op)->ops->add_module (op, env, module_name))
#define AXIS2_OP_GET_MODULE_REFS(op, env) \
((op)->ops->get_module_refs (op, env))
#define AXIS2_OP_GET_IN_FAULTS(op, env) \
((op)->ops->get_in_faults (op, env))
#define AXIS2_OP_SET_IN_FAULTS(op, env) \
((op)->ops->set_in_faults (op, env, in_faults))
#define AXIS2_OP_GET_INPUT_MSG(op, env) \
((op)->ops->get_input_msg (op, env))
#define AXIS2_OP_SET_INPUT_MSG(op, env) \
((op)->ops->set_input_msg (op, env, input_msg))
#define AXIS2_OP_GET_OUT_FAULTS(op, env) \
((op)->ops->get_out_faults (op, env))
#define AXIS2_OP_SET_OUT_FAULTS(op, env) \
((op)->ops->set_out_faults (op, env, out_faults))
#define AXIS2_OP_GET_OUTPUT_MSG(op, env) \
((op)->ops->get_output_msg (op, env))
#define AXIS2_OP_SET_OUTPUT_MSG(op, env) \
((op)->ops->set_output_msg (op, env, output_msg))
#define AXIS2_OP_IS_SAFE(op, env) \
((op)->ops->is_safe (op, env))
#define AXIS2_OP_SET_SAFETY(op, env, safe) \
((op)->ops->set_safety (op, env, safe))
#define AXIS2_OP_GET_TARGET_NAMESPACE(op, env) \
((op)->ops->get_target_namespace (op, env))
#define AXIS2_OP_ADD_IN_FAULT(op, env, in_fault) \
((op)->ops->add_in_fault (op, env, in_fault))
#define AXIS2_OP_ADD_OUT_FAULT(op, env, out_fault) \
((op)->ops->add_out_fault (op, env, out_fault))
#define AXIS2_OP_ADD_FEATURE(op, env, feature) \
((op)->ops->add_feature (op, env, feature))
#define AXIS2_OP_GET_FEATURES(op, env) \
((op)->ops->get_features(op, env))
#define AXIS2_OP_ADD_PROPERTY(op, env, wsdl_property) \
((op)->ops->add_property (op, env, wsdl_property))
#define AXIS2_OP_GET_PROPERTIES(op, env) \
((op)->ops->get_properties (op, env, properties))
#define AXIS2_OP_SET_WSDL_OP(op, env, wsdl_op) \
((op)->ops->set_wsdl_op (op, env, wsdl_op))
#define AXIS2_OP_FIND_OP_CTX(op, env, msg_ctx, svc_ctx) \
((op)->ops->find_op_ctx (op, env, msg_ctx, svc_ctx))
#define AXIS2_OP_FIND_FOR_EXISTING_OP_CTX(op, env, wsdl_op) \
((op)->ops->find_for_existing_op_ctx (op, env, wsdl_op))
#define AXIS2_OP_REGISTER_OP_CTX(op, env, msg_ctx, wsdl_op) \
((op)->ops->register_op_ctx (op, env, msg_ctx, wsdl_op))
/************************** End of function macros ****************************/
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_OP_H */