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 ga...@apache.org on 2007/02/12 16:55:56 UTC

svn commit: r506509 - in /webservices/sandesha/trunk/java: src/org/apache/sandesha2/ src/org/apache/sandesha2/handlers/ src/org/apache/sandesha2/msgprocessors/ src/org/apache/sandesha2/util/ src/org/apache/sandesha2/workers/ src/org/apache/sandesha2/ws...

Author: gatfora
Date: Mon Feb 12 07:55:55 2007
New Revision: 506509

URL: http://svn.apache.org/viewvc?view=rev&rev=506509
Log:
When receiving a CreateSequenceRefused Fault Sandesha2 should terminate the outbound sequence and notify any waiting clients of the problem

Added:
    webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedInboundFaultTest.java
Modified:
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceFault.java
    webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedFaultTest.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=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java Mon Feb 12 07:55:55 2007
@@ -249,8 +249,10 @@
 		int MAKE_CONNECTION = 17;
 		
 		int MESSAGE_PENDING = 18;
+		
+		int SEQUENCE_FAULT = 19;
 
-		int MAX_MSG_PART_ID = 18;
+		int MAX_MSG_PART_ID = 19;
 	}
 
 	public interface SOAPVersion {

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java?view=diff&rev=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java Mon Feb 12 07:55:55 2007
@@ -105,11 +105,11 @@
 				throw new AxisFault(message);
 			}
 
-			//processing any incoming faults.
-			//This is responsible for Sandesha2 specific 
-			FaultManager.processMessagesForFaults(msgCtx);
-			
+			//processing any incoming faults.			
 			RMMsgContext rmMsgCtx = MsgInitializer.initializeMessage(msgCtx);
+
+			//This is responsible for Sandesha2 specific 
+			FaultManager.processMessagesForFaults(rmMsgCtx);
 
 			// validating the message
 			MessageValidator.validateMessage(rmMsgCtx, storageManager);

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java?view=diff&rev=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java Mon Feb 12 07:55:55 2007
@@ -284,6 +284,15 @@
 					log.debug("Exit: CreateSeqMsgProcessor::processInMessage " + Boolean.FALSE);				
 				return false;
 			} 
+				
+			// If we are SOAP12 and we have already processed the fault - rethrow the exception
+			if (createSeqRMMsg.getMessageContext().getProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME) != null) {
+					// throw the original exception
+					if (e instanceof AxisFault)
+						throw (AxisFault)e;
+					 
+					throw new SandeshaException(e);
+			}
 		}
 
 		if (log.isDebugEnabled())

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java?view=diff&rev=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java Mon Feb 12 07:55:55 2007
@@ -79,7 +79,7 @@
 			}
 		}
 
-		TerminateManager.terminateSendingSide (rmsBean, msgContext.isServerSide(), storageManager);
+		TerminateManager.terminateSendingSide (rmsBean, storageManager);
 		
 		// Stop this message travelling further through the Axis runtime
 		terminateResRMMsg.pause();

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=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java Mon Feb 12 07:55:55 2007
@@ -34,9 +34,17 @@
 import org.apache.axiom.soap.SOAPFaultValue;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.RelatesTo;
+import org.apache.axis2.client.async.Callback;
+import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.engine.AxisEngine;
+import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.util.CallbackReceiver;
 import org.apache.axis2.util.MessageContextBuilder;
+import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sandesha2.FaultData;
@@ -47,11 +55,17 @@
 import org.apache.sandesha2.client.SandeshaListener;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.security.SecurityManager;
+import org.apache.sandesha2.security.SecurityToken;
 import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
 import org.apache.sandesha2.storage.beans.RMDBean;
 import org.apache.sandesha2.storage.beans.RMSBean;
+import org.apache.sandesha2.storage.beans.SenderBean;
 import org.apache.sandesha2.wsrm.AcknowledgementRange;
 import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
