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