You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2006/04/30 12:13:04 UTC

svn commit: r398304 - in /webservices/axis2/trunk/java/modules: addressing/src/org/apache/axis2/handlers/addressing/ core/src/org/apache/axis2/context/ core/src/org/apache/axis2/engine/

Author: dims
Date: Sun Apr 30 03:12:59 2006
New Revision: 398304

URL: http://svn.apache.org/viewcvs?rev=398304&view=rev
Log:
try not to create the whole om tree looking for the soap:Header

Modified:
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/context/MessageContext.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/InstanceDispatcher.java

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java?rev=398304&r1=398303&r2=398304&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java Sun Apr 30 03:12:59 2006
@@ -45,13 +45,16 @@
 
     public void invoke(MessageContext msgContext) throws AxisFault {
         String namespace = addressingNamespace;
-        SOAPHeader header = msgContext.getEnvelope().getHeader();
 
         // if there is some one who has already found addressing, do not do anything here.
         if (msgContext.getProperty(WS_ADDRESSING_VERSION) != null) {
             return;
         }
 
+        SOAPHeader header = null;
+        if(msgContext.isHeaderPresent()) {
+            header = msgContext.getEnvelope().getHeader();
+        }
         // if there are not headers put a flag to disable addressing temporary
         if (header == null) {
             msgContext.setProperty(Constants.Configuration.DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.TRUE);

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/context/MessageContext.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/context/MessageContext.java?rev=398304&r1=398303&r2=398304&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/context/MessageContext.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/context/MessageContext.java Sun Apr 30 03:12:59 2006
@@ -19,6 +19,9 @@
 import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPConstants;
+import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.OMElement;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.addressing.RelatesTo;
@@ -937,5 +940,24 @@
             }
         }
         return false;
+    }
+
+    /**
+     * Gets the first child of the envelope, check if it is a soap:Body, which means there is no header.
+     * We do this basically to make sure we don't parse and build the om tree of the whole envelope
+     * looking for the soap header. If this method returns true, there still is no guarantee that there is
+     * a soap:Header present, use getHeader() and also check for null on getHeader() to be absolutely sure.
+     * 
+     * @return boolean
+     */
+    public boolean isHeaderPresent() {
+        OMNode node = getEnvelope().getFirstOMChild();
+        if(node instanceof OMElement){
+            OMElement firstChild = (OMElement) node;
+            if(firstChild.getQName().getLocalPart().equals(SOAPConstants.BODY_LOCAL_NAME)) {
+                return false;
+            }
+        }
+        return true;
     }
 }

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java?rev=398304&r1=398303&r2=398304&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java Sun Apr 30 03:12:59 2006
@@ -65,6 +65,9 @@
     }
 
     private void checkMustUnderstand(MessageContext msgContext) throws AxisFault {
+        if(!msgContext.isHeaderPresent()) {
+            return;
+        }
         SOAPEnvelope se = msgContext.getEnvelope();
         if (se.getHeader() == null) {
             return;

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/InstanceDispatcher.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/InstanceDispatcher.java?rev=398304&r1=398303&r2=398304&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/InstanceDispatcher.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/InstanceDispatcher.java Sun Apr 30 03:12:59 2006
@@ -18,7 +18,9 @@
 package org.apache.axis2.engine;
 
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNode;
 import org.apache.axiom.soap.SOAPHeader;
+import org.apache.axiom.soap.SOAPConstants;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.context.MessageContext;
@@ -144,6 +146,9 @@
     }
 
     private void extractServiceGroupContextId(MessageContext msgContext) throws AxisFault {
+        if(!msgContext.isHeaderPresent()) {
+            return;
+        }
         SOAPHeader soapHeader = msgContext.getEnvelope().getHeader();
         if (soapHeader != null) {
             OMElement serviceGroupId = soapHeader.getFirstChildWithName(new QName(Constants.AXIS2_NAMESPACE_URI,
@@ -153,14 +158,11 @@
                 ServiceGroupContext serviceGroupContext = msgContext.getConfigurationContext().
                         getServiceGroupContext(groupId, msgContext);
                 if (serviceGroupContext == null) {
-//                handleNoServiceGroupContextIDCase(msgContext);
                     throw new AxisFault(Messages.getMessage(
                             "invalidservicegrouoid", groupId));
                 }
                 msgContext.setServiceGroupContextId(serviceGroupId.getText());
             }
         }
-
     }
-
 }