+import org.apache.sandesha2.wsrm.SequenceFault;
 
 /**
  * Has logic to check for possible RM related faults and create it.
@@ -295,7 +309,7 @@
 
 		FaultData data = new FaultData();
 		if (SOAPVersion == Sandesha2Constants.SOAPVersion.v1_1)
-			data.setCode(SOAP11Constants.FAULT_CODE_RECEIVER);
+			data.setCode(SOAP11Constants.FAULT_CODE_SENDER);
 		else
 			data.setCode(SOAP12Constants.FAULT_CODE_SENDER);
 
@@ -489,20 +503,49 @@
 		
 	}
 	
-	private static void manageIncomingFault (AxisFault fault, MessageContext msgContext) {
+	private static void manageIncomingFault (AxisFault fault, RMMsgContext rmMsgCtx, SOAPFault faultPart) throws AxisFault {
 	
 		if (log.isErrorEnabled())
 			log.error(fault);
 		
-		SandeshaListener listner = (SandeshaListener) msgContext.getProperty(SandeshaClientConstants.SANDESHA_LISTENER);
+		SandeshaListener listner = (SandeshaListener) rmMsgCtx.getProperty(SandeshaClientConstants.SANDESHA_LISTENER);
 		if (listner!=null)
 			listner.onError(fault);
 		
+		// Get the SOAPVersion
+		SOAPFactory factory = (SOAPFactory) rmMsgCtx.getSOAPEnvelope().getOMFactory();		
+		String SOAPNamespaceValue = factory.getSoapVersionURI();
+		
+		String soapFaultSubcode = null;
+		if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(SOAPNamespaceValue)) {
+			// Log the fault
+			if (faultPart.getCode() != null && 
+					faultPart.getCode().getSubCode() != null &&
+					faultPart.getCode().getSubCode().getValue() != null)
+				soapFaultSubcode = faultPart.getCode().getSubCode().getValue().getText();
+		} else {
+			// Need to get the sequence part from the Header.
+			try {
+	      SequenceFault sequenceFault = (SequenceFault)rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE_FAULT);
+	      
+	      // If the sequence fault part is not null, then we have an RM specific fault.
+	      if (sequenceFault != null) {
+	      	soapFaultSubcode = sequenceFault.getFaultCode().getFaultCode();
+	      }
+      } catch (SandeshaException e) {
+      	if (log.isDebugEnabled()) 
+      		log.debug("Unable to process SequenceFault");
+      }
+		}
+		
+		if (Sandesha2Constants.SOAPFaults.Subcodes.CREATE_SEQUENCE_REFUSED.equals(soapFaultSubcode)) {
+			processCreateSequenceRefusedFault(rmMsgCtx, fault);
+		}
 	}
 	
-	public static void processMessagesForFaults (MessageContext msgContext) {
+	public static void processMessagesForFaults (RMMsgContext rmMsgCtx) throws AxisFault {
 		
-		SOAPEnvelope envelope = msgContext.getEnvelope();
+		SOAPEnvelope envelope = rmMsgCtx.getSOAPEnvelope();
 		if (envelope==null) 
 			return;
 		
@@ -512,7 +555,7 @@
 
 			// constructing the fault
 			AxisFault axisFault = getAxisFaultFromFromSOAPFault(faultPart);
-			manageIncomingFault (axisFault, msgContext);
+			manageIncomingFault (axisFault, rmMsgCtx, faultPart);
 		}
 
 	}
@@ -568,4 +611,111 @@
 		}
 	  return false;
   }
+	
+	/**
+	 * On receipt of a CreateSequenceRefused fault, terminate the sequence and notify any waiting
+	 * clients of the error.
+	 * @param fault 
+	 * @throws AxisFault 
+	 */
+	private static void processCreateSequenceRefusedFault(RMMsgContext rmMsgCtx, AxisFault fault) throws AxisFault {
+		if (log.isDebugEnabled())
+			log.debug("Enter: FaultManager::processCreateSequenceRefusedFault");
+
+		ConfigurationContext configCtx = rmMsgCtx.getMessageContext().getConfigurationContext();
+
+		StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configCtx, configCtx
+				.getAxisConfiguration());
+
+		RelatesTo relatesTo = rmMsgCtx.getMessageContext().getRelatesTo();
+		String createSeqMsgId = null;
+		if (relatesTo != null) {
+			createSeqMsgId = relatesTo.getValue();
+		} else {
+			// Work out the related message from the operation context
+			OperationContext context = rmMsgCtx.getMessageContext().getOperationContext();
+			MessageContext createSeq = context.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+			if(createSeq != null) createSeqMsgId = createSeq.getMessageID();
+		}
+		if(createSeqMsgId == null) {
+			String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.relatesToNotAvailable);
+			log.error(message);
+			throw new SandeshaException(message);
+		}
+
+		SenderBeanMgr retransmitterMgr = storageManager.getSenderBeanMgr();
+		RMSBeanMgr rmsBeanMgr = storageManager.getRMSBeanMgr();
+
+		RMSBean rmsBean = rmsBeanMgr.retrieve(createSeqMsgId);
+		if (rmsBean == null) {
+			String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.createSeqEntryNotFound);
+			log.debug(message);
+			throw new SandeshaException(message);
+		}
+
+		// Check that the create sequence response message proves possession of the correct token
+		String tokenData = rmsBean.getSecurityTokenData();
+		if(tokenData != null) {
+			SecurityManager secManager = SandeshaUtil.getSecurityManager(configCtx);
+			MessageContext crtSeqResponseCtx = rmMsgCtx.getMessageContext();
+			OMElement body = crtSeqResponseCtx.getEnvelope().getBody();
+			SecurityToken token = secManager.recoverSecurityToken(tokenData);
+			secManager.checkProofOfPossession(token, body, crtSeqResponseCtx);
+		}
+
+		String internalSequenceId = rmsBean.getInternalSequenceID();
+		if (internalSequenceId == null || "".equals(internalSequenceId)) {
+			String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.tempSeqIdNotSet);
+			log.debug(message);
+			throw new SandeshaException(message);
+		}
+		rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.INTERNAL_SEQUENCE_ID,internalSequenceId);
+
+		SenderBean createSequenceSenderBean = retransmitterMgr.retrieve(createSeqMsgId);
+		if (createSequenceSenderBean == null)
+			throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.createSeqEntryNotFound));
+
+		// deleting the create sequence entry.
+		retransmitterMgr.delete(createSeqMsgId);
+						
+		// Locate and update all of the messages for this sequence, now that we know
+		// the sequence id.
+		SenderBean target = new SenderBean();
+		target.setInternalSequenceID(internalSequenceId);
+		target.setSend(false);
+		
+		Iterator iterator = retransmitterMgr.find(target).iterator();
+		while (iterator.hasNext()) {
+			SenderBean tempBean = (SenderBean) iterator.next();
+
+			String messageStoreKey = tempBean.getMessageContextRefKey();
+			
+			// 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))
+        {
+          Callback callback = ((CallbackReceiver)msgReceiver).lookupCallback(context.getMessageID());
+          if (callback != null)
+          {
+            callback.onError(fault);
+          }
+        }
+      }
+		}
+		
+		rmMsgCtx.pause();
+		
+		// Cleanup sending side.
+		if (log.isDebugEnabled())
+			log.debug("Terminating sending sequence " + rmsBean);
+		TerminateManager.terminateSendingSide(rmsBean, storageManager);
+
+		if (log.isDebugEnabled())
+			log.debug("Exit: FaultManager::processCreateSequenceRefusedFault");
+	}
 }

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java?view=diff&rev=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java Mon Feb 12 07:55:55 2007
@@ -144,7 +144,7 @@
 
 		// Already an active transaction, so don't want a new one
 		SequenceReport report = SandeshaClient.getOutgoingSequenceReport(internalSequenceID, configurationContext, false);
