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/17 21:20:25 UTC

svn commit: r394756 - in /webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing: AddressingFinalInHandler.java AddressingInHandler.java AddressingOutHandler.java AddressingSubmissionInHandler.java

Author: dims
Date: Mon Apr 17 12:20:22 2006
New Revision: 394756

URL: http://svn.apache.org/viewcvs?rev=394756&view=rev
Log:
Fix for AXIS2-564 - Addressing throwing java.lang.NullPointerException when load is heavy


Modified:
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingFinalInHandler.java
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingSubmissionInHandler.java

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingFinalInHandler.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingFinalInHandler.java?rev=394756&r1=394755&r2=394756&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingFinalInHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingFinalInHandler.java Mon Apr 17 12:20:22 2006
@@ -37,11 +37,11 @@
     }
 
 
-    protected void extractToEprReferenceParameters(EndpointReference toEPR, SOAPHeader header) {
+    protected void extractToEprReferenceParameters(EndpointReference toEPR, SOAPHeader header, String namespace) {
         Iterator headerBlocks = header.getChildElements();
         while (headerBlocks.hasNext()) {
             SOAPHeaderBlock soapHeaderBlock = (SOAPHeaderBlock) headerBlocks.next();
-            OMAttribute isRefParamAttr = soapHeaderBlock.getAttribute(new QName(addressingNamespace, "IsReferenceParameter"));
+            OMAttribute isRefParamAttr = soapHeaderBlock.getAttribute(new QName(namespace, "IsReferenceParameter"));
             if (isRefParamAttr != null && "true".equals(isRefParamAttr.getAttributeValue())) {
                 toEPR.addReferenceParameter(soapHeaderBlock.getQName(), soapHeaderBlock.getText());
             }

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=394756&r1=394755&r2=394756&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 Mon Apr 17 12:20:22 2006
@@ -44,6 +44,7 @@
     private OMNamespace addressingNSObject;
 
     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.
@@ -60,13 +61,13 @@
         logger.debug("Starting " + addressingVersion + " IN handler ...");
 
         ArrayList addressingHeaders;
-        addressingHeaders = header.getHeaderBlocksWithNSURI(addressingNamespace);
+        addressingHeaders = header.getHeaderBlocksWithNSURI(namespace);
         if (addressingHeaders != null && addressingHeaders.size() > 0) {
-            msgContext.setProperty(WS_ADDRESSING_VERSION, addressingNamespace);
+            msgContext.setProperty(WS_ADDRESSING_VERSION, namespace);
             msgContext.setProperty(Constants.Configuration.DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.FALSE);
-            addressingNSObject = ((OMElement) addressingHeaders.get(0)).findNamespace(addressingNamespace, "");
+            addressingNSObject = ((OMElement) addressingHeaders.get(0)).findNamespace(namespace, "");
             logger.debug(addressingVersion + " Headers present in the SOAP message. Starting to process ...");
-            extractAddressingInformation(header, msgContext, addressingHeaders, addressingNamespace);
+            extractAddressingInformation(header, msgContext, addressingHeaders, namespace);
         } else {
             msgContext.setProperty(Constants.Configuration.DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.TRUE);
             logger.debug("No Headers present corresponding to " + addressingVersion);
@@ -76,7 +77,7 @@
     }
 
     protected Options extractAddressingInformation(SOAPHeader header, MessageContext messageContext,
-                                                   ArrayList addressingHeaders, String addressingNamespace) throws AxisFault {
+                                                   ArrayList addressingHeaders, String namespace) throws AxisFault {
 
         Options messageContextOptions = messageContext.getOptions();
         
@@ -119,13 +120,13 @@
                 continue;
             
             if (WSA_TO.equals(soapHeaderBlock.getLocalName()) && !ignoreTo) {
-                extractToEPRInformation(soapHeaderBlock, messageContextOptions, header);
+                extractToEPRInformation(soapHeaderBlock, messageContextOptions, header, namespace);
             } else if (WSA_FROM.equals(soapHeaderBlock.getLocalName()) && !ignoreFrom) {
-                extractFromEPRInformation(messageContextOptions, soapHeaderBlock, addressingNamespace);
+                extractFromEPRInformation(messageContextOptions, soapHeaderBlock, namespace);
             } else if (WSA_REPLY_TO.equals(soapHeaderBlock.getLocalName()) && !ignoreReplyTo) {
-                extractReplyToEPRInformation(messageContextOptions, soapHeaderBlock, addressingNamespace);
+                extractReplyToEPRInformation(messageContextOptions, soapHeaderBlock, namespace);
             } else if (WSA_FAULT_TO.equals(soapHeaderBlock.getLocalName()) && !ignoreFaultTo) {
-                extractFaultToEPRInformation(messageContextOptions, soapHeaderBlock, addressingNamespace);
+                extractFaultToEPRInformation(messageContextOptions, soapHeaderBlock, namespace);
             } else if (WSA_MESSAGE_ID.equals(soapHeaderBlock.getLocalName()) && !ignoreMessageID) {
                 messageContextOptions.setMessageId(soapHeaderBlock.getText());
                 soapHeaderBlock.setProcessed();
@@ -133,7 +134,7 @@
                 messageContextOptions.setAction(soapHeaderBlock.getText());
                 soapHeaderBlock.setProcessed();
             } else if (WSA_RELATES_TO.equals(soapHeaderBlock.getLocalName()) && !ignoreRelatesTo) {
-                extractRelatesToInformation(soapHeaderBlock, addressingNamespace, messageContextOptions);
+                extractRelatesToInformation(soapHeaderBlock, namespace, messageContextOptions);
             }
         }
 
@@ -188,7 +189,7 @@
         throw new AxisFault("A header representing a Message Addressing Property is not valid and the message cannot be processed", WSA_DEFAULT_PREFIX + ":" + faultCode);
     }
 
-    protected abstract void extractToEprReferenceParameters(EndpointReference toEPR, SOAPHeader header);
+    protected abstract void extractToEprReferenceParameters(EndpointReference toEPR, SOAPHeader header, String namespace);
 
 
     private void extractRelatesToInformation(SOAPHeaderBlock soapHeaderBlock, String addressingNamespace, Options messageContextOptions) {
@@ -244,7 +245,7 @@
         soapHeaderBlock.setProcessed();
     }
 
-    private void extractToEPRInformation(SOAPHeaderBlock soapHeaderBlock, Options messageContextOptions, SOAPHeader header) {
+    private void extractToEPRInformation(SOAPHeaderBlock soapHeaderBlock, Options messageContextOptions, SOAPHeader header, String namespace) {
 
         EndpointReference epr;
         //here the addressing epr overidde what ever already there in the message context
@@ -252,7 +253,7 @@
         messageContextOptions.setTo(epr);
 
         // check for reference parameters
-        extractToEprReferenceParameters(epr, header);
+        extractToEprReferenceParameters(epr, header, namespace);
         soapHeaderBlock.setProcessed();
 
     }

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java?rev=394756&r1=394755&r2=394756&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java Mon Apr 17 12:20:22 2006
@@ -53,6 +53,7 @@
         SOAPFactory factory = (SOAPFactory)msgContext.getEnvelope().getOMFactory();
         
         OMNamespace addressingNamespaceObject;
+        String namespace = addressingNamespace;
 
         // it should be able to disable addressing by some one.
         Boolean
@@ -75,25 +76,25 @@
             // since we support only two addressing versions I can avoid multiple  ifs here.
             // see that if message context property holds something other than Final.WSA_NAMESPACE
             // we always defaults to Submission.WSA_NAMESPACE. Hope this is fine.
-            addressingNamespace = Final.WSA_NAMESPACE.equals(addressingVersionFromCurrentMsgCtxt)
+            namespace = Final.WSA_NAMESPACE.equals(addressingVersionFromCurrentMsgCtxt)
                     ? Final.WSA_NAMESPACE : Submission.WSA_NAMESPACE;
         } else if (msgContext.getOperationContext() != null)
         { // check for a IN message context, else default to WSA Final
             MessageContext inMessageContext = msgContext.getOperationContext()
                     .getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
             if (inMessageContext != null) {
-                addressingNamespace =
+                namespace =
                         (String) inMessageContext.getProperty(
                                 WS_ADDRESSING_VERSION);
             }
         }
 
-        if (addressingNamespace == null || "".equals(addressingNamespace)) {
-            addressingNamespace = Final.WSA_NAMESPACE;
+        if (namespace == null || "".equals(namespace)) {
+            namespace = Final.WSA_NAMESPACE;
         }
         addressingNamespaceObject = factory.createOMNamespace(
-                addressingNamespace, WSA_DEFAULT_PREFIX);
-        anonymousURI = addressingNamespace.equals(Final.WSA_NAMESPACE) ? Final.WSA_ANONYMOUS_URL : Submission.WSA_ANONYMOUS_URL;
+                namespace, WSA_DEFAULT_PREFIX);
+        anonymousURI = namespace.equals(Final.WSA_NAMESPACE) ? Final.WSA_ANONYMOUS_URL : Submission.WSA_ANONYMOUS_URL;
 
 
         Options messageContextOptions = msgContext.getOptions();
@@ -113,16 +114,16 @@
         envelope.declareNamespace(addressingNamespaceObject);
 
         // processing WSA To
-        processToEPR(messageContextOptions, envelope, addressingNamespaceObject);
+        processToEPR(messageContextOptions, envelope, addressingNamespaceObject, namespace);
 
         // processing WSA replyTo
-        processReplyTo(envelope, messageContextOptions, msgContext, addressingNamespaceObject);
+        processReplyTo(envelope, messageContextOptions, msgContext, addressingNamespaceObject, namespace);
 
         // processing WSA From
-        processFromEPR(messageContextOptions, envelope, addressingNamespaceObject);
+        processFromEPR(messageContextOptions, envelope, addressingNamespaceObject, namespace);
 
         // processing WSA FaultTo
-        processFaultToEPR(messageContextOptions, envelope, addressingNamespaceObject);
+        processFaultToEPR(messageContextOptions, envelope, addressingNamespaceObject, namespace);
 
         String messageID = messageContextOptions.getMessageId();
         if (messageID != null && !isAddressingHeaderAlreadyAvailable(WSA_MESSAGE_ID, envelope,
@@ -141,8 +142,6 @@
 
         // We are done, cleanup the references
         addressingNamespaceObject = null;
-        addressingNamespace = null;
-
     }
 
     private void processWSAAction(Options messageContextOptions, SOAPEnvelope envelope,
@@ -211,23 +210,23 @@
         }
     }
 
-    private void processFaultToEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject) {
+    private void processFaultToEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace) {
         EndpointReference epr;
         epr = messageContextOptions.getFaultTo();
         if (epr != null) {//optional
-            addToSOAPHeader(epr, AddressingConstants.WSA_FAULT_TO, envelope, addressingNamespaceObject);
+            addToSOAPHeader(epr, AddressingConstants.WSA_FAULT_TO, envelope, addressingNamespaceObject, namespace);
         }
     }
 
-    private void processFromEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject) {
+    private void processFromEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace) {
         EndpointReference epr;
         epr = messageContextOptions.getFrom();
         if (epr != null) {//optional
-            addToSOAPHeader(epr, AddressingConstants.WSA_FROM, envelope, addressingNamespaceObject);
+            addToSOAPHeader(epr, AddressingConstants.WSA_FROM, envelope, addressingNamespaceObject, namespace);
         }
     }
 
