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 da...@apache.org on 2006/01/16 03:34:35 UTC

svn commit: r369315 - in /webservices/axis2/trunk/c/modules/core/receivers: Makefile.am msg_recv.c raw_xml_in_out_msg_recv.c

Author: damitha
Date: Sun Jan 15 18:34:29 2006
New Revision: 369315

URL: http://svn.apache.org/viewcvs?rev=369315&view=rev
Log:
Added raw_xml_in_out_msg_recv.c

Added:
    webservices/axis2/trunk/c/modules/core/receivers/raw_xml_in_out_msg_recv.c
Modified:
    webservices/axis2/trunk/c/modules/core/receivers/Makefile.am
    webservices/axis2/trunk/c/modules/core/receivers/msg_recv.c

Modified: webservices/axis2/trunk/c/modules/core/receivers/Makefile.am
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/receivers/Makefile.am?rev=369315&r1=369314&r2=369315&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/receivers/Makefile.am (original)
+++ webservices/axis2/trunk/c/modules/core/receivers/Makefile.am Sun Jan 15 18:34:29 2006
@@ -1,12 +1,15 @@
 lib_LTLIBRARIES = libaxis2_receivers.la
 AM_CPPFLAGS = $(CPPFLAGS)
 
-libaxis2_receivers_la_SOURCES = msg_recv.c
+libaxis2_receivers_la_SOURCES = msg_recv.c \
+                                raw_xml_in_out_msg_recv.c
 
 libaxis2_receivers_la_LIBADD = 
 INCLUDES = -I$(top_builddir)/include \
             -I$(top_builddir)/modules/util \
-            -I$(top_builddir)/modules/core/description \
             -I$(top_builddir)/modules/wsdl \
+            -I$(top_builddir)/modules/core/context \
             -I$(top_builddir)/modules/core/transport \
+            -I$(top_builddir)/modules/core/description \
+            -I$(top_builddir)/modules/xml/parser \
             -I$(top_builddir)/modules/platforms

Modified: webservices/axis2/trunk/c/modules/core/receivers/msg_recv.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/receivers/msg_recv.c?rev=369315&r1=369314&r2=369315&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/receivers/msg_recv.c (original)
+++ webservices/axis2/trunk/c/modules/core/receivers/msg_recv.c Sun Jan 15 18:34:29 2006
@@ -7,6 +7,8 @@
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
+ *      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.
@@ -15,6 +17,11 @@
  */
  
 #include <axis2_msg_recv.h>
+#include <axis2_param.h>
+#include <axis2_description.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include <axis2_class_loader.h>
 
 /** 
@@ -33,32 +40,20 @@
 
 axis2_status_t AXIS2_CALL
 axis2_msg_recv_free (axis2_msg_recv_t *msg_recv,
-                            axis2_env_t **env);
+                        axis2_env_t **env);
 
 axis2_status_t AXIS2_CALL
 axis2_msg_recv_receive (axis2_msg_recv_t *msg_recv,
-                                axis2_env_t **env,
-		                        struct axis2_msg_ctx *msg_ctx);
-                                
-/**
- * Method makeNewServiceObject
- *
- * @param msgContext
- * @return
- */
+                        axis2_env_t **env,
+                        struct axis2_msg_ctx *in_msg_ctx);
+
 axis2_svc_skeleton_t * AXIS2_CALL
