Author: chamikara
Date: Tue Oct 17 12:17:25 2006
New Revision: 465007

URL: http://svn.apache.org/viewvc?view=rev&rev=465007
Log:
Applied the patch from Andrew for Sandesha2-34.

Did corrections to the RM fault processing logic to allow handling RM faults
in the handlers and to let the Application level faults go through.

A correction to the MakeConnection action value.


Modified:
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java?view=diff&rev=465007&r1=465006&r2=465007
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
 Tue Oct 17 12:17:25 2006
@@ -97,7 +97,8 @@
                        
                        String SOAP_ACTION_CLOSE_SEQUENCE = 
"http://docs.oasis-open.org/ws-rx/wsrm/200608/CloseSequence";;
                        
-                       String SOAP_ACTION_MAKE_CONNECTION = 
"http://docs.oasisopen.org/ws-rx/wsrm/200608/MakeConnection";;
+                       String SOAP_ACTION_MAKE_CONNECTION = 
"http://docs.oasis-open.org/ws-rx/wsrm/200608/MakeConnection";;
+                                                             
                }
        }
        

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?view=diff&rev=465007&r1=465006&r2=465007
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 Tue Oct 17 12:17:25 2006
@@ -23,6 +23,9 @@
 import org.apache.axiom.soap.SOAPBody;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFault;
+import org.apache.axiom.soap.SOAPFaultCode;
+import org.apache.axiom.soap.SOAPFaultSubCode;
+import org.apache.axiom.soap.SOAPFaultValue;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.RelatesTo;
 import org.apache.axis2.context.ConfigurationContext;
@@ -44,6 +47,7 @@
 import org.apache.sandesha2.storage.Transaction;
 import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
 import org.apache.sandesha2.storage.beans.SequencePropertyBean;
+import org.apache.sandesha2.util.FaultManager;
 import org.apache.sandesha2.util.MsgInitializer;
 import org.apache.sandesha2.util.SandeshaUtil;
 import org.apache.sandesha2.wsrm.Sequence;
@@ -116,43 +120,26 @@
                        SOAPFault faultPart = envelope.getBody().getFault();
 
                        if (faultPart != null) {
-                               RelatesTo relatesTo = msgContext.getRelatesTo();
-                               if (relatesTo != null) {
-                                       String relatesToValue = 
relatesTo.getValue();
-                                       OperationContext operationContext = 
configContext.getOperationContext(relatesToValue);
-                                       if (operationContext != null) {
-                                               MessageContext requestMessage = 
operationContext
-                                                               
.getMessageContext(OperationContextFactory.MESSAGE_LABEL_OUT_VALUE);
-                                               if (requestMessage != null) {
-                                                       if 
(SandeshaUtil.isRetriableOnFaults(requestMessage)) {
-
-                                                               
SandeshaListener faultCallback = (SandeshaListener) operationContext
-                                                                               
.getProperty(SandeshaClientConstants.SANDESHA_LISTENER);
-                                                               if 
(faultCallback != null) {
-
-                                                                       // 
constructing the fault
-                                                                       
AxisFault axisFault = getAxisFaultFromFromSOAPFault(faultPart);
-
-                                                                       // 
reporting the fault
-                                                                       // 
log.error(axisFault);
-                                                                       if 
(faultCallback != null) {
-                                                                               
faultCallback.onError(axisFault);
-                                                                       }
-
-                                                               }
-
-                                                               // stopping the 
fault from going further and
-                                                               // getting 
dispatched
-                                                               
msgContext.pause(); // TODO let this go in the
-                                                               // last try
-                                                               if 
(log.isDebugEnabled())
-                                                                       
log.debug("Exit: SandeshaGlobalInHandler::invoke");
-
-                                                               return;
-                                                       }
-                                               }
-                                       }
+
+                               // constructing the fault
+                               AxisFault axisFault = 
getAxisFaultFromFromSOAPFault(faultPart);
+
+                               //If this is a RM related fault. I.e. one that 
was defined in the WSRM spec. It will be 
+                               //handled at this point.
+                               SOAPFaultCode faultCode = 
axisFault.getFaultCodeElement();
+                               SOAPFaultSubCode faultSubCode = 
faultCode!=null?faultCode.getSubCode():null;
+                               SOAPFaultValue faultSubcodeValue = 
faultSubCode!=null?faultSubCode.getValue():null;
+                               String subCodeText = 
faultSubcodeValue!=null?faultSubcodeValue.getText():null;
+                               
+                               if (subCodeText!=null && 
FaultManager.isRMFault(subCodeText)) {
+                                       //handling the fault here and pausing 
the message.
+                                       
+                                       FaultManager faultManager = new 
FaultManager ();
+                                       faultManager.manageIncomingRMFault 
(axisFault, msgContext);
+                                       
+                                       msgContext.pause();
                                }
+                               
                        }
 
                        // Quitting the message with minimum processing if not 
intended for

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=465007&r1=465006&r2=465007
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 Tue Oct 17 12:17:25 2006
@@ -225,20 +225,25 @@
                        msgsBean.setValue(messagesStr);
                }
 
