| /* |
| * 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_CLIENT_H |
| #define AXIS2_SVC_CLIENT_H |
| |
| |
| /** |
| * @file axis2_svc_client.h |
| * @brief axis2 Service Client interface |
| */ |
| |
| #include <axis2_defines.h> |
| #include <axis2_env.h> |
| #include <axis2_svc.h> |
| #include <axis2_options.h> |
| #include <axis2_qname.h> |
| #include <axis2_om_element.h> |
| #include <axis2_callback.h> |
| #include <axis2_endpoint_ref.h> |
| #include <axis2_svc_ctx.h> |
| #include <axis2_conf_ctx.h> |
| #include <axis2_op_client.h> |
| |
| #define AXIS2_ANON_SERVICE "__ANONYMOUS_SERVICE__" |
| #define AXIS2_ANON_OUT_ONLY_OP "__OPERATION_OUT_ONLY__" |
| #define AXIS2_ANON_ROBUST_OUT_ONLY_OP "__OPERATION_ROBUST_OUT_ONLY__" |
| #define AXIS2_ANON_OUT_IN_OP "__OPERATION_OUT_IN__" |
| |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif |
| |
| /** @defgroup axis2_svc_client Service Client |
| * @ingroup axis2_core_clientapi |
| * @{ |
| */ |
| |
| typedef struct axis2_svc_client_ops axis2_svc_client_ops_t; |
| typedef struct axis2_svc_client axis2_svc_client_t; |
| |
| |
| /** |
| * @brief Service Client ops struct |
| * Encapsulator struct for ops of axis2_svc_client |
| */ |
| struct axis2_svc_client_ops |
| { |
| /** |
| * Returns the axis2_svc_t this is a client for. This is primarily useful |
| * when the service is created anonymously or from WSDL. |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @return the axis service |
| */ |
| axis2_svc_t* (AXIS2_CALL * |
| get_svc)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env); |
| |
| /** |
| * Sets the options to be used by service client |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param options pointer to options struct to be set |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| set_options)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_options_t *options); |
| |
| /** |
| * Gets options used by service client |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @return a pointer to the options struct |
| */ |
| axis2_options_t* (AXIS2_CALL * |
| get_options)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env); |
| |
| /** |
| * Sets the client options related to this service interaction to |
| * override any options that the underlying operation client may have. |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param options pointer to options struct to be set |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| set_override_options)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_options_t *override_options); |
| |
| /** |
| * Gets the overriding options |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @return pointer to options struct |
| */ |
| axis2_options_t* (AXIS2_CALL * |
| get_override_options)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env); |
| |
| /** |
| * Engages the named module |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param module_name name of the module to be engaged |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| engage_module)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_char_t *module_name); |
| |
| /** |
| * Dis-engages the named module |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param module_name name of the module to be dis-engaged |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| disengage_module)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_char_t *module_name); |
| |
| /** |
| * Adds an XML element as a header to be sent to server side. |
| * This allows users to go a bit beyond the simple XML in/out pattern, and |
| * send custom SOAP headers. |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param header om node representing the SOAP header in XML |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| add_header)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_om_node_t *header); |
| |
| /** |
| * Removes all the headers added to service client |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| remove_headers)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env); |
| |
| /** |
| * Adds a simple header consisting of some text to be sent with interactions. |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param header_name qname representing the header name |
| * @param header_text text of the header |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| add_header_with_text)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_qname_t *header_name, |
| axis2_char_t *header_text); |
| |
| /** |
| * This is a simple client API to invoke a service operation who's MEP is |
| * Robust In-Only. This API can be used to simply send a bit of XML. |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param payload pointer to OM node representing the XML payload to be sent |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| send_robust)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_om_node_t *payload); |
| |
| /** |
| * This is a simple client API to invoke a service operation who's MEP is |
| * Robust In-Only. This API can be used to simply send a bit of XML. |
| * The difference between this function and "send_robust" is that this |
| * method has to be given the operation name as a qname, wehre as |
| * "send_robust" assumes the operation name to be |
| * "__OPERATION_ROBUST_OUT_ONLY__" |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param op_qname operation qname |
| * @param payload pointer to OM node representing the XML payload to be sent |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| send_robust_with_op_qname)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_qname_t *op_qname, |
| axis2_om_node_t *payload); |
| |
| /** |
| * Sends a bit of XML and forget about it. This API is used to interact with |
| * a service operation who's MEP is In-Only. That is, there is no |
| * opportunity to get an error from the service via this API; one may still |
| * get client-side errors, such as host unknown etc. |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param payload pointer to OM node representing the XML payload to be sent |
| */ |
| void (AXIS2_CALL * |
| fire_and_forget)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_om_node_t *payload); |
| |
| /** |
| * Sends a bit of XML and forget about it. This API is used to interact with |
| * a service operation who's MEP is In-Only. That is, there is no |
| * opportunity to get an error from the service via this API; one may still |
| * get client-side errors, such as host unknown etc. |
| * The difference between this function and "fire_and_forget" is that this |
| * method has to be given the operation name as a qname, wehre as |
| * "fire_and_forget" assumes the operation name to be |
| * "__OPERATION_OUT_ONLY__" |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param op_qname operation qname |
| * @param payload pointer to OM node representing the XML payload to be sent |
| */ |
| void (AXIS2_CALL * |
| fire_and_forget_with_op_qname)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_qname_t *op_qname, |
| axis2_om_node_t *payload); |
| |
| /** |
| * Sends XML request and receives XML response. |
| * This API is used to interact with a service operation who's MEP is In-Out. |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param payload pointer to OM node representing the XML payload to be sent |
| * @return pointer to OM node representing the XML response |
| */ |
| axis2_om_node_t* (AXIS2_CALL * |
| send_receive)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_om_node_t *payload); |
| |
| /** |
| * Sends XML request and receives XML response. |
| * This API is used to interact with a service operation who's MEP is In-Out. |
| * The difference between this function and "send_receive" is that this |
| * method has to be given the operation name as a qname, wehre as |
| * "send_receive" assumes the operation name to be |
| * "__OPERATION_OUT_IN__" |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param op_qname operation qname |
| * @param payload pointer to OM node representing the XML payload to be sent |
| * @return pointer to OM node representing the XML response |
| */ |
| axis2_om_node_t* (AXIS2_CALL * |
| send_receive_with_op_qname)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_qname_t *op_qname, |
| axis2_om_node_t *payload); |
| |
| /** |
| * Sends XML request and receives XML response, but do not block for response. |
| * This API is used to interact with a service operation who's MEP is In-Out, |
| * in a non blocking mode. |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param payload pointer to OM node representing the XML payload to be sent |
| * @callback pointer to callback struct used to capture response |
| */ |
| |
| void (AXIS2_CALL * |
| send_receive_non_blocking)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_om_node_t *payload, |
| axis2_callback_t *callback); |
| |
| /** |
| * Sends XML request and receives XML response, but do not block for response. |
| * This API is used to interact with a service operation who's MEP is In-Out, |
| * in a non blocking mode. |
| * The difference between this function and "send_receive_non_blocking" is that this |
| * method has to be given the operation name as a qname, wehre as |
| * "send_receive_non_blocking" assumes the operation name to be |
| * "__OPERATION_OUT_IN__" |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param op_qname operation qname |
| * @param payload pointer to OM node representing the XML payload to be sent |
| * @callback pointer to callback struct used to capture response |
| */ |
| void (AXIS2_CALL * |
| send_receive_non_blocking_with_op_qname)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_qname_t *op_qname, |
| axis2_om_node_t *payload, |
| axis2_callback_t *callback); |
| |
| /** |
| * Create an op_client for a specific operation. This is the way one can |
| * create a full function MEP client which can be used to exchange messages |
| * for this specific operation. |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param op_qname axis2_qname_t of the operation |
| * @return pointer to op_client configured to talk to the given operation |
| */ |
| axis2_op_client_t* (AXIS2_CALL * |
| create_op_client)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_qname_t *op_qname); |
| |
| /** |
| * This will close the output stream and/or remove entry from waiting |
| * queue of the transport Listener queue |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| finalize_invoke)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env); |
| |
| /** |
| * Gets the from EPR |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param transport name of the transport, e.g "http" |
| * @return pointer to the epr struct |
| */ |
| axis2_endpoint_ref_t* (AXIS2_CALL * |
| get_my_epr)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_char_t *transport); |
| |
| /** |
| * Gets the target EPR |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @return pointer to the epr struct |
| */ |
| axis2_endpoint_ref_t* (AXIS2_CALL * |
| get_target_epr)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env); |
| |
| /** |
| * Sets the target EPR |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @param target_epr pointer to the epr struct to be set as target |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| set_target_epr)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env, |
| axis2_endpoint_ref_t *target_epr); |
| |
| /** |
| * Gets the service context |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @return pointer to service context struct |
| */ |
| axis2_svc_ctx_t* (AXIS2_CALL * |
| get_svc_ctx)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env); |
| |
| /** |
| * Frees the service client |
| * @param svc_client pointer to service client struct |
| * @param env double pointer to environment struct. MUST NOT be NULL |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| |
| axis2_status_t (AXIS2_CALL * |
| free)( |
| struct axis2_svc_client *svc_client, |
| axis2_env_t **env); |
| }; |
| |
| /** |
| * @brief Serivce Client struct |
| * Axis2 Service Client |
| */ |
| struct axis2_svc_client |
| { |
| axis2_svc_client_ops_t *ops; |
| }; |
| |
| AXIS2_DECLARE(axis2_svc_client_t*) |
| axis2_svc_client_create( |
| axis2_env_t **env, |
| axis2_char_t *client_home); |
| |
| AXIS2_DECLARE(axis2_svc_client_t*) |
| axis2_svc_client_create_with_conf_ctx_and_svc( |
| axis2_env_t **env, |
| axis2_conf_ctx_t *conf_ctx, |
| axis2_svc_t *svc, |
| axis2_char_t *client_home); |
| |
| /************************** Start of function macros **************************/ |
| |
| #define AXIS2_SVC_CLIENT_GET_AXIS_SERVICE(svc_client) \ |
| ((svc_client)->ops->get_svc(svc_client)) |
| |
| #define AXIS2_SVC_CLIENT_SET_OPTIONS(svc_client, env, options) \ |
| ((svc_client)->ops->set_options(svc_client, env, options)) |
| |
| #define AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client) \ |
| ((svc_client)->ops->get_options(svc_client)) |
| |
| #define AXIS2_SVC_CLIENT_SET_OVERRIDE_OPTIONS(svc_client, env, override_options) \ |
| ((svc_client)->ops->set_override_options(svc_client, env, override_options)) |
| |
| #define AXIS2_SVC_CLIENT_GET_OVERRIDE_OPTIONS(svc_client) \ |
| ((svc_client)->ops->get_override_options(svc_client)) |
| |
| #define AXIS2_SVC_CLIENT_ENGAGE_MODULE(svc_client, env, module_name) \ |
| ((svc_client)->ops->engage_module(svc_client, env, module_name)) |
| |
| #define AXIS2_SVC_CLIENT_DISENGAGE_MODULE(svc_client, env, module_name) \ |
| ((svc_client)->ops->disengage_module(svc_client, env, module_name)) |
| |
| #define AXIS2_SVC_CLIENT_ADD_HEADER(svc_client, env, header) \ |
| ((svc_client)->ops->add_header(svc_client, env, header)) |
| |
| #define AXIS2_SVC_CLIENT_REMOVE_HEADERS(svc_client, env) \ |
| ((svc_client)->ops->remove_headers(svc_client, env)) |
| |
| #define AXIS2_SVC_CLIENT_ADD_HEADER_WITH_TEXT(svc_client, env, header_name, header_text) \ |
| ((svc_client)->ops->add_header_with_text(svc_client, env, header_name, header_text)) |
| |
| #define AXIS2_SVC_CLIENT_SEND_ROBUST(svc_client, env, payload) \ |
| ((svc_client)->ops->send_robust(svc_client, env, payload)) |
| |
| #define AXIS2_SVC_CLIENT_SEND_ROBUST_WITH_OP_QNAME(svc_client, env, op_qname, payload) \ |
| ((svc_client)->ops->send_robust_with_op_qname(svc_client, env, op_qname, payload)) |
| |
| #define AXIS2_SVC_CLIENT_FIRE_AND_FORGET(svc_client, env, payload) \ |
| ((svc_client)->ops->fire_and_forget(svc_client, env, payload)) |
| |
| #define AXIS2_SVC_CLIENT_FIRE_AND_FORGET_WITH_OP_QNAME(svc_client, env, op_qname, payload) \ |
| ((svc_client)->ops->fire_and_forget_with_op_qname(svc_client, env, op_qname, payload)) |
| |
| #define AXIS2_SVC_CLIENT_SEND_RECEIVE(svc_client, env, payload) \ |
| ((svc_client)->ops->send_receive(svc_client, env, payload)) |
| |
| #define AXIS2_SVC_CLIENT_SEND_RECEIVE_WITH_OP_QNAME(svc_client, env, op_qname, payload) \ |
| ((svc_client)->ops->send_receive_with_op_qname(svc_client, env, op_qname, payload)) |
| |
| #define AXIS2_SVC_CLIENT_SEND_RECEIVE_NON_BLOCKING(svc_client, env, payload, callback) \ |
| ((svc_client)->ops->send_receive_non_blocking(svc_client, env, payload, callback)) |
| |
| #define AXIS2_SVC_CLIENT_SEND_RECEIVE_NON_BLOCKING_WITH_OP_QNAME(svc_client, env, op_qname, payload, callback) \ |
| ((svc_client)->ops->send_receive_non_blocking_with_op_qname(svc_client, env, op_qname, payload, callback)) |
| |
| #define AXIS2_SVC_CLIENT_CREATE_OP_CLIENT(svc_client, env, op_qname) \ |
| ((svc_client)->ops->create_op_client(svc_client, env, op_qname)) |
| |
| #define AXIS2_SVC_CLIENT_FINALIZE_INVOKE(svc_client, env) \ |
| ((svc_client)->ops->finalize_invoke(svc_client, env)) |
| |
| #define AXIS2_SVC_CLIENT_GET_MY_EPR(svc_client, env, transport) \ |
| ((svc_client)->ops->get_my_epr(svc_client, env, transport)) |
| |
| #define AXIS2_SVC_CLIENT_GET_TARGET_EPR(svc_client, env) \ |
| ((svc_client)->ops->get_target_epr(svc_client, env)) |
| |
| #define AXIS2_SVC_CLIENT_SET_TARGET_EPR(svc_client, env, target_epr) \ |
| ((svc_client)->ops->set_target_epr(svc_client, env, target_epr)) |
| |
| #define AXIS2_SVC_CLIENT_GET_SERVICE_CONTEXT(svc_client, env) \ |
| ((svc_client)->ops->get_svc_ctx(svc_client, env)) |
| |
| |
| #define AXIS2_SVC_CLIENT_FREE(svc_client, env) \ |
| ((svc_client)->ops->free(svc_client, env)) |
| |
| /************************** End of function macros ****************************/ |
| |
| /** @} */ |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* AXIS2_SVC_CLIENT_H */ |