Author: gatfora
Date: Wed Apr 30 04:54:19 2008
New Revision: 652350

URL: http://svn.apache.org/viewvc?rev=652350&view=rev
Log:
Only process RM Faults if the action is recognised as a possible RM fault

Modified:
    
webservices/sandesha/branches/sandesha2/java/1_4/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java

Modified: 
webservices/sandesha/branches/sandesha2/java/1_4/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_4/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java?rev=652350&r1=652349&r2=652350&view=diff
==============================================================================
--- 
webservices/sandesha/branches/sandesha2/java/1_4/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
 (original)
+++ 
webservices/sandesha/branches/sandesha2/java/1_4/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
 Wed Apr 30 04:54:19 2008
@@ -37,6 +37,7 @@
 import org.apache.axiom.soap.SOAPFaultText;
 import org.apache.axiom.soap.SOAPFaultValue;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.addressing.RelatesTo;
 import org.apache.axis2.client.async.AxisCallback;
@@ -62,7 +63,6 @@
 import org.apache.sandesha2.client.SandeshaListener;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
-import org.apache.sandesha2.storage.SandeshaStorageException;
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.Transaction;
 import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
@@ -745,21 +745,28 @@
        }
        
        public static InvocationResponse processMessagesForFaults (RMMsgContext 
rmMsgCtx, StorageManager storageManager) throws AxisFault {
+               if (log.isDebugEnabled())
+                       log.debug("Enter: 
FaultManager::processMessagesForFaults");
                
                InvocationResponse response = InvocationResponse.CONTINUE;
                
-               SOAPEnvelope envelope = rmMsgCtx.getSOAPEnvelope();
-               if (envelope==null) 
-                       return response;
+               // Rather than look for a SOAPFault, check the action of the 
message to see if that matches
+               // an RM fault or is the addressing fault (RM 1.0).
                
-               SOAPFault faultPart = envelope.getBody().getFault();
+               boolean isFault = 
isRMFaultAction(rmMsgCtx.getMessageContext().getWSAAction());
 
-               if (faultPart != null) {
+               if (isFault) {
            Transaction transaction = null;
 
            try {
                transaction = storageManager.getTransaction();
 
+                       SOAPEnvelope envelope = rmMsgCtx.getSOAPEnvelope();
+                       if (envelope==null) 
+                               return response;
+                       
+                       SOAPFault faultPart = envelope.getBody().getFault();
+
                // constructing the fault
                AxisFault axisFault = getAxisFaultFromFromSOAPFault(faultPart, 
rmMsgCtx);
                response = manageIncomingFault (axisFault, rmMsgCtx, faultPart);
@@ -771,10 +778,27 @@
                        transaction.rollback();
                        }
                }
+               if (log.isDebugEnabled())
+                       log.debug("Exit: 
FaultManager::processMessagesForFaults, " + response);
                return response;
        }
 
        
+       private static boolean isRMFaultAction(String action) {
+               if (log.isDebugEnabled())
+                       log.debug("Enter: 
FaultManager::processMessagesForFaults , "+action);
+               
+           boolean isFaultAction = false;
+           
+           if (AddressingConstants.Final.WSA_FAULT_ACTION.equals(action) ||
+               
Sandesha2Constants.SPEC_2007_02.Actions.SOAP_ACTION_FAULT.equals(action))
+               isFaultAction = true;
+           
+               if (log.isDebugEnabled())
+                       log.debug("Enter: 
FaultManager::processMessagesForFaults , "+isFaultAction);
+           return isFaultAction;
+    }
+
        private static AxisFault getAxisFaultFromFromSOAPFault(SOAPFault 
faultPart, RMMsgContext rmMsgCtx) {
                
                String soapFaultSubcode = null;
@@ -989,7 +1013,7 @@
   }
 
        static void notifyClientsOfFault(String internalSequenceId, 
-                       StorageManager storageManager, ConfigurationContext 
configCtx, AxisFault fault) throws SandeshaStorageException {
+                       StorageManager storageManager, ConfigurationContext 
configCtx, AxisFault fault) throws SandeshaException {
                // Locate and update all of the messages for this sequence, now 
that we know
                // the sequence id.
                SenderBean target = new SenderBean();
@@ -1004,32 +1028,32 @@
                        // Retrieve the message context.
                        MessageContext context = 
storageManager.retrieveMessageContext(messageStoreKey, configCtx);
                        
-      AxisOperation axisOperation = context.getAxisOperation();
-      if (axisOperation != null)
-      {
-        MessageReceiver msgReceiver = axisOperation.getMessageReceiver();
-        if ((msgReceiver != null) && (msgReceiver instanceof CallbackReceiver))
-        {
-            Object callback = 
((CallbackReceiver)msgReceiver).lookupCallback(context.getMessageID());
-            if (callback instanceof Callback)
-            {
-                try {
-                    
((CallbackReceiver)msgReceiver).addCallback(context.getMessageID(),(Callback)callback);
-                } catch (AxisFault axisFault) {
-                    throw new SandeshaStorageException(axisFault);
-                }
-                ((Callback)callback).onError(fault);
-            } else if(callback instanceof AxisCallback) {
-                try {
-                    
((CallbackReceiver)msgReceiver).addCallback(context.getMessageID(),(AxisCallback)callback);
-                } catch (AxisFault axisFault) {
-                    throw new SandeshaStorageException(axisFault);
-                }
-                ((AxisCallback)callback).onError(fault);
-            }
-        }
-      }
+                       AxisOperation axisOperation = 
context.getAxisOperation();
+                       if (axisOperation != null) {
+                               
+                               MessageReceiver msgReceiver = 
axisOperation.getMessageReceiver();
+                               if ((msgReceiver != null) && (msgReceiver 
instanceof CallbackReceiver)) {
+                                       
+                                       Object callback = 
((CallbackReceiver)msgReceiver).lookupCallback(context.getMessageID());
+                                       if (callback instanceof Callback) {
+                                               try {
+                                                       
((CallbackReceiver)msgReceiver).addCallback(context.getMessageID(),(Callback)callback);
+                                               } catch (AxisFault axisFault) {
+                                                       throw new 
SandeshaException(axisFault);
+                                               }
+                                               
+                                       ((Callback)callback).onError(fault);
+                                       } else if(callback instanceof 
AxisCallback) {
+                                               try {
+                                                       
((CallbackReceiver)msgReceiver).addCallback(context.getMessageID(),(AxisCallback)callback);
+                                               } catch (AxisFault axisFault) {
+                                                       throw new 
SandeshaException(axisFault);
+                                               }
+                                               
+                                               
((AxisCallback)callback).onError(fault);
+                                       }
+                               }
+                       }
                }
-
        }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to