-               if (msgNoPresentInList(messagesStr, msgNo)
+    boolean msgNoPresentInList = msgNoPresentInList(messagesStr, msgNo);
+               
+               if (msgNoPresentInList
                                && 
(Sandesha2Constants.QOS.InvocationType.DEFAULT_INVOCATION_TYPE == 
Sandesha2Constants.QOS.InvocationType.EXACTLY_ONCE)) {
                        // this is a duplicate message and the invocation type 
is
                        // EXACTLY_ONCE.
                        rmMsgCtx.pause();
                }
 
-               if (messagesStr != null && !"".equals(messagesStr))
-                       messagesStr = messagesStr + "," + Long.toString(msgNo);
-               else
-                       messagesStr = Long.toString(msgNo);
-
-               msgsBean.setValue(messagesStr);
-               seqPropMgr.update(msgsBean);
+               if (!msgNoPresentInList)
+               {
+                       if (messagesStr != null && !"".equals(messagesStr))
+                               messagesStr = messagesStr + "," + 
Long.toString(msgNo);
+                       else
+                               messagesStr = Long.toString(msgNo);
+       
+                       msgsBean.setValue(messagesStr);
+                       seqPropMgr.update(msgsBean);
+               }
 
                // Pause the messages bean if not the right message to invoke.
                NextMsgBeanMgr mgr = storageManager.getNextMsgBeanMgr();
@@ -260,7 +265,7 @@
                
rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_ID,sequenceId);
                
rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.MESSAGE_NUMBER,new
 Long (msgNo));
                
-               if (inOrderInvocation) {
+               if (inOrderInvocation && !msgNoPresentInList) {
 
                        SequencePropertyBean incomingSequenceListBean = 
seqPropMgr.retrieve(
                                        
Sandesha2Constants.SequenceProperties.ALL_SEQUENCES,

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java?view=diff&rev=465007&r1=465006&r2=465007
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java 
(original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java 
Tue Oct 17 12:17:25 2006
@@ -464,5 +464,32 @@
                SandeshaException fault = new SandeshaException("");
                return fault;
        }
+       
+       public static boolean isRMFault (String faultSubcodeValue) {
+               if (faultSubcodeValue==null)
+                       return false;
+               
+               if 
(Sandesha2Constants.SOAPFaults.Subcodes.CREATE_SEQUENCE_REFUSED.equalsIgnoreCase
 (faultSubcodeValue) ||
+                       
Sandesha2Constants.SOAPFaults.Subcodes.INVALID_ACKNOWLEDGEMENT.equalsIgnoreCase 
(faultSubcodeValue) ||  
+                       
Sandesha2Constants.SOAPFaults.Subcodes.LAST_MESSAGE_NO_EXCEEDED.equalsIgnoreCase
 (faultSubcodeValue) ||
+                       
Sandesha2Constants.SOAPFaults.Subcodes.MESSAGE_NUMBER_ROLEOVER.equalsIgnoreCase 
(faultSubcodeValue) ||
+                       
Sandesha2Constants.SOAPFaults.Subcodes.SEQUENCE_CLOSED.equalsIgnoreCase 
(faultSubcodeValue) ||
+                       
Sandesha2Constants.SOAPFaults.Subcodes.SEQUENCE_TERMINATED.equalsIgnoreCase 
(faultSubcodeValue) ||
+                       
Sandesha2Constants.SOAPFaults.Subcodes.UNKNOWN_SEQUENCE.equalsIgnoreCase 
(faultSubcodeValue) ) {
+               
+                       return true;
+               }
+               
+               return false;
+               
+       }
+       
+       public void manageIncomingRMFault (AxisFault fault, MessageContext 
msgContext) {
+               
+               //TODO implement code to handle the rm fault
+               
+               log.error(fault);
+               
+       }
 
 }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=465007&r1=465006&r2=465007
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
 Tue Oct 17 12:17:25 2006
@@ -169,11 +169,9 @@
                                
                                successfullySent = true;
                        } catch (Exception e) {
-                               // TODO Auto-generated catch block
                                String message = 
SandeshaMessageHelper.getMessage(
                                                
SandeshaMessageKeys.sendMsgError, e.toString());
                                log.error(message, e);
-
                        } finally {
                                transaction = storageManager.getTransaction();
                                
msgCtx.setProperty(Sandesha2Constants.WITHIN_TRANSACTION,
@@ -311,7 +309,7 @@
 
                        SOAPEnvelope resenvelope = null;
                        try {
-                               resenvelope = 
TransportUtils.createSOAPMessage(msgCtx, 
msgCtx.getEnvelope().getNamespace().getName());
+                               resenvelope = 
TransportUtils.createSOAPMessage(msgCtx, 
msgCtx.getEnvelope().getNamespace().getNamespaceURI());
                        } catch (AxisFault e) {
                                //Cannot find a valid SOAP envelope.
                                if (log.isDebugEnabled()) {



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

Reply via email to