-		TerminateManager.timeOutSendingSideSequence(internalSequenceID, false, storageManager);
+		TerminateManager.timeOutSendingSideSequence(internalSequenceID, storageManager);
 
 		SandeshaListener listener = (SandeshaListener) messageContext
 				.getProperty(SandeshaClientConstants.SANDESHA_LISTENER);

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java?view=diff&rev=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java Mon Feb 12 07:55:55 2007
@@ -153,6 +153,11 @@
 			rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.MESSAGE_PENDING,
 					elements.getMessagePending());
 		}
+		
+		if (elements.getSequenceFault() != null) {
+			rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.SEQUENCE_FAULT,
+					elements.getSequenceFault());
+		}
 
 		rmMsgContext.setRMNamespaceValue(rmNamespace);
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java?view=diff&rev=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java Mon Feb 12 07:55:55 2007
@@ -234,28 +234,27 @@
 	 * @param sequenceID
 	 * @throws SandeshaException
 	 */
-	public static void terminateSendingSide(RMSBean rmsBean,
-			boolean serverSide, StorageManager storageManager) throws SandeshaException {
+	public static void terminateSendingSide(RMSBean rmsBean, 
+			StorageManager storageManager) throws SandeshaException {
 
 		// Indicate that the sequence is terminated
 		rmsBean.setTerminated(true);		
 		storageManager.getRMSBeanMgr().update(rmsBean);
 		
-		cleanSendingSideData (rmsBean.getInternalSequenceID(), serverSide, storageManager);
+		cleanSendingSideData (rmsBean.getInternalSequenceID(), storageManager);
 	}
 
 	public static void timeOutSendingSideSequence(String internalSequenceId,
-			boolean serverside, StorageManager storageManager) throws SandeshaException {
+			StorageManager storageManager) throws SandeshaException {
 
 		RMSBean rmsBean = SandeshaUtil.getRMSBeanFromInternalSequenceId(storageManager, internalSequenceId);
 		rmsBean.setTimedOut(true);
 		storageManager.getRMSBeanMgr().update(rmsBean);
 
-		cleanSendingSideData(internalSequenceId, serverside, storageManager);
+		cleanSendingSideData(internalSequenceId, storageManager);
 	}
 
-	private static void cleanSendingSideData(String internalSequenceId,
-			boolean serverSide, StorageManager storageManager) throws SandeshaException {
+	private static void cleanSendingSideData(String internalSequenceId, StorageManager storageManager) throws SandeshaException {
 
 		SenderBeanMgr retransmitterBeanMgr = storageManager.getSenderBeanMgr();
 

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=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java Mon Feb 12 07:55:55 2007
@@ -326,8 +326,7 @@
 				String sequenceID = terminateSequence.getIdentifier().getIdentifier();
 
 				RMSBean rmsBean = SandeshaUtil.getRMSBeanFromSequenceId(storageManager, sequenceID);
-				TerminateManager.terminateSendingSide(rmsBean, msgCtx.isServerSide(),
-						storageManager);
+				TerminateManager.terminateSendingSide(rmsBean, storageManager);
 				
 				transaction.commit();
 			}

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java?view=diff&rev=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java Mon Feb 12 07:55:55 2007
@@ -59,6 +59,7 @@
 	private UsesSequenceSTR usesSequenceSTR = null;
 	private MessagePending messagePending = null;
 	private MakeConnection makeConnection = null;
+	private SequenceFault sequenceFault = null;
 	private String rmNamespaceValue = null;
 	
 	public RMElements () {
@@ -198,6 +199,15 @@
 			messagePending = new MessagePending (rmNamespaceValue);
 			messagePending.fromOMElement(messagePendingElement);
 		}
+		
+		OMElement sequenceFaultElement = envelope.getHeader().getFirstChildWithName(
+				new QName (rmNamespaceValue,
+						Sandesha2Constants.WSRM_COMMON.SEQUENCE_FAULT));
+		if (sequenceFaultElement!=null) {
+			sequenceFault = new SequenceFault (rmNamespaceValue);
+			sequenceFault.fromOMElement(sequenceFaultElement);
+		}
+
 	}
 
 	public SOAPEnvelope toSOAPEnvelope(SOAPEnvelope envelope) throws AxisFault  {
@@ -391,5 +401,9 @@
 
 	public MessagePending getMessagePending() {
 		return messagePending;
+	}
+	
+	public SequenceFault getSequenceFault() {
+		return sequenceFault;
 	}
 }

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceFault.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceFault.java?view=diff&rev=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceFault.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceFault.java Mon Feb 12 07:55:55 2007
@@ -23,6 +23,7 @@
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.sandesha2.Sandesha2Constants;
 import org.apache.sandesha2.SandeshaException;
@@ -33,7 +34,7 @@
  * Adds the SequenceFault header block.
  */
 
-public class SequenceFault implements IOMRMElement {
+public class SequenceFault implements IOMRMPart {
 	
 	private FaultCode faultCode;
 	
@@ -52,20 +53,13 @@
 		return namespaceValue;
 	}
 
-	public Object fromOMElement(OMElement body) throws OMException,SandeshaException {
+	public Object fromOMElement(OMElement sequenceFaultPart) throws OMException,SandeshaException {
 
-		if (body == null || !(body instanceof SOAPHeader))
-			throw new OMException(
-					SandeshaMessageHelper.getMessage(
-							SandeshaMessageKeys.seqFaultCannotBeExtractedToNonHeader));
-
-		OMElement sequenceFaultPart = body.getFirstChildWithName(new QName(
-				namespaceValue, Sandesha2Constants.WSRM_COMMON.SEQUENCE_FAULT));
 
 		if (sequenceFaultPart == null)
 			throw new OMException(SandeshaMessageHelper.getMessage(
 					SandeshaMessageKeys.noSeqFaultInElement,
-					body.toString()));
+					null));
 
 		OMElement faultCodePart = sequenceFaultPart
 				.getFirstChildWithName(new QName(namespaceValue,Sandesha2Constants.WSRM_COMMON.FAULT_CODE));
@@ -114,5 +108,17 @@
 		
 		return false;
 	}
+
+	public void toSOAPEnvelope(SOAPEnvelope envelope) {
+		SOAPHeader header = envelope.getHeader();
+		
+		//detach if already exist.
+		OMElement elem = header.getFirstChildWithName(new QName(namespaceValue,
+				Sandesha2Constants.WSRM_COMMON.SEQUENCE_FAULT));
+		if (elem!=null)
+			elem.detach();
+		
+		toOMElement(header);
+  }
 
 }

