You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2005/12/12 03:22:45 UTC
svn commit: r356109 - in /webservices/axis2/trunk/c/modules/core/engine/src:
Makefile.am addr_disp.c req_uri_disp.c
Author: samisa
Date: Sun Dec 11 18:22:36 2005
New Revision: 356109
URL: http://svn.apache.org/viewcvs?rev=356109&view=rev
Log:
Initial compiling version of request URI based dispatcher and few bug fixes to addressing dispatcher.
Added:
webservices/axis2/trunk/c/modules/core/engine/src/req_uri_disp.c
Modified:
webservices/axis2/trunk/c/modules/core/engine/src/Makefile.am
webservices/axis2/trunk/c/modules/core/engine/src/addr_disp.c
Modified: webservices/axis2/trunk/c/modules/core/engine/src/Makefile.am
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/engine/src/Makefile.am?rev=356109&r1=356108&r2=356109&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/engine/src/Makefile.am (original)
+++ webservices/axis2/trunk/c/modules/core/engine/src/Makefile.am Sun Dec 11 18:22:36 2005
@@ -1,6 +1,6 @@
lib_LTLIBRARIES = libaxis2_engine.la
AM_CPPFLAGS = $(CPPFLAGS)
-libaxis2_engine_la_SOURCES = handler.c msg_recv.c engine_config.c phase.c disp_checker.c event.c addr_disp.c
+libaxis2_engine_la_SOURCES = handler.c msg_recv.c engine_config.c phase.c disp_checker.c event.c addr_disp.c req_uri_disp.c
libaxis2_engine_la_LIBADD = $(LDFLAGS)
INCLUDES = -I${CUTEST_HOME}/include \
Modified: webservices/axis2/trunk/c/modules/core/engine/src/addr_disp.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/engine/src/addr_disp.c?rev=356109&r1=356108&r2=356109&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/engine/src/addr_disp.c (original)
+++ webservices/axis2/trunk/c/modules/core/engine/src/addr_disp.c Sun Dec 11 18:22:36 2005
@@ -81,7 +81,7 @@
* @param messageContext
* @return
*/
-axis2_svc_t* AXIS2_CALL axis2_disp_find_svc(axis2_msg_ctx_t *msg_ctx,
+axis2_svc_t* AXIS2_CALL axis2_addr_disp_find_svc(axis2_msg_ctx_t *msg_ctx,
axis2_env_t **env)
{
axis2_endpoint_ref_t *endpoint_ref = NULL;
Added: webservices/axis2/trunk/c/modules/core/engine/src/req_uri_disp.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/engine/src/req_uri_disp.c?rev=356109&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/core/engine/src/req_uri_disp.c (added)
+++ webservices/axis2/trunk/c/modules/core/engine/src/req_uri_disp.c Sun Dec 11 18:22:36 2005
@@ -0,0 +1,186 @@
+/*
+ * 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.
+ */
+
+#include <axis2_disp.h>
+#include <axis2_handler_desc.h>
+#include <axis2_qname.h>
+#include <axis2_relates_to.h>
+#include <axis2_svc.h>
+#include <axis2.h>
+#include <axis2_conf_ctx.h>
+#include <axis2_addr.h>
+#include <axis2_utils.h>
+
+axis2_status_t AXIS2_CALL axis2_req_uri_disp_invoke (struct axis2_handler * handler,
+ axis2_env_t **env,
+ struct axis2_msg_ctx *msg_ctx);
+axis2_svc_t* AXIS2_CALL axis2_req_uri_disp_find_svc(axis2_msg_ctx_t *msg_ctx,
+ axis2_env_t **env);
+axis2_operation_t* AXIS2_CALL axis2_req_uri_disp_find_operation(axis2_msg_ctx_t *msg_ctx,
+ axis2_env_t **env,
+ axis2_svc_t *svc);
+
+
+axis2_disp_t* AXIS2_CALL axis2_req_uri_disp_create(axis2_env_t **env)
+{
+ axis2_disp_t *disp = NULL;
+ axis2_handler_t *handler = NULL;
+ axis2_qname_t *qname = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+
+ qname = axis2_qname_create(env, "request_uri_based_dispatcher",
+ "http://axis.ws.apache.org",
+ NULL);
+
+ disp = axis2_disp_create(env, qname);
+ if (!disp)
+ {
+ AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
+ }
+
+ handler = AXIS2_DISP_GET_BASE(disp, env);
+ if (!handler)
+ {
+ AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE);
+ return NULL;
+ }
+
+ handler->ops->invoke = axis2_req_uri_disp_invoke;
+
+ AXIS2_QNAME_FREE(qname, env);
+
+ return disp;
+}
+
+
+/** The struct that inherits from this struct
+ should implement the find_service and find_operation methods and assing the
+ respective function pointers in the base struct.
+ Here we have only the dummy implementation to gauard against erros due to
+ the failure to provide an impl version by mistake.
+ */
+
+/**
+ * finds the service
+ *
+ * @param messageContext
+ * @return
+ */
+axis2_svc_t* AXIS2_CALL axis2_req_uri_disp_find_svc(axis2_msg_ctx_t *msg_ctx,
+ axis2_env_t **env)
+{
+ axis2_endpoint_ref_t *endpoint_ref = NULL;
+
+ AXIS2_FUNC_PARAM_CHECK(msg_ctx, env, NULL);
+
+ endpoint_ref = AXIS2_MSG_CTX_GET_TO(msg_ctx, env);
+
+ if (endpoint_ref)
+ {
+ axis2_char_t *address = NULL;
+
+ address = AXIS2_ENDPOINT_REF_GET_ADDRESS(endpoint_ref, env);
+ if (address)
+ {
+ axis2_char_t **url_tokens = NULL;
+
+ AXIS2_LOG(env, "Checking for Service using target endpoint address :");
+ AXIS2_LOG(env, address);
+
+ url_tokens = axis2_parse_request_url_for_svc_and_operation(env, address);
+
+ if (url_tokens)
+ {
+ if (url_tokens[0])
+ {
+ axis2_conf_ctx_t *conf_ctx = NULL;
+
+ conf_ctx = AXIS2_MSG_CTX_GET_CONF_CTX(msg_ctx, env);
+ if (conf_ctx)
+ {
+ axis2_engine_config_t *engine_config = NULL;
+ engine_config = AXIS2_CONF_CTX_GET_ENGINE_CONFIG(conf_ctx, env);
+ if (engine_config)
+ {
+ axis2_svc_t *svc = NULL;
+ svc = AXIS2_ENGINE_CONFIG_GET_SVC(engine_config, env, url_tokens[0]);
+ return svc;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * finds the operation
+ *
+ * @param service
+ * @param msg_ctx
+ * @return
+ */
+axis2_operation_t* AXIS2_CALL axis2_req_uri_disp_find_operation(axis2_msg_ctx_t *msg_ctx,
+ axis2_env_t **env,
+ axis2_svc_t *svc)
+{
+ axis2_endpoint_ref_t *endpoint_ref = NULL;
+
+ AXIS2_FUNC_PARAM_CHECK(msg_ctx, env, NULL);
+
+ endpoint_ref = AXIS2_MSG_CTX_GET_TO(msg_ctx, env);
+
+ if (endpoint_ref)
+ {
+ axis2_char_t *address = NULL;
+
+ address = AXIS2_ENDPOINT_REF_GET_ADDRESS(endpoint_ref, env);
+ if (address)
+ {
+ axis2_char_t **url_tokens = NULL;
+
+ url_tokens = axis2_parse_request_url_for_svc_and_operation(env, address);
+
+ if (url_tokens)
+ {
+ if (url_tokens[1])
+ {
+ AXIS2_LOG(env, "Checking for Operation using target endpoint uri fragment : ");
+ AXIS2_LOG(env, url_tokens[1]);
+ axis2_qname_t *operation_qname = axis2_qname_create(env, url_tokens[1], NULL, NULL);
+ return AXIS2_SVC_GET_OPERATION_WITH_QNAME(svc, env, operation_qname);
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+axis2_status_t AXIS2_CALL axis2_req_uri_disp_invoke(struct axis2_handler * handler,
+ axis2_env_t **env,
+ struct axis2_msg_ctx *msg_ctx)
+{
+ AXIS2_FUNC_PARAM_CHECK(msg_ctx, env, AXIS2_FAILURE);
+
+ msg_ctx->ops->find_svc = axis2_req_uri_disp_find_svc;
+ msg_ctx->ops->find_operation = axis2_req_uri_disp_find_operation;
+
+ return axis2_disp_invoke(handler, env, msg_ctx);
+}