-    private void processReplyTo(SOAPEnvelope envelope, Options messageContextOptions, MessageContext msgContext, OMNamespace addressingNamespaceObject) {
+    private void processReplyTo(SOAPEnvelope envelope, Options messageContextOptions, MessageContext msgContext, OMNamespace addressingNamespaceObject, String namespace) {
         EndpointReference epr;
         if (!isAddressingHeaderAlreadyAvailable(WSA_REPLY_TO, envelope, addressingNamespaceObject))
         {
@@ -251,35 +250,24 @@
                     epr.setAddress(anonymousURI);
                 }
             }
-            addToSOAPHeader(epr, AddressingConstants.WSA_REPLY_TO, envelope, addressingNamespaceObject);
+            addToSOAPHeader(epr, AddressingConstants.WSA_REPLY_TO, envelope, addressingNamespaceObject, namespace);
         }
     }
 
-    private void processToEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject) {
+    private void processToEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace) {
         EndpointReference epr = messageContextOptions.getTo();
         if (epr != null && !isAddressingHeaderAlreadyAvailable(WSA_TO, envelope, addressingNamespaceObject))
         {
             Map referenceParameters = null;
             String address = "";
-//            System.out.println("envelope = " + envelope);
-//            if (envelope.getBody().hasFault()) {
-//                MessageContext inMsgCtxt = msgCtxt.getOperationContext().getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-//                if (inMsgCtxt != null && inMsgCtxt.getFaultTo() != null && inMsgCtxt.getFaultTo().getAddress() != null)
-//                {
-//                    EndpointReference faultTo = inMsgCtxt.getFaultTo();
-//                    address = faultTo.getAddress();
-//                    referenceParameters = faultTo.getAllReferenceParameters();
-//                }
-//            } else {
             address = epr.getAddress();
             referenceParameters = epr.getAllReferenceParameters();
-//            }
 
             if (!"".equals(address) && address != null) {
                 SOAPHeaderBlock toHeaderBlock = envelope.getHeader().addHeaderBlock(WSA_TO, addressingNamespaceObject);
                 toHeaderBlock.setText(address);
             }
-            processToEPRReferenceInformation(referenceParameters, envelope.getHeader(),addressingNamespaceObject);
+            processToEPRReferenceInformation(referenceParameters, envelope.getHeader(),addressingNamespaceObject, namespace);
         }
     }
 
