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 2006/01/28 12:02:55 UTC

svn commit: r373135 - /webservices/axis2/trunk/c/modules/core/engine/soap_body_disp.c

Author: samisa
Date: Sat Jan 28 03:02:50 2006
New Revision: 373135

URL: http://svn.apache.org/viewcvs?rev=373135&view=rev
Log:
Added the SOAP body processing to get this working. Initial tests are successful.

Modified:
    webservices/axis2/trunk/c/modules/core/engine/soap_body_disp.c

Modified: webservices/axis2/trunk/c/modules/core/engine/soap_body_disp.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/engine/soap_body_disp.c?rev=373135&r1=373134&r2=373135&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/engine/soap_body_disp.c (original)
+++ webservices/axis2/trunk/c/modules/core/engine/soap_body_disp.c Sat Jan 28 03:02:50 2006
@@ -17,12 +17,12 @@
 #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>
+#include <axis2_soap_envelope.h>
+#include <axis2_soap_body.h>
 
 axis2_status_t AXIS2_CALL axis2_soap_body_disp_invoke (struct axis2_handler * handler, 
                                                 axis2_env_t **env,
@@ -84,30 +84,70 @@
 axis2_svc_t* AXIS2_CALL axis2_soap_body_disp_find_svc(axis2_msg_ctx_t *msg_ctx, 
                     axis2_env_t **env) 
 {    
-    AXIS2_FUNC_PARAM_CHECK(msg_ctx, env, NULL);    
-/*
-    OMElement bodyFirstChild = messageContext.getEnvelope().getBody().getFirstElement();
-
-        if (bodyFirstChild != null) {
-            OMNamespace ns = bodyFirstChild.getNamespace();
-            if (ns != null) {
-                String filePart = ns.getName();
-                log.debug("Checking for Service using SOAP message body's first child's namespace : " + filePart);
-
-                String[] values = Utils.parseRequestURLForServiceAndOperation(
-                        filePart);
-                if (values[1] != null) {
-                    opName = new QName(values[1]);
-                }
-                if (values[0] != null) {
-                    serviceName = values[0];
-                    AxisConfiguration registry =
-                            messageContext.getConfigurationContext().getAxisConfiguration();
-                    return registry.getService(serviceName);
+    axis2_soap_envelope_t *soap_envelope = NULL;
+    
+    AXIS2_FUNC_PARAM_CHECK(msg_ctx, env, NULL); 
+    soap_envelope = AXIS2_MSG_CTX_GET_SOAP_ENVELOPE(msg_ctx, env);
+    if (soap_envelope)
+    {
+        axis2_soap_body_t *soap_body = AXIS2_SOAP_ENVELOPE_GET_BODY(soap_envelope, env);
+        if (soap_body)
+        {
+            axis2_om_node_t *body_node = AXIS2_SOAP_BODY_GET_BASE_NODE(soap_body, env);
+            if (body_node)
+            {
+                axis2_om_node_t *body_first_child_node = 
+                    AXIS2_OM_NODE_GET_FIRST_CHILD(body_node, env);
+                if (body_first_child_node)
+                {                    
+                    if (AXIS2_OM_NODE_GET_NODE_TYPE(body_first_child_node, env) == AXIS2_OM_ELEMENT)
+                    {
+                        axis2_om_element_t *element = NULL;                        
+                        element = (axis2_om_element_t *)AXIS2_OM_NODE_GET_DATA_ELEMENT(body_first_child_node, env);
+                        if (element)
+                        {
+                            axis2_om_namespace_t *ns = AXIS2_OM_ELEMENT_GET_NAMESPACE(element, env);
+                            if (ns)
+                            {
+                                axis2_char_t *uri = AXIS2_OM_NAMESPACE_GET_URI(ns, env);
+                                if (uri)
+                                {
+                                    axis2_char_t **url_tokens = NULL;
+                                    axis2_char_t message[1024];
+                                    sprintf(message, "Checking for Service using target endpoint address : %s", uri);
+                                    AXIS2_LOG(env, message, AXIS2_LOG_INFO);
+                                    
+                                    url_tokens = axis2_parse_request_url_for_svc_and_op(env, uri);
+                                    
+                                    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_conf_t *conf = NULL;
+                                                conf = AXIS2_CONF_CTX_GET_CONF(conf_ctx, env);
+                                                if (conf)
+                                                {
+                                                    axis2_svc_t *svc = NULL;
+                                                    svc = AXIS2_CONF_GET_SVC(conf, env, url_tokens[0]);
+                                                    return svc;
+                                                }
+                                            }                    
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
                 }
             }
         }
-*/        
+    }
+    
     return NULL;
 }
 
@@ -122,21 +162,49 @@
                                 axis2_env_t **env,
                                 axis2_svc_t *svc)
 {
-        
+    axis2_soap_envelope_t *soap_envelope = NULL;
+    
     AXIS2_FUNC_PARAM_CHECK(msg_ctx, env, NULL); 
     AXIS2_PARAM_CHECK((*env)->error, svc, NULL);
-/*
-    OMElement bodyFirstChild = messageContext.getEnvelope().getBody()
-                .getFirstElement();
-        if (bodyFirstChild == null) {
-            return null;
-        } else {
-            log.debug("Checking for Operation using SOAP message body's first child's local name : " + bodyFirstChild.getLocalName());
-            opName = new QName(bodyFirstChild.getLocalName());
-        }
 
-        return service.getOperation(opName);
-*/    
+    soap_envelope = AXIS2_MSG_CTX_GET_SOAP_ENVELOPE(msg_ctx, env);
+    if (soap_envelope)
+    {
+        axis2_soap_body_t *soap_body = AXIS2_SOAP_ENVELOPE_GET_BODY(soap_envelope, env);
+        if (soap_body)
+        {
+            axis2_om_node_t *body_node = AXIS2_SOAP_BODY_GET_BASE_NODE(soap_body, env);
+            if (body_node)
+            {
+                axis2_om_node_t *body_first_child_node = 
+                    AXIS2_OM_NODE_GET_FIRST_CHILD(body_node, env);
+                if (body_first_child_node)
+                {                    
+                    if (AXIS2_OM_NODE_GET_NODE_TYPE(body_first_child_node, env) == AXIS2_OM_ELEMENT)
+                    {
+                        axis2_om_element_t *element = NULL;                        
+                        element = (axis2_om_element_t *)AXIS2_OM_NODE_GET_DATA_ELEMENT(body_first_child_node, env);
+                        if (element)
+                        {
+                            axis2_char_t *element_name = AXIS2_OM_ELEMENT_GET_LOCALNAME(element, env);
+                            if (element_name)
+                            {
+                                axis2_qname_t *op_qname = NULL;
+                                axis2_op_t *op = NULL;
+                                axis2_char_t message[1024];
+                                sprintf(message, "Checking for operation using SOAP message body's first child's local name : %s", element_name);
+                                AXIS2_LOG(env, message, AXIS2_LOG_INFO);
+                                op_qname = axis2_qname_create(env, element_name, NULL, NULL);
+                                op = AXIS2_SVC_GET_OP_WITH_NAME(svc, env, AXIS2_QNAME_GET_LOCALPART(op_qname, env));
+                                AXIS2_QNAME_FREE(op_qname, env);
+                                return op;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
     return NULL;
 }