blob: 3ee5418e6426eaac689df27e89d79f40a2d5c4c9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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_MSG_H
#define AXIS2_MSG_H
/**
* @defgroup axis2_msg message
* @ingroup axis2_desc
* message represents a message in a WSDL. It captures SOAP headers related to
* a given message, the direction as well as the phases to be invoked along
* the flow. Based on the message direction, there could be only one flow
* associated with a message.
* @{
*/
/**
* @file axis2_msg.h
*/
#include <axis2_param_container.h>
#include <axis2_op.h>
#include <axis2_array_list.h>
#include <axis2_description.h>
#include <axis2_phase_meta.h>
#define AXIS2_MSG_IN "InMessage"
#define AXIS2_MSG_OUT "OutMessage"
#define AXIS2_MSG_IN_FAULT "InFaultMessage"
#define AXIS2_MSG_OUT_FAULT "OutFaultMessage"
#ifdef __cplusplus
extern "C"
{
#endif
/** Type name for struct axis2_msg_ops */
typedef struct axis2_msg_ops axis2_msg_ops_t;
/** Type name for struct axis2_msg */
typedef struct axis2_msg axis2_msg_t;
/**
* message ops struct.
* Encapsulator struct for ops of axis2_msg.
*/
struct axis2_msg_ops
{
/**
* Frees message.
* @param msg pointer to message
* @param env pointer to environment struct
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
free)(
axis2_msg_t *msg,
const axis2_env_t *env);
/**
* Adds a parameter.
* @param msg pointer to message
* @param env pointer to environment struct
* @param param pointer to parameter, message assumes ownership of
* parameter
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
add_param)(
axis2_msg_t *msg,
const axis2_env_t *env,
axis2_param_t *param);
/**
* Gets the named parameter.
* @param msg pointer to message
* @param env pointer to environment struct
* @param name parameter name string
* @return pointer to parameter corresponding to the same name, returns
* a reference, not a cloned copy
*/
axis2_param_t *(AXIS2_CALL *
get_param)(
const axis2_msg_t *msg,
const axis2_env_t *env,
const axis2_char_t *name);
/**
* Gets all parameters stored in message.
* @param msg pointer to message
* @param env pointer to environment struct
* @return pointer to list of parameters, returns a reference, not a
* cloned copy
*/
axis2_array_list_t *(AXIS2_CALL *
get_all_params)(
const axis2_msg_t *msg,
const axis2_env_t *env);
/**
* Checks if the named parameter is locked.
* @param msg pointer to message
* @param env pointer to environment struct
* @param param_name parameter name string
* @return AXIS2_TRUE if the parameter is locked, else AXIS2_FALSE
*/
axis2_bool_t (AXIS2_CALL *
is_param_locked)(
axis2_msg_t *msg,
const axis2_env_t *env,
const axis2_char_t *param_name);
/**
* Sets parent. Parent of a message is of type operation.
* @param msg pointer to message
* @param env pointer to environment struct
* @param op pointer to parent operation, message does not assume
* ownership of parent
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_parent)(
axis2_msg_t *msg,
const axis2_env_t *env,
axis2_op_t *op);
/**
* Gets parent. Parent of a message is of type operation.
* @param msg pointer to message
* @param env pointer to environment struct
* @return pointer to parent operation, returns a reference, not a
* cloned copy
*/
axis2_op_t *(AXIS2_CALL *
get_parent)(
const axis2_msg_t *msg,
const axis2_env_t *env);
/**
* Gets flow of execution associated with the message.
* @param msg pointer to message
* @param env pointer to environment struct
* @return pointer to array list containing the list of phases
* representing the flow
*/
axis2_array_list_t *(AXIS2_CALL *
get_flow)(
const axis2_msg_t *msg,
const axis2_env_t *env);
/**
* Sets flow of execution associated with the message.
* @param msg pointer to message
* @param env pointer to environment struct
* @param flow pointer to array list of phases representing the flow,
* message assumes ownership of flow
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_flow)(
axis2_msg_t *msg,
const axis2_env_t *env,
axis2_array_list_t *flow);
/**
* Gets direction of message.
* @param msg pointer to message
* @param env pointer to environment struct
* @return direction string
*/
const axis2_char_t *(AXIS2_CALL *
get_direction)(
const axis2_msg_t *msg,
const axis2_env_t *env);
/**
* Sets direction of message.
* @param msg pointer to message
* @param env pointer to environment struct
* @param direction pointer to direction
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_direction)(
axis2_msg_t *msg,
const axis2_env_t *env,
const axis2_char_t *direction);
/**
* Gets QName representing message.
* @param msg pointer to message
* @param env pointer to environment struct
* @return pointer to QName, returns a reference, not a cloned copy
*/
const axis2_qname_t *(AXIS2_CALL *
get_element_qname)(
const axis2_msg_t *msg,
const axis2_env_t *env);
/**
* Sets QName representing message.
* @param msg pointer to message
* @param env pointer to environment struct
* @param element_qname pointer to QName representing message, this
* function creates a clone of QName
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_element_qname)(
axis2_msg_t *msg,
const axis2_env_t *env,
const axis2_qname_t *element_qname);
/**
* Gets message name.
* @param msg pointer to message
* @param env pointer to environment struct
* @return message name string.
*/
const axis2_char_t *(AXIS2_CALL *
get_name)(
const axis2_msg_t *msg,
const axis2_env_t *env);
/**
* Sets message name.
* @param msg pointer to message
* @param env pointer to environment struct
* @param message name string
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_name)(
axis2_msg_t *msg,
const axis2_env_t *env,
const axis2_char_t *name);
/**
* Gets XML schema element associated with the message.
* @param msg pointer to message
* @param env pointer to environment struct
* @return pointer to XML schema element, returns a reference, not
* a cloned copy
*/
xml_schema_element_t *(AXIS2_CALL *
get_schema_element)(
const axis2_msg_t *msg,
const axis2_env_t *env);
};
/**
* message struct.
*/
struct axis2_msg
{
/** operations of message struct */
axis2_msg_ops_t *ops;
/** parameter container to hold message parameters */
struct axis2_param_container *param_container;
};
/**
* Creates message struct instance.
* @param env pointer to environment struct
* @return pointer to newly created message
*/
AXIS2_EXTERN axis2_msg_t *AXIS2_CALL
axis2_msg_create(
const axis2_env_t *env);
/** Frees message.
@sa axis2_msg_ops#get_svc */
#define AXIS2_MSG_FREE(msg, env) \
((msg)->ops->free (msg, env))
/** Adds given parameter.
@sa axis2_msg_ops#add_param */
#define AXIS2_MSG_ADD_PARAM(msg, env, param) \
((msg)->ops->add_param (msg, env, param))
/** Gets named parameter.
@sa axis2_msg_ops#get_param */
#define AXIS2_MSG_GET_PARAM(msg, env, key) \
((msg)->ops->get_param (msg, env, key))
/** Gets all parameters.
@sa axis2_msg_ops#get_all_params */
#define AXIS2_MSG_GET_ALL_PARAMS(msg, env) \
((msg)->ops->get_all_params (msg, env))
/** Checks if named parameter is locked.
@sa axis2_msg_ops#is_param_locked */
#define AXIS2_MSG_IS_PARAM_LOCKED(msg, env, param_name) \
((msg)->ops->is_param_locked(msg, env, param_name))
/** Sets parent operation.
@sa axis2_msg_ops#set_parent */
#define AXIS2_MSG_SET_PARENT(msg, env, service_desc) \
((msg)->ops->set_parent (msg, env, service_desc))
/** Gets parent operation.
@sa axis2_msg_ops#get_parent */
#define AXIS2_MSG_GET_PARENT(msg, env) \
((msg)->ops->get_parent (msg, env))
/** Gets execution flow.
@sa axis2_msg_ops#get_flow */
#define AXIS2_MSG_GET_FLOW(msg, env) \
((msg)->ops->get_flow (msg, env))
/** Sets execution flow.
@sa axis2_msg_ops#set_flow */
#define AXIS2_MSG_SET_FLOW(msg, env, flow) \
((msg)->ops->set_flow (msg, env, flow))
/** Gets message direction.
@sa axis2_msg_ops#get_direction */
#define AXIS2_MSG_GET_DIRECTION(msg, env) \
((msg)->ops->get_direction (msg, env))
/** Sets message direction.
@sa axis2_msg_ops#set_direction */
#define AXIS2_MSG_SET_DIRECTION(msg, env, direction) \
((msg)->ops->set_direction (msg, env, direction))
/** Gets element QName.
@sa axis2_msg_ops#get_element_qname */
#define AXIS2_MSG_GET_ELEMENT_QNAME(msg, env) \
((msg)->ops->get_element_qname(msg, env))
/** Sets element QName.
@sa axis2_msg_ops#set_element_qname */
#define AXIS2_MSG_SET_ELEMENT_QNAME(msg, env, element_qname) \
((msg)->ops->set_element_qname(msg, env, element_qname))
/** Gets name.
@sa axis2_msg_ops#get_name */
#define AXIS2_MSG_GET_NAME(msg, env) \
((msg)->ops->get_name(msg, env))
/** Sets name.
@sa axis2_msg_ops#set_name */
#define AXIS2_MSG_SET_NAME(msg, env, name) \
((msg)->ops->set_name(msg, env, name))
/** Gets schema element associated with message.
@sa axis2_msg_ops#get_schema_element */
#define AXIS2_MSG_GET_SCHEMA_ELEMENT(msg, env) \
((msg)->ops->get_schema_element(msg, env))
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_MSG_H */