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 ch...@apache.org on 2006/03/02 12:05:03 UTC

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

Author: chinthaka
Date: Thu Mar  2 03:04:59 2006
New Revision: 382350

URL: http://svn.apache.org/viewcvs?rev=382350&view=rev
Log:
Handling invalid addressing headers case

Modified:
    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/core/src/org/apache/axis2/addressing/AddressingConstants.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.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=382350&r1=382349&r2=382350&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 Thu Mar  2 03:04:59 2006
@@ -26,10 +26,15 @@
 import org.apache.axis2.i18n.Messages;
 import org.apache.ws.commons.om.OMAbstractFactory;
 import org.apache.ws.commons.om.OMAttribute;
+import org.apache.ws.commons.om.OMElement;
+import org.apache.ws.commons.om.OMNamespace;
 import org.apache.ws.commons.soap.SOAP12Constants;
 import org.apache.ws.commons.soap.SOAPFactory;
+import org.apache.ws.commons.soap.SOAPFaultCode;
 import org.apache.ws.commons.soap.SOAPFaultReason;
+import org.apache.ws.commons.soap.SOAPFaultSubCode;
 import org.apache.ws.commons.soap.SOAPFaultText;
+import org.apache.ws.commons.soap.SOAPFaultValue;
 import org.apache.ws.commons.soap.SOAPHeader;
 import org.apache.ws.commons.soap.SOAPHeaderBlock;
 