Modified: webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedFaultTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedFaultTest.java?view=diff&rev=506509&r1=506508&r2=506509
==============================================================================
--- webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedFaultTest.java (original)
+++ webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedFaultTest.java Mon Feb 12 07:55:55 2007
@@ -47,7 +47,7 @@
 	    + "repos" + File.separator + "server" + File.separator
 	    + "server_axis2.xml";
 	
-	private ConfigurationContext serverConfigContext;
+	private static ConfigurationContext serverConfigContext;
 	
 	public CreateSequenceRefusedFaultTest() {
 		super("CreateSequenceProcessorTest");
@@ -63,7 +63,7 @@
 	 * 
 	 * @throws Exception
 	 */
-	public void testInvalidAcksToSOAPFault() throws Exception {
+	public void testCreateSequenceSOAPFault() throws Exception {
 
     // Open a connection to the endpoint
 		HttpURLConnection connection = 
@@ -147,4 +147,5 @@
 		return outputStream.toByteArray();
 	}
 }
+
 

Added: webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedInboundFaultTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedInboundFaultTest.java?view=auto&rev=506509
==============================================================================
--- webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedInboundFaultTest.java (added)
+++ webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedInboundFaultTest.java Mon Feb 12 07:55:55 2007
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sandesha2.faulttests;
+
+import java.io.File;
+
+import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.ConfigurationContextFactory;
+import org.apache.sandesha2.SandeshaTestCase;
+import org.apache.sandesha2.client.SandeshaClient;
+import org.apache.sandesha2.client.SandeshaClientConstants;
+import org.apache.sandesha2.client.SequenceReport;
+import org.apache.sandesha2.util.SandeshaUtil;
+
+public class CreateSequenceRefusedInboundFaultTest extends SandeshaTestCase {
+	
+	private static boolean startedServer = false;
+	
+	public CreateSequenceRefusedInboundFaultTest() {
+		super("CreateSequenceRefusedInboundFaultTest");
+	}
+
+	public void setUp() throws Exception {
+		super.setUp();
+		String repoPath = "target" + File.separator + "repos" + File.separator + "server";
+		String axis2_xml = "target" + File.separator + "repos" + File.separator + "server" + File.separator + "server_axis2.xml";
+
+		if (!startedServer) {
+			startServer(repoPath, axis2_xml);
+			startedServer = true;
+		}
+	}
+	
+	public void tearDown() {
+		
+	}
+	
+	public void testSOAP11CreateSequenceRefusedInboundFault () throws Exception {
+		
+		runTest(false);
+	}
+
+	public void testSOAP12CreateSequenceRefusedInboundFault () throws Exception {
+		runTest(true);
+	}
+
+	private void runTest(boolean runSoap12) throws Exception{
+		String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
+		
+		String repoPath = "target" + File.separator + "repos" + File.separator + "client";
+		String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
+		
+		ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
+
+		Options clientOptions = new Options ();
+		clientOptions.setAction(echoAction);
+		clientOptions.setTo(new EndpointReference (to));
+
+		//setting the SOAP version as 1.2
+		if (runSoap12)
+			clientOptions.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+
+		String sequenceKey = SandeshaUtil.getUUID();
+		clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
+		
+		ServiceClient serviceClient = new ServiceClient (configContext,null);
+		
+		// Set a bad acks to so the CreateSequence will be refused.
+		String acksTo = AddressingConstants.Final.WSA_NONE_URI;
+		clientOptions.setProperty(SandeshaClientConstants.AcksTo,acksTo);
+		
+		clientOptions.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+		clientOptions.setUseSeparateListener(true);		
+		clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, "true");
+		serviceClient.setOptions(clientOptions);		
+		
+		TestCallback callback1 = new TestCallback ("Callback 1");
+		serviceClient.sendReceiveNonBlocking (getEchoOMBlock("echo1",sequenceKey),callback1);
+        
+		long limit = System.currentTimeMillis() + waitTime;
+		Error lastError = null;
+		while(System.currentTimeMillis() < limit) {
+			Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+			
+			try {
+		        //assertions for the out sequence.
+				SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+				assertEquals(sequenceReport.getSequenceStatus(),SequenceReport.SEQUENCE_STATUS_TERMINATED);
+				assertEquals(sequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_OUT);
+				
+				assertTrue(callback1.isErrorRported());
+				assertEquals(callback1.getResult(),null);
+				
+				lastError = null;
+				break;
+			} catch(Error e) {
+				lastError = e;
+			}
+		}
+
+		if(lastError != null) throw lastError;
+
+		configContext.getListenerManager().stop();
+		serviceClient.cleanup();
+
+	}
+	
+}
+



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org