-axis2_msg_recv_make_new_svc_obj(void *msg_recv,
+axis2_msg_recv_make_new_svc_obj(axis2_msg_recv_t *msg_recv,
                                     axis2_env_t **env,
                                     struct axis2_msg_ctx *msg_ctx);
 
-/**
- * Method getTheImplementationObject
- *
- * @param msgContext
- * @return
- */
 axis2_svc_skeleton_t * AXIS2_CALL
-axis2_msg_recv_get_impl_obj(void *msg_recv,
+axis2_msg_recv_get_impl_obj(axis2_msg_recv_t *msg_recv,
                             axis2_env_t **env,
                             struct axis2_msg_ctx *msg_ctx); 
 
@@ -66,7 +61,7 @@
 axis2_msg_recv_set_scope(axis2_msg_recv_t *msg_recv,
                             axis2_env_t **env,
                             axis2_char_t *scope);
-
+                                   
 axis2_char_t * AXIS2_CALL
 axis2_msg_recv_get_scope(axis2_msg_recv_t *msg_recv,
                             axis2_env_t **env);                            
@@ -80,8 +75,7 @@
     
     AXIS2_ENV_CHECK(env, NULL);
     
-	msg_recv_impl = (axis2_msg_recv_impl_t *) AXIS2_MALLOC ((*env)->allocator
-		    , sizeof (axis2_msg_recv_impl_t));
+	msg_recv_impl = (axis2_msg_recv_impl_t *) malloc (sizeof (axis2_msg_recv_impl_t));
     
 	if(NULL == msg_recv_impl)
     {
@@ -89,16 +83,17 @@
         return NULL;
     }
     
-    msg_recv_impl->scope = NULL;
+    /*msg_recv_impl->scope = AXIS2_STRDUP(AXIS2_APPLICATION_SCOPE, env);*/
+    msg_recv_impl->scope = AXIS2_STRDUP("app*", env);;
     msg_recv_impl->msg_recv.ops = NULL;
     
-    msg_recv_impl->msg_recv.ops = (axis2_msg_recv_ops_t *) AXIS2_MALLOC(
-        (*env)->allocator, sizeof(axis2_msg_recv_ops_t));
+    msg_recv_impl->msg_recv.ops = (axis2_msg_recv_ops_t *) malloc(sizeof(axis2_msg_recv_ops_t));
     
 	if(NULL == msg_recv_impl->msg_recv.ops)
 	{
-        axis2_msg_recv_free(&(msg_recv_impl->msg_recv), env);
         AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        axis2_msg_recv_free(&(msg_recv_impl->msg_recv), env);
+        
         return NULL;
 	}
     
@@ -127,38 +122,33 @@
         AXIS2_FREE((*env)->allocator, recv_impl->scope);
         recv_impl->scope = NULL;
     }
-    
+
     if(NULL != msg_recv->ops)
     {
-		AXIS2_FREE((*env)->allocator, msg_recv->ops);
+        AXIS2_FREE((*env)->allocator, msg_recv->ops);
         msg_recv->ops = NULL;
     }
-    
+
     if(recv_impl)
     {
         AXIS2_FREE((*env)->allocator, recv_impl);
         recv_impl = NULL;
     }
-    
+
 	return AXIS2_SUCCESS;
 }
 
 axis2_status_t AXIS2_CALL
 axis2_msg_recv_receive (axis2_msg_recv_t *msg_recv,
-                    axis2_env_t **env,
-		            struct axis2_msg_ctx *msg_ctx)
+                        axis2_env_t **env,
+                        struct axis2_msg_ctx *in_msg_ctx)
 {
 	return AXIS2_SUCCESS;
 }
 
-/**
- * Method makeNewServiceObject
- *
- * @param msgContext
- * @return
- */
+
 axis2_svc_skeleton_t * AXIS2_CALL
-axis2_msg_recv_make_new_svc_obj(void *msg_recv,
+axis2_msg_recv_make_new_svc_obj(axis2_msg_recv_t *msg_recv,
                                     axis2_env_t **env,
                                     struct axis2_msg_ctx *msg_ctx)
 {
@@ -167,10 +157,10 @@
     struct axis2_svc_ctx *svc_ctx = NULL;
     axis2_param_t *impl_info_param = NULL;
     void *impl_class = NULL;
-    
+
     AXIS2_FUNC_PARAM_CHECK(msg_recv, env, NULL);
     AXIS2_PARAM_CHECK((*env)->error, msg_ctx, NULL);
-    
+
     op_ctx = AXIS2_MSG_CTX_GET_OP_CTX(msg_ctx, env);
     svc_ctx = AXIS2_OP_CTX_GET_PARENT(op_ctx, env);
     svc = AXIS2_SVC_CTX_GET_SVC(svc_ctx, env);
@@ -178,30 +168,25 @@
     {
         return NULL;
     }
-    
+
     impl_info_param = AXIS2_SVC_GET_PARAM(svc, env, AXIS2_SERVICE_CLASS);
     if(!impl_info_param)
     {
-        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_INVALID_STATE_SVC, 
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_INVALID_STATE_SVC,
             AXIS2_FAILURE);
         return NULL;
     }
-    
+
     axis2_class_loader_init(env);
-    
+
     impl_class = axis2_class_loader_create_dll(env, impl_info_param);
-    
+
     return impl_class;
 }
 
-/**
- * Method getTheImplementationObject
- *
- * @param msgContext
- * @return
- */
+
 axis2_svc_skeleton_t * AXIS2_CALL
