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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to