You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ch...@apache.org on 2006/10/17 21:17:26 UTC
svn commit: r465007 - in
/webservices/sandesha/trunk/java/src/org/apache/sandesha2:
Sandesha2Constants.java handlers/SandeshaGlobalInHandler.java
msgprocessors/ApplicationMsgProcessor.java util/FaultManager.java
workers/SenderWorker.java
Author: chamikara
Date: Tue Oct 17 12:17:25 2006
New Revision: 465007
URL: http://svn.apache.org/viewvc?view=rev&rev=465007
Log:
Applied the patch from Andrew for Sandesha2-34.
Did corrections to the RM fault processing logic to allow handling RM faults
in the handlers and to let the Application level faults go through.
A correction to the MakeConnection action value.
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java?view=diff&rev=465007&r1=465006&r2=465007
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java Tue Oct 17 12:17:25 2006
@@ -97,7 +97,8 @@
String SOAP_ACTION_CLOSE_SEQUENCE = "http://docs.oasis-open.org/ws-rx/wsrm/200608/CloseSequence";
- String SOAP_ACTION_MAKE_CONNECTION = "http://docs.oasisopen.org/ws-rx/wsrm/200608/MakeConnection";
+ String SOAP_ACTION_MAKE_CONNECTION = "http://docs.oasis-open.org/ws-rx/wsrm/200608/MakeConnection";
+
}
}
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?view=diff&rev=465007&r1=465006&r2=465007
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java Tue Oct 17 12:17:25 2006
@@ -23,6 +23,9 @@
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFault;
+import org.apache.axiom.soap.SOAPFaultCode;
+import org.apache.axiom.soap.SOAPFaultSubCode;
+import org.apache.axiom.soap.SOAPFaultValue;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.RelatesTo;
import org.apache.axis2.context.ConfigurationContext;
@@ -44,6 +47,7 @@
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
+import org.apache.sandesha2.util.FaultManager;
import org.apache.sandesha2.util.MsgInitializer;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.wsrm.Sequence;
@@ -116,43 +120,26 @@
SOAPFault faultPart = envelope.getBody().getFault();
if (faultPart != null) {
- RelatesTo relatesTo = msgContext.getRelatesTo();
- if (relatesTo != null) {
- String relatesToValue = relatesTo.getValue();
- OperationContext operationContext = configContext.getOperationContext(relatesToValue);
- if (operationContext != null) {
- MessageContext requestMessage = operationContext
- .getMessageContext(OperationContextFactory.MESSAGE_LABEL_OUT_VALUE);
- if (requestMessage != null) {
- if (SandeshaUtil.isRetriableOnFaults(requestMessage)) {
-
- SandeshaListener faultCallback = (SandeshaListener) operationContext
- .getProperty(SandeshaClientConstants.SANDESHA_LISTENER);
- if (faultCallback != null) {
-
- // constructing the fault
- AxisFault axisFault = getAxisFaultFromFromSOAPFault(faultPart);
-
- // reporting the fault
- // log.error(axisFault);
- if (faultCallback != null) {
- faultCallback.onError(axisFault);
- }
-
- }
-
- // stopping the fault from going further and
- // getting dispatched
- msgContext.pause(); // TODO let this go in the
- // last try
- if (log.isDebugEnabled())
- log.debug("Exit: SandeshaGlobalInHandler::invoke");
-
- return;
- }
- }
- }
+
+ // constructing the fault
+ AxisFault axisFault = getAxisFaultFromFromSOAPFault(faultPart);
+
+ //If this is a RM related fault. I.e. one that was defined in the WSRM spec. It will be
+ //handled at this point.
+ SOAPFaultCode faultCode = axisFault.getFaultCodeElement();
+ SOAPFaultSubCode faultSubCode = faultCode!=null?faultCode.getSubCode():null;
+ SOAPFaultValue faultSubcodeValue = faultSubCode!=null?faultSubCode.getValue():null;
+ String subCodeText = faultSubcodeValue!=null?faultSubcodeValue.getText():null;
+
+ if (subCodeText!=null && FaultManager.isRMFault(subCodeText)) {
+ //handling the fault here and pausing the message.
+
+ FaultManager faultManager = new FaultManager ();
+ faultManager.manageIncomingRMFault (axisFault, msgContext);
+
+ msgContext.pause();
}
+
}
// Quitting the message with minimum processing if not intended for
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=465007&r1=465006&r2=465007
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Tue Oct 17 12:17:25 2006
@@ -225,20 +225,25 @@
msgsBean.setValue(messagesStr);
}
- if (msgNoPresentInList(messagesStr, msgNo)
+ boolean msgNoPresentInList = msgNoPresentInList(messagesStr, msgNo);
+
+ if (msgNoPresentInList
&& (Sandesha2Constants.QOS.InvocationType.DEFAULT_INVOCATION_TYPE == Sandesha2Constants.QOS.InvocationType.EXACTLY_ONCE)) {
// this is a duplicate message and the invocation type is
// EXACTLY_ONCE.
rmMsgCtx.pause();
}
- if (messagesStr != null && !"".equals(messagesStr))
- messagesStr = messagesStr + "," + Long.toString(msgNo);
- else
- messagesStr = Long.toString(msgNo);
-
- msgsBean.setValue(messagesStr);
- seqPropMgr.update(msgsBean);
+ if (!msgNoPresentInList)
+ {
+ if (messagesStr != null && !"".equals(messagesStr))
+ messagesStr = messagesStr + "," + Long.toString(msgNo);
+ else
+ messagesStr = Long.toString(msgNo);
+
+ msgsBean.setValue(messagesStr);
+ seqPropMgr.update(msgsBean);
+ }
// Pause the messages bean if not the right message to invoke.
NextMsgBeanMgr mgr = storageManager.getNextMsgBeanMgr();
@@ -260,7 +265,7 @@
rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_ID,sequenceId);
rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.MESSAGE_NUMBER,new Long (msgNo));
- if (inOrderInvocation) {
+ if (inOrderInvocation && !msgNoPresentInList) {
SequencePropertyBean incomingSequenceListBean = seqPropMgr.retrieve(
Sandesha2Constants.SequenceProperties.ALL_SEQUENCES,
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java?view=diff&rev=465007&r1=465006&r2=465007
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java Tue Oct 17 12:17:25 2006
@@ -464,5 +464,32 @@
SandeshaException fault = new SandeshaException("");
return fault;
}
+
+ public static boolean isRMFault (String faultSubcodeValue) {
+ if (faultSubcodeValue==null)
+ return false;
+
+ if (Sandesha2Constants.SOAPFaults.Subcodes.CREATE_SEQUENCE_REFUSED.equalsIgnoreCase (faultSubcodeValue) ||
+ Sandesha2Constants.SOAPFaults.Subcodes.INVALID_ACKNOWLEDGEMENT.equalsIgnoreCase (faultSubcodeValue) ||
+ Sandesha2Constants.SOAPFaults.Subcodes.LAST_MESSAGE_NO_EXCEEDED.equalsIgnoreCase (faultSubcodeValue) ||
+ Sandesha2Constants.SOAPFaults.Subcodes.MESSAGE_NUMBER_ROLEOVER.equalsIgnoreCase (faultSubcodeValue) ||
+ Sandesha2Constants.SOAPFaults.Subcodes.SEQUENCE_CLOSED.equalsIgnoreCase (faultSubcodeValue) ||
+ Sandesha2Constants.SOAPFaults.Subcodes.SEQUENCE_TERMINATED.equalsIgnoreCase (faultSubcodeValue) ||
+ Sandesha2Constants.SOAPFaults.Subcodes.UNKNOWN_SEQUENCE.equalsIgnoreCase (faultSubcodeValue) ) {
+
+ return true;
+ }
+
+ return false;
+
+ }
+
+ public void manageIncomingRMFault (AxisFault fault, MessageContext msgContext) {
+
+ //TODO implement code to handle the rm fault
+
+ log.error(fault);
+
+ }
}
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=465007&r1=465006&r2=465007
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java Tue Oct 17 12:17:25 2006
@@ -169,11 +169,9 @@
successfullySent = true;
} catch (Exception e) {
- // TODO Auto-generated catch block
String message = SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.sendMsgError, e.toString());
log.error(message, e);
-
} finally {
transaction = storageManager.getTransaction();
msgCtx.setProperty(Sandesha2Constants.WITHIN_TRANSACTION,
@@ -311,7 +309,7 @@
SOAPEnvelope resenvelope = null;
try {
- resenvelope = TransportUtils.createSOAPMessage(msgCtx, msgCtx.getEnvelope().getNamespace().getName());
+ resenvelope = TransportUtils.createSOAPMessage(msgCtx, msgCtx.getEnvelope().getNamespace().getNamespaceURI());
} catch (AxisFault e) {
//Cannot find a valid SOAP envelope.
if (log.isDebugEnabled()) {
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org