Author: gatfora
Date: Mon May 14 09:00:10 2007
New Revision: 537897

URL: http://svn.apache.org/viewvc?view=rev&rev=537897
Log:
Abort processing for RM faults once processed

Modified:
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?view=diff&rev=537897&r1=537896&r2=537897
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 Mon May 14 09:00:10 2007
@@ -127,23 +127,17 @@
       
SandeshaUtil.getSandeshaStorageManager(rmMsgCtx.getConfigurationContext(), 
           rmMsgCtx.getConfigurationContext().getAxisConfiguration());
     
-    Transaction transaction = storageManager.getTransaction();
-    try {          
-           //processing any incoming faults.     
-                       //This is responsible for Sandesha2 specific 
-                       FaultManager.processMessagesForFaults(rmMsgCtx);
-    }
-               finally {
-                       transaction.commit();
-               }
+               //processing any incoming faults.     
+    //This is responsible for Sandesha2 specific 
+    InvocationResponse response = 
FaultManager.processMessagesForFaults(rmMsgCtx, storageManager);
 
     if (rmMsgCtx.getMessageType() == 
Sandesha2Constants.MessageTypes.APPLICATION) {
       processApplicationMessage(rmMsgCtx);
     }
     
                if (log.isDebugEnabled())
-                       log.debug("Exit: SandeshaGlobalInHandler::invoke " + 
InvocationResponse.CONTINUE);
-               return InvocationResponse.CONTINUE;
+                       log.debug("Exit: SandeshaGlobalInHandler::invoke " + 
response);
+               return response;
        }
        
   private static void processApplicationMessage(RMMsgContext rmMsgCtx) throws 
AxisFault {

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java?view=diff&rev=537897&r1=537896&r2=537897
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
 Mon May 14 09:00:10 2007
@@ -44,6 +44,7 @@
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.engine.Handler.InvocationResponse;
 import org.apache.axis2.util.CallbackReceiver;
 import org.apache.axis2.util.MessageContextBuilder;
 import org.apache.axis2.wsdl.WSDLConstants;
@@ -59,6 +60,7 @@
 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;
 import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
 import org.apache.sandesha2.storage.beans.RMDBean;
@@ -516,8 +518,11 @@
                
        }
        
-       private static void manageIncomingFault (AxisFault fault, RMMsgContext 
rmMsgCtx, SOAPFault faultPart) throws AxisFault {
+       private static InvocationResponse manageIncomingFault (AxisFault fault, 
RMMsgContext rmMsgCtx, SOAPFault faultPart) throws AxisFault {
        
+               if (log.isDebugEnabled())
+                       log.debug("Enter: FaultManager::manageIncomingFault");
+               InvocationResponse response = InvocationResponse.CONTINUE;
                if (log.isErrorEnabled())
                        log.error(fault);
                
@@ -573,23 +578,46 @@
                                
Sandesha2Constants.SOAPFaults.Subcodes.SEQUENCE_TERMINATED.equals(soapFaultSubcode)
 ) {
                        processSequenceUnknownFault(rmMsgCtx, fault, 
identifier);
                }
+               
+               // If the operation is an Sandesha In Only operation, or the 
fault is a recognised fault,
+               // then stop the message from being processed further.
+               // To configure the actions for Sandesha to drop, add them to 
the module.xml under
+               // Sandesha2InOnly operation.
+               if (isRMFault(soapFaultSubcode))
+                       response = InvocationResponse.ABORT;
+               
+               if (log.isDebugEnabled())
+                       log.debug("Exit: FaultManager::manageIncomingFault, " + 
response);
+               return response;
        }
        
-       public static void processMessagesForFaults (RMMsgContext rmMsgCtx) 
throws AxisFault {
+       public static InvocationResponse processMessagesForFaults (RMMsgContext 
rmMsgCtx, StorageManager storageManager) throws AxisFault {
+               
+               InvocationResponse response = InvocationResponse.CONTINUE;
                
                SOAPEnvelope envelope = rmMsgCtx.getSOAPEnvelope();
                if (envelope==null) 
-                       return;
+                       return response;
                
                SOAPFault faultPart = envelope.getBody().getFault();
 
                if (faultPart != null) {
-
-                       // constructing the fault
-                       AxisFault axisFault = 
getAxisFaultFromFromSOAPFault(faultPart);
-                       manageIncomingFault (axisFault, rmMsgCtx, faultPart);
+                       Transaction transaction = null;
+                       
+                       try {
+                               transaction = storageManager.getTransaction();
+                               // constructing the fault
+                               AxisFault axisFault = 
getAxisFaultFromFromSOAPFault(faultPart);
+                               response = manageIncomingFault (axisFault, 
rmMsgCtx, faultPart);
+
+                               if(transaction != null && 
transaction.isActive()) transaction.commit();
+                               transaction = null;
+                       } finally {
+                               if (transaction != null && 
transaction.isActive())
+                                       transaction.rollback();
+                       }
                }
-
+               return response;
        }
 
        



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

Reply via email to