-axis2_msg_recv_get_impl_obj(void *msg_recv,
+axis2_msg_recv_get_impl_obj(axis2_msg_recv_t *msg_recv,
                             axis2_env_t **env,
                             struct axis2_msg_ctx *msg_ctx)
 {
@@ -302,6 +287,5 @@
 axis2_msg_recv_get_scope(axis2_msg_recv_t *msg_recv,
                             axis2_env_t **env)
 {
-    AXIS2_FUNC_PARAM_CHECK(msg_recv, env, NULL);
     return AXIS2_INTF_TO_IMPL(msg_recv)->scope;
 }

Added: webservices/axis2/trunk/c/modules/core/receivers/raw_xml_in_out_msg_recv.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/receivers/raw_xml_in_out_msg_recv.c?rev=369315&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/core/receivers/raw_xml_in_out_msg_recv.c (added)
+++ webservices/axis2/trunk/c/modules/core/receivers/raw_xml_in_out_msg_recv.c Sun Jan 15 18:34:29 2006
@@ -0,0 +1,305 @@
+/*
+ * 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_raw_xml_in_out_msg_recv.h>
+#include <string.h>
+#include <axis2_om_element.h>
+#include <axis2_soap_envelope.h>
+#include <axis2_soap_body.h>
+#include <axis2_core_utils.h>
+#include <axis2_engine.h>
+
+/************************* Function prototypes ********************************/
+
+axis2_status_t AXIS2_CALL
+axis2_raw_xml_in_out_msg_recv_invoke_business_logic(axis2_msg_recv_t *msg_recv,
+                                                    axis2_env_t **env,
+                                                    axis2_msg_ctx_t *msg_ctx,
+                                                    axis2_msg_ctx_t *new_msg_ctx);
+
+axis2_status_t AXIS2_CALL
+axis2_raw_xml_in_out_msg_recv_receive(axis2_msg_recv_t *msg_recv,
+                                    axis2_env_t **env,
+                                    axis2_msg_ctx_t *msg_ctx);
+                                
+/************************** End of function prototypes ************************/
+
+axis2_msg_recv_t *AXIS2_CALL 
+axis2_raw_xml_in_out_msg_recv_create(axis2_env_t **env)
+{
+    axis2_msg_recv_t *msg_recv = NULL;
+    axis2_status_t status = AXIS2_FAILURE;
+    
+	AXIS2_ENV_CHECK(env, NULL);
+	msg_recv = axis2_msg_recv_create(env);
+	if(NULL == msg_recv)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); 
+        return NULL;
+    }
+    status = AXIS2_MSG_RECV_SET_SCOPE(msg_recv, env, AXIS2_APPLICATION_SCOPE);
+    if(AXIS2_TRUE != status)
+    {
+        AXIS2_MSG_RECV_FREE(msg_recv, env);
+        return NULL;
+    }
+    msg_recv->ops->invoke_in_out_business_logic = 
+        axis2_raw_xml_in_out_msg_recv_invoke_business_logic;
+    msg_recv->ops->receive = axis2_raw_xml_in_out_msg_recv_receive;
+	return msg_recv;
+}
+
+/***************************Function implementation****************************/
+
+axis2_status_t AXIS2_CALL
+axis2_raw_xml_in_out_msg_recv_invoke_business_logic(axis2_msg_recv_t *msg_recv,
+                                                    axis2_env_t **env,
+                                                    axis2_msg_ctx_t *msg_ctx,
+                                                    axis2_msg_ctx_t *new_msg_ctx)
+{
+    axis2_svc_skeleton_t *svc_obj = NULL;
+    axis2_op_ctx_t *op_ctx = NULL;
+    axis2_op_t *op_desc = NULL;
+    axis2_char_t *style = NULL;
+    axis2_om_node_t *om_node = NULL;
+    axis2_om_element_t *om_element = NULL;
+    axis2_char_t *local_name = NULL;
+    axis2_om_node_t *result_node = NULL;
+    axis2_om_node_t *body_content_node = NULL;
+    axis2_om_element_t *body_content_element = NULL;
+    axis2_soap_envelope_t *default_envelope = NULL;
+    axis2_soap_body_t *out_body = NULL;
+    axis2_om_node_t *out_node = NULL;
+    
+    /* get the implementation class for the Web Service */
+    svc_obj = AXIS2_MSG_RECV_GET_IMPL_OBJ(msg_recv, env, msg_ctx);
+    op_ctx = AXIS2_MSG_CTX_GET_OP_CTX(msg_ctx, env);
+    op_desc = AXIS2_OP_CTX_GET_OP(op_ctx, env);
+    
+    svc_obj = AXIS2_MSG_RECV_GET_IMPL_OBJ(msg_recv, env, msg_ctx);
+    /* find the WebService method */
+    /*Object obj = getTheImplementationObject(msgContext);
+
+    // find the WebService method
+    Class ImplClass = obj.getClass();
+
+    //Inject the Message Context if it is asked for
+    DependencyManager.configureBusinessLogicProvider(obj, msgContext, newmsgContext);
+
+    AxisOperation opDesc = msgContext.getOperationContext()
+            .getAxisOperation();
+    Method method = findOperation(opDesc, ImplClass);
+    if (method != null) {
+        String style = msgContext.getOperationContext()
+                .getAxisOperation()
+                .getStyle();
+
+        Class[] parameters = method.getParameterTypes();
+        Object[] args = null;
+
+        if (parameters == null || parameters.length == 0) {
+            args = new Object[0];
+        } else if (parameters.length == 1) 
+        {
+        */
+    
+    style = AXIS2_OP_GET_STYLE(op_desc, env);
+    if(0 == AXIS2_STRCMP(AXIS2_STYLE_DOC, style))
+    {
+        axis2_soap_envelope_t *envelope = NULL;
+        axis2_soap_body_t *body = NULL;
+        
+        envelope = AXIS2_MSG_CTX_GET_SOAP_ENVELOPE(msg_ctx, env);
+        body = AXIS2_SOAP_ENVELOPE_GET_BODY(envelope, env);
+        om_node = AXIS2_SOAP_BODY_GET_BASE_NODE(body, env);
+        om_element = AXIS2_OM_NODE_GET_DATA_ELEMENT(om_node, env);
+        
+    }
+    else if(0 == AXIS2_STRCMP(AXIS2_STYLE_RPC, style))
+    {
+        axis2_soap_envelope_t *envelope = NULL;
+        axis2_soap_body_t *body = NULL;
+        axis2_om_node_t *op_node = NULL;
+        axis2_om_element_t *op_element = NULL;
+        
+        envelope = AXIS2_MSG_CTX_GET_SOAP_ENVELOPE(msg_ctx, env);
+        body = AXIS2_SOAP_ENVELOPE_GET_BODY(envelope, env);
+        op_node = AXIS2_SOAP_BODY_GET_BASE_NODE(body, env);
+        op_element = AXIS2_OM_NODE_GET_DATA_ELEMENT(op_node, env);
+        if(NULL != op_element)
+        {
+            local_name = AXIS2_OM_ELEMENT_GET_LOCALNAME(op_element, env);
+            if(NULL != local_name)
+            {
+                axis2_array_list_t *function_arr = NULL;
+                int i = 0;
+                int size = 0;
+                axis2_bool_t matches = AXIS2_FALSE;
+                
+                function_arr = svc_obj->func_array;
+                size = AXIS2_ARRAY_LIST_SIZE(function_arr, env);
+                if(AXIS2_TRUE != AXIS2_ERROR_GET_STATUS_CODE((*env)->error))
+                {
+                    return AXIS2_FAILURE;
+                }
+                
+                for (i = 0; i < size; i++) 
+                {
+                    axis2_char_t *function_name = NULL;
+                    
+                    function_name = (axis2_char_t *) AXIS2_ARRAY_LIST_GET(
+                        function_arr, env, i);
+                    if(0 == AXIS2_STRCMP(function_name, local_name))
+                    {
+                        matches = AXIS2_TRUE;
+                        
+                    }
+                }
+                if(AXIS2_TRUE == matches)
+                {
+                    om_node = AXIS2_OM_NODE_GET_FIRST_CHILD(op_node, env);
+                    om_element = AXIS2_OM_NODE_GET_DATA_ELEMENT(om_node, env);   
+                }
+                else
+                {
+                    AXIS2_ERROR_SET((*env)->error, 
+                        AXIS2_ERROR_OM_ELEMENT_MISMATCH, AXIS2_FAILURE);
+                    return AXIS2_FAILURE;
+                }
+            }
+            else
+            {
+                AXIS2_ERROR_SET((*env)->error, 
+                    AXIS2_ERROR_OM_ELEMENT_INVALID_STATE, AXIS2_FAILURE);
+                return AXIS2_FAILURE;
+            }
+        }
+        else
+        {
+            AXIS2_ERROR_SET((*env)->error, 
+                    AXIS2_ERROR_RPC_NEED_MATCHING_CHILD, AXIS2_FAILURE);
+            return AXIS2_FAILURE;
+        }
+    }
+    else
+    {
+        AXIS2_ERROR_SET((*env)->error, 
+                AXIS2_ERROR_UNKNOWN_STYLE, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    result_node = AXIS2_SVC_SKELETON_INVOKE(svc_obj, env, om_node);
+    if(0 == AXIS2_STRCMP(style, AXIS2_STYLE_RPC))
+    {
+        axis2_om_namespace_t *ns = NULL;
+        axis2_char_t *res_name = NULL;
+        
+        default_envelope = axis2_soap_envelope_create_null(env);
+        out_body = AXIS2_SOAP_ENVELOPE_GET_BODY(default_envelope, env);
+        if(!default_envelope)
+        {
+            return AXIS2_FAILURE;
+        }
+        res_name = AXIS2_STRACAT(local_name, "Response", env);
+        ns = axis2_om_namespace_create(env, "http://soapenc/", "res");
+        if(!ns)
+        {
+            return AXIS2_FAILURE;
+        }
+        out_node = AXIS2_SOAP_BODY_GET_BASE_NODE(out_body, env);
+        body_content_element = axis2_om_element_create(env, out_node, res_name, 
+            ns, &body_content_node);
+        
+        AXIS2_OM_NODE_ADD_CHILD(body_content_node, env, result_node);
+        
+    }
+    else
+    {
+        body_content_node = result_node;
+    }
+    return AXIS2_MSG_CTX_SET_SOAP_ENVELOPE(new_msg_ctx, env, default_envelope);
+}
+
+axis2_status_t AXIS2_CALL
+axis2_raw_xml_in_out_msg_recv_receive(axis2_msg_recv_t *msg_recv,
+                                    axis2_env_t **env,
+                                    axis2_msg_ctx_t *msg_ctx)
+{
+    axis2_msg_ctx_t *out_msg_ctx = NULL;
+    axis2_engine_t *engine = NULL;
+    axis2_conf_ctx_t *conf_ctx = NULL;
+    axis2_op_ctx_t *op_ctx = NULL;
+    axis2_svc_ctx_t *svc_ctx = NULL;
+    
+    AXIS2_FUNC_PARAM_CHECK(msg_recv, env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, msg_ctx, AXIS2_FAILURE);
+    
+    out_msg_ctx = axis2_core_utils_create_out_msg_ctx(env, msg_ctx);
+    axis2_raw_xml_in_out_msg_recv_invoke_business_logic(msg_recv, env, msg_ctx,
+        out_msg_ctx);
+    op_ctx = AXIS2_MSG_CTX_GET_OP_CTX(msg_ctx, env);
+    svc_ctx = AXIS2_OP_CTX_GET_PARENT(op_ctx, env);
+    conf_ctx = AXIS2_SVC_CTX_GET_CONF_CTX(svc_ctx, env);
+    engine = axis2_engine_create(env, conf_ctx);
+    if(!engine)
+    {
+        return AXIS2_FAILURE;
+    }        
+    return AXIS2_ENGINE_SEND(engine, env, out_msg_ctx);
+    
+}
+
+/*
+public Method findOperation(AxisOperation op, Class ImplClass) {
+    Method method = null;
+    String methodName = op.getName().getLocalPart();
+    Method[] methods = ImplClass.getMethods();
+    for (int i = 0; i < methods.length; i++) {
+        if (methods[i].getName().equals(methodName)) {
+            method = methods[i];
+            break;
+        }
+    }
+    return method;
+}
+*/
+
+/**
+ * Following block distinguish the exposed part of the dll.
+ */
+
+
+int axis2_get_instance(struct axis2_msg_recv **inst,
+                        axis2_env_t **env)
+{
+    *inst = axis2_raw_xml_in_out_msg_recv_create(env);
+    if(!(*inst))
+    {
+        return AXIS2_FAILURE;
+    }
+
+    return AXIS2_SUCCESS;
+}
+
+int axis2_remove_instance(axis2_svc_skeleton_t *inst,
+                            axis2_env_t **env)
+{
+    axis2_status_t status = AXIS2_FAILURE;
+    if (inst)
+    {
+        status = AXIS2_MSG_RECV_FREE(inst, env);
+    }
+    return status;
+}