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 di...@apache.org on 2006/03/06 05:54:33 UTC

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

Author: dims
Date: Sun Mar  5 20:54:31 2006
New Revision: 383464

URL: http://svn.apache.org/viewcvs?rev=383464&view=rev
Log:
- rename makeFault to throwFault as it is throwing a fault :)
- get the message id from the incoming message and add it to the fault's RelatesTo so that people know which message id caused this specific fault.


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

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=383464&r1=383463&r2=383464&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 Mar  5 20:54:31 2006
@@ -135,32 +135,52 @@
 
     private void checkForMandatoryHeaders(Map alreadyFoundAddrHeader, MessageContext messageContext) throws AxisFault {
         if (alreadyFoundAddrHeader.get(WSA_ACTION) == null) {
-            makeFault(messageContext, WSA_ACTION, Final.FAULT_ADDRESSING_HEADER_REQUIRED, null);
+            throwFault(messageContext, WSA_ACTION, Final.FAULT_ADDRESSING_HEADER_REQUIRED, null);
         } 
     }
 
     private boolean hasDuplicateHeaders(String addressingHeaderName, MessageContext messageContext, Map alreadyFoundAddressingHeaders) throws AxisFault {
         if (alreadyFoundAddressingHeaders.get(addressingHeaderName) != null) {
-            return makeFault(messageContext, addressingHeaderName, Final.FAULT_INVALID_HEADER, Final.FAULT_INVALID_CARDINALITY);
+            throwFault(messageContext, addressingHeaderName, Final.FAULT_INVALID_HEADER, Final.FAULT_INVALID_CARDINALITY);
         } else {
             alreadyFoundAddressingHeaders.put(addressingHeaderName, addressingHeaderName);
         }
         return false;
     }
 
-    private boolean makeFault(MessageContext messageContext, String addressingHeaderName, String faultCode, String faultSubCode) throws AxisFault {
+    private void throwFault(MessageContext messageContext, String addressingHeaderName, String faultCode, String faultSubCode) throws AxisFault {
         Map faultInformation = (Map) messageContext.getProperty(Constants.FAULT_INFORMATION_FOR_HEADERS);
         if (faultInformation == null) {
             faultInformation = new HashMap();
             messageContext.setProperty(Constants.FAULT_INFORMATION_FOR_HEADERS, faultInformation);
         }
 
+        if(messageContext.getMessageID() != null) {
+            faultInformation.put(AddressingConstants.WSA_RELATES_TO,messageContext.getMessageID());
+        } else {
+            faultInformation.put(AddressingConstants.WSA_RELATES_TO,getMessageID(messageContext));
+        }
         faultInformation.put(Final.FAULT_HEADER_PROB_HEADER_QNAME, WSA_DEFAULT_PREFIX + ":" + addressingHeaderName);
         faultInformation.put(Final.WSA_FAULT_ACTION, Final.WSA_FAULT_ACTION);
         if (!messageContext.isSOAP11()) {
             setFaultCode(messageContext, faultCode, faultSubCode);
         }
         throw new AxisFault("A header representing a Message Addressing Property is not valid and the message cannot be processed", WSA_DEFAULT_PREFIX + ":" + faultCode);
+    }
+
+    private String getMessageID(MessageContext msgContext) {
+        SOAPHeader header = msgContext.getEnvelope().getHeader();
+        if (header != null) {
+            ArrayList addressingHeaders = header.getHeaderBlocksWithNSURI(addressingNamespace);
+            Iterator addressingHeadersIt = addressingHeaders.iterator();
+            while (addressingHeadersIt.hasNext()) {
+                SOAPHeaderBlock soapHeaderBlock = (SOAPHeaderBlock) addressingHeadersIt.next();
+                if (WSA_MESSAGE_ID.equals(soapHeaderBlock.getLocalName())) {
+                    return soapHeaderBlock.getText();
+                }
+            }
+        }
+        return null;
     }
 
     private void setFaultCode(MessageContext messageContext, String faultCode, String faultSubCode) {

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=383464&r1=383463&r2=383464&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 Sun Mar  5 20:54:31 2006
@@ -166,6 +166,12 @@
                 OMElement probHeaderQName = OMAbstractFactory.getOMFactory().createOMElement(Final.FAULT_HEADER_PROB_HEADER_QNAME, addressingNamespaceObject, faultDetail);
                 probHeaderQName.setText(faultyHeaderQName);
 
+                String messageID = (String) faultInfo.get(AddressingConstants.WSA_RELATES_TO);
+                if(messageID != null) {
+                    SOAPHeaderBlock relatesTo = envelope.getHeader().addHeaderBlock(AddressingConstants.WSA_RELATES_TO, addressingNamespaceObject);
+                    relatesTo.setText(messageID);
+                }
+
                 // add to header
                 SOAPFault fault = envelope.getBody().getFault();
                 if (fault != null && fault.getDetail() != null) {