You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ch...@apache.org on 2006/10/17 21:17:26 UTC

svn commit: r465007 - in /webservices/sandesha/trunk/java/src/org/apache/sandesha2: Sandesha2Constants.java handlers/SandeshaGlobalInHandler.java msgprocessors/ApplicationMsgProcessor.java util/FaultManager.java workers/SenderWorker.java

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: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org