blob: 57c159377f92dcd496ca822edbebe55f67745857 [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_MEP_CLIENT_H
#define AXIS2_MEP_CLIENT_H
/**
* @defgroup axis2_mep_client MEP client
* @ingroup axis2_client_api
* MEP client handles the message exchange pattern (MEP) related information
* when consuming services.
*/
/**
* @file axis2_mep_client.h
*/
#include <axis2_defines.h>
#include <axis2_env.h>
#include <axis2_error.h>
#include <axis2_op.h>
#include <axiom_node.h>
#include <axiom_soap_envelope.h>
#ifdef __cplusplus
extern "C"
{
#endif
/** Type name for struct axis2_mep_client_ops */
typedef struct axis2_mep_client_ops axis2_mep_client_ops_t;
/** Type name for struct axis2_mep_client */
typedef struct axis2_mep_client axis2_mep_client_t;
/**
* MEP client ops struct.
* Encapsulator struct for ops of axis2_mep_client.
*/
struct axis2_mep_client_ops
{
/**
* Gets SOAP action.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @return a pointer to SOAP action string
*/
const axis2_char_t *(AXIS2_CALL *
get_soap_action)(
const axis2_mep_client_t *mep_client,
const axis2_env_t *env);
/**
* Prepares the message context for invocation. Here the properties kept
* in the mep_client are copied to the message context.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @param op pointer operation to be invoked
* @param msg_ctx pointer to message context to be filled
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
prepare_invocation)(
axis2_mep_client_t *mep_client,
const axis2_env_t *env,
axis2_op_t *op,
axis2_msg_ctx_t *msg_ctx);
/**
* Prepares the SOAP envelope using the payload.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @param to_send payload to be sent in AXIOM node format
* @return a pointer to message context struct filled with the SOAP
* envelope to be sent
*/
axis2_msg_ctx_t* (AXIS2_CALL *
prepare_soap_envelope)(
axis2_mep_client_t *mep_client,
const axis2_env_t *env,
axiom_node_t *to_send);
/**
* Tries to infer the transport looking at the URL, the URL can be http://
* tcp:// mail:// local://. The method will look for the transport name as the
* protocol part of the transport.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @param epr endpoint reference struct representing the endpoint URL
* @return pointer to the transport description with inferred information
*/
axis2_transport_out_desc_t *(AXIS2_CALL *
infer_transport)(
axis2_mep_client_t *mep_client,
const axis2_env_t *env,
axis2_endpoint_ref_t *epr);
/**
* Creates default SOAP envelope.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @return pointer to default SOAP envelope created
*/
axiom_soap_envelope_t *(AXIS2_CALL *
create_default_soap_envelope)(
axis2_mep_client_t *mep_client,
const axis2_env_t *env);
/**
* Engage named module. The named module must have been configured in
* the Axis2 configuration. For a module to be detected by the
* deployment engine, the modules has to be placed in the
* AXIS2_REPOSITORY/modules directory.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @param qname QName representing the module name
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
engage_module)(
axis2_mep_client_t *mep_client,
const axis2_env_t *env,
const axis2_qname_t *qname);
/**
* Sets SOAP version URI.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @param soap_version_uri SOAP version URI
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_soap_version_uri)(
axis2_mep_client_t *mep_client,
const axis2_env_t *env,
const axis2_char_t *soap_version_uri);
/**
* Sets SOAP action.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @param soap_action SOAP action
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_soap_action)(
axis2_mep_client_t *mep_client,
const axis2_env_t *env,
const axis2_char_t *soap_action);
/**
* Sets WSA action.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @param wsa_action Web services Addressing action
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_wsa_action)(
axis2_mep_client_t *mep_client,
const axis2_env_t *env,
const axis2_char_t *wsa_action);
/**
* Gets service context.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @return pointer to service context struct if set, else NULL
*/
axis2_svc_ctx_t *(AXIS2_CALL *
get_svc_ctx)(
const axis2_mep_client_t *mep_client,
const axis2_env_t *env);
/**
* Frees MEP client struct.
* @param mep_client pointer to mep client struct
* @param env pointer to environment struct
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
free)(
axis2_mep_client_t *mep_client,
const axis2_env_t *env);
};
/**
* mep client struct.
*/
struct axis2_mep_client
{
/** operations of mep client */
axis2_mep_client_ops_t *ops;
};
/**
* Creates a mep client struct for a specified service context.
* @param env pointer to environment struct
* @param svc_ctx pointer to service context. Newly created client
* assumes ownership of the svc_ctx
* @param mep URI representing the message exchange pattern
* @return a pointer to newly created mep client struct,
* or NULL on error with error code set in environment's error
*/
AXIS2_EXTERN axis2_mep_client_t *AXIS2_CALL
axis2_mep_client_create(
const axis2_env_t *env,
axis2_svc_ctx_t *svc_ctx,
const axis2_char_t *mep);
/**
* Sends a message represented by the given message context and captures
* the response in return message context.
* @param env pointer to environment struct
* @param msg_ctx pointer to message context representing the message to
* be sent
* @return message context representing the received response
*/
axis2_msg_ctx_t *AXIS2_CALL
axis2_mep_client_two_way_send(
const axis2_env_t *env,
axis2_msg_ctx_t *msg_ctx);
/**
* Receives a message corresponding to a request depicted by given
* message context.
* @param env pointer to environment struct
* @param msg_ctx pointer to message context representing the response to
* be received
* @return message context representing the received response
*/
axis2_msg_ctx_t *AXIS2_CALL
axis2_mep_client_receive(
const axis2_env_t *env,
axis2_msg_ctx_t *msg_ctx);
/** Gets SOAP action.
@sa axis2_mep_client_ops#get_soap_action */
#define AXIS2_MEP_CLIENT_GET_SOAP_ACTION(mep_client, env) \
((mep_client)->ops->get_soap_action(mep_client, env))
/** Prepares mep client for invocation.
@sa axis2_mep_client_ops#prepare_invocation */
#define AXIS2_MEP_CLIENT_PREPARE_INVOCATION(mep_client, env, op, msg_ctx) \
((mep_client)->ops->prepare_invocation(mep_client, env, op, msg_ctx))
/** Prepares SOAP envelope.
@sa axis2_mep_client_ops#prepare_soap_envelope */
#define AXIS2_MEP_CLIENT_PREPARE_SOAP_ENVELOPE(mep_client, env, to_send) \
((mep_client)->ops->prepare_soap_envelope(mep_client, env, to_send))
/** Infers transport.
@sa axis2_mep_client_ops#infer_transport */
#define AXIS2_MEP_CLIENT_INFER_TRANSPORT(mep_client, env, epr) \
((mep_client)->ops->infer_transport(mep_client, env, epr))
/** Creates default SOAP envelope.
@sa axis2_mep_client_ops#create_default_soap_envelope */
#define AXIS2_MEP_CLIENT_CREATE_DEFAULT_SOAP_ENVELOPE(mep_client, env) \
((mep_client)->ops->create_default_soap_envelope(mep_client, env))
/** Engages named module.
@sa axis2_mep_client_ops#engage_module */
#define AXIS2_MEP_CLIENT_ENGAGE_MODULE(mep_client, env, qname) \
((mep_client)->ops->engage_module(mep_client, env, qname))
/** Sets SOAP version URI.
@sa axis2_mep_client_ops#set_soap_version_uri */
#define AXIS2_MEP_CLIENT_SET_SOAP_VERSION_URI(mep_client, env, soap_version_uri)\
((mep_client)->ops->set_soap_version_uri(mep_client, env, soap_version_uri))
/** Sets SOAP action.
@sa axis2_mep_client_ops#set_soap_action */
#define AXIS2_MEP_CLIENT_SET_SOAP_ACTION(mep_client, env, soap_action) \
((mep_client)->ops->set_soap_action(mep_client, env, soap_action))
/** Sets WSA action.
@sa axis2_mep_client_ops#set_wsa_action */
#define AXIS2_MEP_CLIENT_SET_WSA_ACTION(mep_client, env, wsa_action) \
((mep_client)->ops->set_wsa_action(mep_client, env, wsa_action))
/** Gets service context.
@sa axis2_mep_client_ops#get_svc_ctx */
#define AXIS2_MEP_CLIENT_GET_SVC_CTX(mep_client, env) \
((mep_client)->ops->get_svc_ctx(mep_client, env))
/** Frees mep client.
@sa axis2_mep_client_ops#free */
#define AXIS2_MEP_CLIENT_FREE(mep_client, env) \
((mep_client)->ops->free (mep_client, env))
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_MEP_CLIENT_H */