@@ -42,6 +47,7 @@
 public abstract class AddressingInHandler extends AddressingHandler implements AddressingConstants {
 
     private static final long serialVersionUID = 3907988439637261572L;
+    private OMNamespace addressingNSObject;
 
     public void invoke(MessageContext msgContext) throws AxisFault {
         SOAPHeader header = msgContext.getEnvelope().getHeader();
@@ -54,27 +60,22 @@
         logger.debug("Starting " + addressingVersion + " IN handler ...");
 
         ArrayList addressingHeaders;
-        try {
-            addressingHeaders = header.getHeaderBlocksWithNSURI(addressingNamespace);
-            if (addressingHeaders != null && addressingHeaders.size() > 0) {
-                msgContext.setProperty(WS_ADDRESSING_VERSION, addressingNamespace);
-                logger.debug(addressingVersion + " Headers present in the SOAP message. Starting to process ...");
-                extractAddressingInformation(header, msgContext,
-                        addressingHeaders, addressingNamespace);
-            } else {
-                logger.debug("No Headers present corresponding to " + addressingVersion);
-            }
-
-        } catch (AddressingException e) {
-            logger.info("Exception occurred in Addressing Module");
-            throw new AxisFault(e);
+        addressingHeaders = header.getHeaderBlocksWithNSURI(addressingNamespace);
+        if (addressingHeaders != null && addressingHeaders.size() > 0) {
+            msgContext.setProperty(WS_ADDRESSING_VERSION, addressingNamespace);
+            addressingNSObject = ((OMElement) addressingHeaders.get(0)).findNamespace(addressingNamespace, "");
+            logger.debug(addressingVersion + " Headers present in the SOAP message. Starting to process ...");
+            extractAddressingInformation(header, msgContext,
+                    addressingHeaders, addressingNamespace);
+        } else {
+            logger.debug("No Headers present corresponding to " + addressingVersion);
         }
 
+
     }
 
     protected Options extractAddressingInformation(SOAPHeader header, MessageContext messageContext,
-                                                   ArrayList addressingHeaders, String addressingNamespace)
-            throws AddressingException {
+                                                   ArrayList addressingHeaders, String addressingNamespace) throws AxisFault {
 
         Options messageContextOptions = messageContext.getOptions();
         Map alreadyFoundAddrHeader = new HashMap(7); // there are seven frequently used WS-A headers
@@ -84,19 +85,19 @@
             SOAPHeaderBlock soapHeaderBlock = (SOAPHeaderBlock) addressingHeadersIt.next();
             EndpointReference epr;
             if (WSA_TO.equals(soapHeaderBlock.getLocalName())) {
-                if(!hasDuplicateHeaders(WSA_TO, messageContext, alreadyFoundAddrHeader)){
+                if (!hasDuplicateHeaders(WSA_TO, messageContext, alreadyFoundAddrHeader)) {
                     extractToEPRInformation(soapHeaderBlock, messageContextOptions, header);
                 }
             } else if (WSA_FROM.equals(soapHeaderBlock.getLocalName())) {
-                if(!hasDuplicateHeaders(WSA_FROM, messageContext, alreadyFoundAddrHeader)){
+                if (!hasDuplicateHeaders(WSA_FROM, messageContext, alreadyFoundAddrHeader)) {
                     extractFromEPRInformation(messageContextOptions, soapHeaderBlock, addressingNamespace);
                 }
             } else if (WSA_REPLY_TO.equals(soapHeaderBlock.getLocalName())) {
-                if(!hasDuplicateHeaders(WSA_REPLY_TO, messageContext, alreadyFoundAddrHeader)){
+                if (!hasDuplicateHeaders(WSA_REPLY_TO, messageContext, alreadyFoundAddrHeader)) {
                     extractReplyToEPRInformation(messageContextOptions, soapHeaderBlock, addressingNamespace);
                 }
             } else if (WSA_FAULT_TO.equals(soapHeaderBlock.getLocalName())) {
-                if(!hasDuplicateHeaders(WSA_FAULT_TO, messageContext, alreadyFoundAddrHeader)) {
+                if (!hasDuplicateHeaders(WSA_FAULT_TO, messageContext, alreadyFoundAddrHeader)) {
                     extractFaultToEPRInformation(messageContextOptions, soapHeaderBlock, addressingNamespace);
                 }
             } else if (WSA_MESSAGE_ID.equals(soapHeaderBlock.getLocalName())) {
@@ -106,7 +107,7 @@
                 messageContextOptions.setAction(soapHeaderBlock.getText());
                 soapHeaderBlock.setProcessed();
             } else if (WSA_RELATES_TO.equals(soapHeaderBlock.getLocalName())) {
-                if(!hasDuplicateHeaders(WSA_RELATES_TO, messageContext, alreadyFoundAddrHeader)){
+                if (!hasDuplicateHeaders(WSA_RELATES_TO, messageContext, alreadyFoundAddrHeader)) {
                     extractRelatesToInformation(soapHeaderBlock, addressingNamespace, messageContextOptions);
                 }
             }
@@ -114,16 +115,28 @@
         return messageContextOptions;
     }
 
-    private boolean hasDuplicateHeaders(String addressingHeaderName, MessageContext messageContext, Map alreadyFoundAddressingHeaders) {
+    private boolean hasDuplicateHeaders(String addressingHeaderName, MessageContext messageContext, Map alreadyFoundAddressingHeaders) throws AxisFault {
         if (alreadyFoundAddressingHeaders.get(addressingHeaderName) != null) {
             Map faultInformation = (Map) messageContext.getProperty(Constants.FAULT_INFORMATION_FOR_HEADERS);
             if (faultInformation == null) {
                 faultInformation = new HashMap();
                 messageContext.setProperty(Constants.FAULT_INFORMATION_FOR_HEADERS, faultInformation);
             }
-            faultInformation.put(Final.FAULT_HEADER_PROB_HEADER_QNAME,  "wsa:" + addressingHeaderName);
+            faultInformation.put(Final.FAULT_HEADER_PROB_HEADER_QNAME, "wsa:" + addressingHeaderName);
             faultInformation.put(Final.WSA_FAULT_ACTION, Final.WSA_FAULT_ACTION);
-            return true;
+            if (messageContext.isSOAP11()) {
+                throw new AxisFault("A header representing a Message Addressing Property is not valid and the message cannot be processed", addressingNSObject.getPrefix() + ":" + Final.FAULT_INVALID_HEADER);
+            } else {
+                SOAPFactory soapFac = OMAbstractFactory.getSOAP12Factory();
+                SOAPFaultCode soapFaultCode = soapFac.createSOAPFaultCode();
+                SOAPFaultValue soapFaultValue = soapFac.createSOAPFaultValue(soapFaultCode);
+                soapFaultValue.setText(messageContext.getEnvelope().getNamespace().getPrefix() + ":" + SOAP12Constants.FAULT_CODE_SENDER);
+                SOAPFaultSubCode soapFaultSubCode = soapFac.createSOAPFaultSubCode(soapFaultCode);
+                SOAPFaultValue soapFaultSubcodeValue = soapFac.createSOAPFaultValue(soapFaultSubCode);
+                soapFaultSubcodeValue.setText(addressingNSObject.getPrefix() + ":" + Final.FAULT_INVALID_HEADER);
+                messageContext.setProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME, soapFaultCode);
+                throw new AxisFault("A header representing a Message Addressing Property is not valid and the message cannot be processed", addressingNSObject.getPrefix() + ":" + Final.FAULT_INVALID_HEADER);
+            }
         } else {
             alreadyFoundAddressingHeaders.put(addressingHeaderName, addressingHeaderName);
         }

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=382350&r1=382349&r2=382350&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 Thu Mar  2 03:04:59 2006
@@ -157,10 +157,6 @@
                 probHeaderQName.setText(faultyHeaderQName);
             }
 
-            String wsaFaultAction = (String) faultInfo.get(Final.WSA_FAULT_ACTION);
-            if (wsaFaultAction != null && !"".equals(wsaFaultAction)) {
-                processStringInfo(wsaFaultAction, WSA_ACTION, envelope);
-            }
         }
     }
 

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java?rev=382350&r1=382349&r2=382350&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java Thu Mar  2 03:04:59 2006
@@ -67,6 +67,8 @@
         // fault information
         public static final String FAULT_HEADER_PROB_HEADER_QNAME = "ProblemHeaderQName";
         public static final String FAULT_HEADER_DETAIL = "FaultDetail";
+        public static final String FAULT_INVALID_HEADER = "InvalidAddressingHeader";
+
     }
 
 

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=382350&r1=382349&r2=382350&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 Thu Mar  2 03:04:59 2006
@@ -281,13 +281,17 @@
         if (((exception = e) instanceof AxisFault || (exception = e.getCause()) instanceof AxisFault))
         {
             QName faultCodeQName = ((AxisFault) exception).getFaultCode();
-            if (faultCodeQName != null && faultCodeQName.getLocalPart().indexOf(":") == -1) {
-                String prefix = faultCodeQName.getPrefix();
-                String uri = faultCodeQName.getNamespaceURI();
-                prefix = prefix == null || "".equals(prefix) ? Constants.AXIS2_NAMESPACE_PREFIX : prefix;
-                uri = uri == null || "".equals(uri) ? Constants.AXIS2_NAMESPACE_URI : uri;
-                soapFaultCode = prefix + ":" + faultCodeQName.getLocalPart();
-                fault.declareNamespace(uri, prefix);
+            if (faultCodeQName != null) {
+                if (faultCodeQName.getLocalPart().indexOf(":") == -1) {
+                    String prefix = faultCodeQName.getPrefix();
+                    String uri = faultCodeQName.getNamespaceURI();
+                    prefix = prefix == null || "".equals(prefix) ? Constants.AXIS2_NAMESPACE_PREFIX : prefix;
+                    uri = uri == null || "".equals(uri) ? Constants.AXIS2_NAMESPACE_URI : uri;
+                    soapFaultCode = prefix + ":" + faultCodeQName.getLocalPart();
+                    fault.declareNamespace(uri, prefix);
+                }else{
+                    soapFaultCode = faultCodeQName.getLocalPart();
+                }
             }
         }
 
@@ -305,8 +309,8 @@
             message = fault.getReason().getSOAPText().getText();
         } else if (soapException != null) {
             message = soapException.getMessage();
-        } else if (e instanceof AxisFault) {
-            message = ((AxisFault) e).getReason();
+        } else if (exception instanceof AxisFault) {
+            message = ((AxisFault) exception).getReason();
             message = message != null && "".equals(message) ? message : e.getMessage();
 
         }
@@ -315,6 +319,7 @@
         message = ("".equals(message) || (message == null))
                 ? "unknown"
                 : message;
+        fault.getReason().getSOAPText().setLang("en-US");
         fault.getReason().getSOAPText().setText(message);
 
         Object faultRole = context.getProperty(SOAP12Constants.SOAP_FAULT_ROLE_LOCAL_NAME);