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