@@ -299,7 +287,7 @@
 
     protected void addToSOAPHeader(EndpointReference epr,
                                    String type,
-                                   SOAPEnvelope envelope, OMNamespace addressingNamespaceObject) {
+                                   SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace) {
         if (epr == null || isAddressingHeaderAlreadyAvailable(type, envelope, addressingNamespaceObject))
         {
             return;
@@ -322,7 +310,7 @@
                     envelope.getOMFactory().createOMElement(
                             EPR_REFERENCE_PARAMETERS,
                             addressingNamespaceObject, soapHeaderBlock);
-            processReferenceInformation(referenceParameters, reference);
+            processReferenceInformation(referenceParameters, reference, namespace);
 
         }
 
@@ -364,9 +352,9 @@
      *
      * @param referenceInformation
      */
-    private void processReferenceInformation(Map referenceInformation, OMElement parent) {
+    private void processReferenceInformation(Map referenceInformation, OMElement parent, String namespace) {
 
-        boolean processingWSAFinal = Final.WSA_NAMESPACE.equals(addressingNamespace);
+        boolean processingWSAFinal = Final.WSA_NAMESPACE.equals(namespace);
         if (referenceInformation != null && parent != null) {
             Iterator iterator = referenceInformation.keySet().iterator();
             while (iterator.hasNext()) {
@@ -382,9 +370,9 @@
      *
      * @param referenceInformation
      */
-    private void processToEPRReferenceInformation(Map referenceInformation, OMElement parent, OMNamespace addressingNamespaceObject) {
+    private void processToEPRReferenceInformation(Map referenceInformation, OMElement parent, OMNamespace addressingNamespaceObject, String namespace) {
 
-        boolean processingWSAFinal = Final.WSA_NAMESPACE.equals(addressingNamespace);
+        boolean processingWSAFinal = Final.WSA_NAMESPACE.equals(namespace);
         if (referenceInformation != null && parent != null) {
             Iterator iterator = referenceInformation.keySet().iterator();
             while (iterator.hasNext()) {

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingSubmissionInHandler.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingSubmissionInHandler.java?rev=394756&r1=394755&r2=394756&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingSubmissionInHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingSubmissionInHandler.java Mon Apr 17 12:20:22 2006
@@ -36,7 +36,7 @@
     }
 
 
-    protected void extractToEprReferenceParameters(EndpointReference toEPR, SOAPHeader header) {
+    protected void extractToEprReferenceParameters(EndpointReference toEPR, SOAPHeader header, String namespace) {
         // there is no exact way to identify ref parameters for Submission version. So let's have a handler
         // at the end of the flow, which puts all the handlers (which are of course mustUnderstand=false)
         // as reference parameters