| /* |
| * 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_DISP_H |
| #define AXIS2_DISP_H |
| |
| /** |
| * @defgroup axis2_disp dispatcher |
| * @ingroup axis2_engine |
| * dispatcher is responsible for finding the service and operation for a given |
| * invocation. A Web service request would contain information that help |
| * locate the service and the operation serving the request. This information |
| * could be in various formats, and hence the mechanism to find the requested |
| * service and operation based on the available information could too vary. |
| * Hence there can be various types on dispatches involved in a dispatching |
| * phase of the engine, that implements the API given in this header. |
| * @{ |
| */ |
| |
| /** |
| * @file axis2_disp.h |
| */ |
| |
| #include <axis2_defines.h> |
| #include <axis2_qname.h> |
| #include <axis2_handler.h> |
| #include <axis2_svc.h> |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif |
| |
| /** Type name for struct axis2_disp */ |
| typedef struct axis2_disp axis2_disp_t; |
| /** Type name for struct axis2_disp_ops */ |
| typedef struct axis2_disp_ops axis2_disp_ops_t; |
| |
| /** |
| * dispatcher ops struct. |
| * Encapsulator struct for operations of axis2_dispatcher. |
| */ |
| struct axis2_disp_ops |
| { |
| /** |
| * Gets the base struct which is of type handler. |
| * @param disp pointer to dispatcher |
| * @param env pointer to environment struct |
| * @return pointer to base handler struct. Returns a reference, not a |
| * cloned copy |
| */ |
| axis2_handler_t *(AXIS2_CALL * |
| get_base)( |
| const axis2_disp_t *disp, |
| const axis2_env_t *env); |
| |
| /** |
| * Gets the qname of the dispatcher. |
| * @param disp pointer to dispatcher |
| * @param env pointer to environment struct |
| * @return pointer to qname. Returns a reference, not a |
| * cloned copy |
| */ |
| axis2_qname_t *(AXIS2_CALL * |
| get_qname)( |
| const axis2_disp_t *disp, |
| const axis2_env_t *env); |
| |
| /** |
| * Sets the qname of the dispatcher. |
| * @param disp pointer to dispatcher |
| * @param env pointer to environment struct |
| * @param qname pointer to qname, dispatcher assumes ownership of the |
| * qname struct |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| set_qname)( |
| axis2_disp_t *disp, |
| const axis2_env_t *env, |
| axis2_qname_t *qname); |
| |
| /** |
| * Frees dispatcher struct. |
| * @param disp pointer to dispatcher |
| * @param env pointer to environment struct |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL * |
| free)( |
| axis2_disp_t *disp, |
| const axis2_env_t *env); |
| /** |
| * Finds the service that corresponds to the given message context. |
| * The various dispatcher implementations that inherit from dispatcher |
| * struct should implement this find_svc method and assign the |
| * respective function pointers to point to this method. |
| * @param msg_ctx pointer to message context |
| * @param env pointer to environment struct |
| * @return pointer to service that should be servicing the request |
| */ |
| axis2_svc_t *(AXIS2_CALL * |
| find_svc)( |
| axis2_msg_ctx_t *msg_ctx, |
| const axis2_env_t *env); |
| /** |
| * Finds the operation that corresponds to the given message context |
| * and service. The various dispatcher implementations that inherit from |
| * dispatcher struct should implement this find_op method and assign the |
| * respective function pointers to point to this method. |
| * Finds the op |
| * @param msg_ctx pointer to message context |
| * @param env pointer to environment struct |
| * @param svc pointer to service, usually this is found through find_svc |
| * method |
| * @return pointer to operation that the request is targeted to |
| */ |
| axis2_op_t *(AXIS2_CALL * |
| find_op)( |
| axis2_msg_ctx_t *msg_ctx, |
| const axis2_env_t *env, |
| const axis2_svc_t *svc); |
| |
| }; |
| |
| /** |
| * dispatcher struct. |
| */ |
| struct axis2_disp |
| { |
| /** operations of dispatcher struct */ |
| axis2_disp_ops_t *ops; |
| }; |
| |
| |
| /** |
| * Creates a dispatcher struct instance. |
| * @param env pointer to environment struct |
| * @param qname pointer to QName. QName is cloned by create method. |
| * @return pointer to newly created dispatcher |
| */ |
| AXIS2_EXTERN axis2_disp_t *AXIS2_CALL |
| axis2_disp_create( |
| const axis2_env_t *env, |
| const axis2_qname_t *qname); |
| |
| /** |
| * Invokes the dispatcher. |
| * @param handler pointer to handler that is the base of the dispatcher |
| * to be invoked |
| * @param env pointer to environment struct |
| * @param msg_ctx pointer to message context |
| * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE |
| */ |
| axis2_status_t AXIS2_CALL |
| axis2_disp_invoke( |
| axis2_handler_t *handler, |
| const axis2_env_t *env, |
| axis2_msg_ctx_t *msg_ctx); |
| |
| /** |
| * Creates a WS-Addressing based dispatcher. |
| * @param env pointer to environment struct |
| * @return pointer to the newly created dispatcher with find_svc and find_op |
| * methods implemented based on WS-Addressing |
| */ |
| axis2_disp_t *AXIS2_CALL |
| axis2_addr_disp_create( |
| const axis2_env_t *env); |
| |
| /** |
| * Creates a request URI based dispatcher. |
| * @param env pointer to environment struct |
| * @return pointer to the newly created dispatcher with find_svc and find_op |
| * methods implemented based on request URI processing. |
| */ |
| axis2_disp_t *AXIS2_CALL |
| axis2_req_uri_disp_create( |
| const axis2_env_t *env); |
| |
| /** |
| * Creates a SOAP body based dispatcher. |
| * @param env pointer to environment struct |
| * @return pointer to the newly created dispatcher with find_svc and find_op |
| * methods implemented based on SOAP body processing. |
| */ |
| axis2_disp_t *AXIS2_CALL |
| axiom_soap_body_disp_create( |
| const axis2_env_t *env); |
| |
| /** |
| * Creates a SOAP action based dispatcher. |
| * @param env pointer to environment struct |
| * @return pointer to the newly created dispatcher with find_svc and find_op |
| * methods implemented based on SOAP action processing |
| */ |
| axis2_disp_t *AXIS2_CALL |
| axiom_soap_action_disp_create( |
| const axis2_env_t *env); |
| |
| |
| /** Gets the base handler. |
| @sa axis2_disp_ops#get_base */ |
| #define AXIS2_DISP_GET_BASE(disp, env) \ |
| ((disp)->ops->get_base(disp, env)) |
| |
| /** Gets QName. |
| @sa axis2_disp_ops#get_qname */ |
| #define AXIS2_DISP_GET_QNAME(disp, env) \ |
| ((disp)->ops->get_qname(disp, env)) |
| |
| /** Sets QName. |
| @sa axis2_disp_ops#set_qname */ |
| #define AXIS2_DISP_SET_QNAME(disp, env, name) \ |
| ((disp)->ops->set_qname(disp, env, name)) |
| |
| /** Frees dispatcher. |
| @sa axis2_disp_ops#free */ |
| #define AXIS2_DISP_FREE(disp, env) \ |
| ((disp)->ops->free(disp, env)) |
| |
| /** Finds service that should service the request. |
| @sa axis2_disp_ops#find_svc */ |
| #define AXIS2_DISP_FIND_SVC(msg_ctx, env) \ |
| ((msg_ctx)->ops->find_svc(msg_ctx, env)) |
| |
| /** Finds the operation in the give service that the request is targeted to. |
| @sa axis2_disp_ops#find_op */ |
| #define AXIS2_DISP_FIND_OP(msg_ctx, env, svc) \ |
| ((msg_ctx)->ops->find_op(msg_ctx, env, svc)) |
| |
| /** @} */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* AXIS2_DISP_H */ |