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/04/04 10:48:10 UTC

svn commit: r391249 - in /webservices/sandesha/trunk/src/org/apache/sandesha2: ./ client/ handlers/ msgprocessors/ util/ workers/

Author: chamikara
Date: Tue Apr  4 01:48:07 2006
New Revision: 391249

URL: http://svn.apache.org/viewcvs?rev=391249&view=rev
Log:
Added the RMFaultCallback feature, which can be used to programatically handle faults that come due to RM control messages.

Added:
    webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMFaultCallback.java
Modified:
    webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/client/Sandesha2ClientAPI.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java Tue Apr  4 01:48:07 2006
@@ -189,7 +189,9 @@
 		
 		int TERMINATE_SEQ_RESPONSE = 9;
 
-		int MAX_MESSAGE_TYPE = 9;
+		int FAULT_MSG = 10;
+		
+		int MAX_MESSAGE_TYPE = 10;
 	}
 
 	public interface MessageParts {

Added: webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMFaultCallback.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMFaultCallback.java?rev=391249&view=auto
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMFaultCallback.java (added)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMFaultCallback.java Tue Apr  4 01:48:07 2006
@@ -0,0 +1,26 @@
+/*
+ * Copyright 1999-2004 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.client;
+
+import org.apache.axis2.AxisFault;
+
+public abstract class RMFaultCallback {
+
+	public abstract void onError(AxisFault fault);
+
+}

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/client/Sandesha2ClientAPI.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/client/Sandesha2ClientAPI.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/client/Sandesha2ClientAPI.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/client/Sandesha2ClientAPI.java Tue Apr  4 01:48:07 2006
@@ -74,6 +74,7 @@
 	public static String MESSAGE_NUMBER = "Sandesha2ClientAPIPropertyMessageNumber";
 	public static String RM_SPEC_VERSION = "Sandesha2ClientAPIPropertyRMSpecVersion";
 	public static String DUMMY_MESSAGE = "Sandesha2ClientAPIDummyMessage"; //If this property is set, even though this message will invoke the RM handlers, this will not be sent as an actual application message
+	public static String RM_FAULT_CALLBACK = "Sandesha2ClientAPIRMFaultCallback";
 	public static String VALUE_TRUE = "true";
 	public static String VALUE_FALSE = "false";
 	

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java Tue Apr  4 01:48:07 2006
@@ -27,14 +27,20 @@
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.context.OperationContextFactory;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.handlers.AbstractHandler;
 import org.apache.axiom.soap.SOAPBody;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFault;
+import org.apache.axiom.soap.SOAPFaultReason;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sandesha2.RMMsgContext;
 import org.apache.sandesha2.Sandesha2Constants;
 import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.client.RMFaultCallback;
+import org.apache.sandesha2.client.Sandesha2ClientAPI;
 import org.apache.sandesha2.msgprocessors.ApplicationMsgProcessor;
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
@@ -58,6 +64,56 @@
 
 	public void invoke(MessageContext msgContext) throws AxisFault {
 
+		ConfigurationContext configContext = msgContext.getConfigurationContext();
+		if ( configContext==null)
+			throw new AxisFault ("Configuration context is not set");
+		
+		SOAPEnvelope envelope = msgContext.getEnvelope();
+		if (envelope==null)
+			throw new SandeshaException ("SOAP envelope is not set");
+		
+		//processing faults.
+		//Had to do this before dispatching. A fault message comes with the relatesTo part. So this will
+		//fill the opContext of te req/res message. But RM keeps retransmitting. So RM has to report the 
+		//error and stop this fault being dispatched as the response message.
+		
+		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)){
+							
+							RMFaultCallback faultCallback = (RMFaultCallback) operationContext.getProperty(Sandesha2ClientAPI.RM_FAULT_CALLBACK);
+							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
+							return;
+						}
+					}
+				}
+			}
+		}
+		
 		//Quitting the message with minimum processing if not intended for RM.
 		boolean isRMGlobalMessage = SandeshaUtil.isRMGlobalMessage(msgContext);
 		if (!isRMGlobalMessage) {
@@ -237,4 +293,17 @@
 	public QName getName() {
 		return new QName(Sandesha2Constants.GLOBAL_IN_HANDLER_NAME);
 	}
+	
+	private AxisFault getAxisFaultFromFromSOAPFault (SOAPFault faultPart) {
+		SOAPFaultReason reason = faultPart.getReason();
+		
+		AxisFault axisFault = null;
+		if (reason!=null)
+			axisFault = new AxisFault (reason.getText());
+		else
+			axisFault = new AxisFault ("");
+		
+		return axisFault;
+	}
+	
 }

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java Tue Apr  4 01:48:07 2006
@@ -53,6 +53,8 @@
 
 	public void invoke(MessageContext msgCtx) throws AxisFault {
 	
+		
+		
 		ConfigurationContext context = msgCtx.getConfigurationContext();
 		if (context == null) {
 			String message = "ConfigurationContext is null";
@@ -81,8 +83,7 @@
 			throw new AxisFault(message);
 		}
 		
-		MsgProcessor msgProcessor = MsgProcessorFactory
-				.getMessageProcessor(rmMsgCtx.getMessageType());
+		MsgProcessor msgProcessor = MsgProcessorFactory.getMessageProcessor (rmMsgCtx);
 
 		try {
 			if (msgProcessor!=null)

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java Tue Apr  4 01:48:07 2006
@@ -131,7 +131,7 @@
 			} else if (!msgCtx.isServerSide()) //if client side.
 			    msgProcessor = new ApplicationMsgProcessor ();
 		}else  {
-			msgProcessor = MsgProcessorFactory.getMessageProcessor(messageType);
+			msgProcessor = MsgProcessorFactory.getMessageProcessor(rmMsgCtx);
 		}
 		
 		if (msgProcessor!=null)

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Tue Apr  4 01:48:07 2006
@@ -43,6 +43,7 @@
 import org.apache.sandesha2.Sandesha2Constants;
 import org.apache.sandesha2.SandeshaException;
 import org.apache.sandesha2.SpecSpecificConstants;
+import org.apache.sandesha2.client.RMFaultCallback;
 import org.apache.sandesha2.client.Sandesha2ClientAPI;
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.Transaction;
@@ -435,6 +436,15 @@
 		
 		MessageContext msgContext = rmMsgCtx.getMessageContext();
 		ConfigurationContext configContext = msgContext .getConfigurationContext();
+		
+		//setting the Fault callback		
+		RMFaultCallback faultCallback = (RMFaultCallback) msgContext.getOptions().getProperty(Sandesha2ClientAPI.RM_FAULT_CALLBACK);
+		if (faultCallback!=null) {
+			OperationContext operationContext = msgContext.getOperationContext();
+			if (operationContext!=null) {
+				operationContext.setProperty(Sandesha2ClientAPI.RM_FAULT_CALLBACK,faultCallback);
+			}
+		}
 		
 		//retrieving the the storage manager
 		StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configContext);

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java Tue Apr  4 01:48:07 2006
@@ -23,6 +23,7 @@
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.util.Utils;
 import org.apache.commons.logging.Log;
@@ -31,6 +32,8 @@
 import org.apache.sandesha2.Sandesha2Constants;
 import org.apache.sandesha2.SandeshaException;
 import org.apache.sandesha2.SpecSpecificConstants;
+import org.apache.sandesha2.client.RMFaultCallback;
+import org.apache.sandesha2.client.Sandesha2ClientAPI;
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.Transaction;
 import org.apache.sandesha2.storage.beanmanagers.CreateSeqBeanMgr;
@@ -58,7 +61,6 @@
 	
 	public void processInMessage(RMMsgContext createSeqRMMsg)
 			throws SandeshaException {
-
 		
 		MessageContext createSeqMsg = createSeqRMMsg.getMessageContext();
 		CreateSequence createSeqPart = (CreateSequence) createSeqRMMsg.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ);
@@ -225,5 +227,15 @@
 	
 	public void processOutMessage(RMMsgContext rmMsgCtx) throws SandeshaException {
 		
+		MessageContext msgCtx = rmMsgCtx.getMessageContext();
+		
+		//adding the RM_FAULT_CALLBACK
+		RMFaultCallback faultCallback = (RMFaultCallback) msgCtx.getOptions().getProperty(Sandesha2ClientAPI.RM_FAULT_CALLBACK);
+		if (faultCallback!=null) {
+			OperationContext operationContext = msgCtx.getOperationContext();
+			if (operationContext!=null) {
+				operationContext.setProperty(Sandesha2ClientAPI.RM_FAULT_CALLBACK,faultCallback);
+			}
+		}
 	}
 }

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java Tue Apr  4 01:48:07 2006
@@ -17,6 +17,7 @@
 
 package org.apache.sandesha2.msgprocessors;
 
+import org.apache.sandesha2.RMMsgContext;
 import org.apache.sandesha2.Sandesha2Constants;
 
 /**
@@ -27,8 +28,11 @@
 
 public class MsgProcessorFactory {
 
-	public static MsgProcessor getMessageProcessor(int msgType) {
-		switch (msgType) {
+	public static MsgProcessor getMessageProcessor(RMMsgContext rmMessageContext) {
+		
+		int messageType = rmMessageContext.getMessageType();
+		
+		switch (messageType) {
 		case (Sandesha2Constants.MessageTypes.CREATE_SEQ):
 			return new CreateSeqMsgProcessor();
 		case (Sandesha2Constants.MessageTypes.TERMINATE_SEQ):

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java Tue Apr  4 01:48:07 2006
@@ -36,7 +36,6 @@
 		
 		
 		//TODO add processing logic
-		System.out.println("");
 		
 		terminateResRMMsg.pause();
 	}

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java Tue Apr  4 01:48:07 2006
@@ -35,6 +35,7 @@
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.client.Options;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.MessageContextConstants;
@@ -395,6 +396,50 @@
 		return rmGlobalMsg;
 	}
 
+	// RM will retry sending the message even if a fault arrive for following message types.
+	public static boolean isRetriableOnFaults(MessageContext msgCtx) {
+		boolean rmGlobalMsg = false;
+
+		String action = msgCtx.getWSAAction();
+//		SOAPEnvelope env = msgCtx.getEnvelope();
+//		SOAPHeader header = null;
+//		if (env != null)
+//			header = env.getHeader();
+//		else {
+//			log.error("SOAP envelope is null");
+//			return false;
+//		}
+
+		// TODO make this spec indipendent
+
+//		OMElement sequenceElem = null;
+//		if (header != null)
+//			sequenceElem = header.getFirstChildWithName(new QName(Sandesha2Constants.SPEC_2005_02.NS_URI,
+//					Sandesha2Constants.WSRM_COMMON.SEQUENCE));
+//
+//		if (sequenceElem == null)
+//			sequenceElem = header.getFirstChildWithName(new QName(Sandesha2Constants.SPEC_2005_10.NS_URI,
+//					Sandesha2Constants.WSRM_COMMON.SEQUENCE));
+//
+//		if (sequenceElem != null)
+//			rmGlobalMsg = true;
+
+
+		if (Sandesha2Constants.SPEC_2005_02.Actions.ACTION_CREATE_SEQUENCE.equals(action))
+			rmGlobalMsg = true;
+
+		if (Sandesha2Constants.SPEC_2005_10.Actions.ACTION_CREATE_SEQUENCE.equals(action))
+			rmGlobalMsg = true;
+
+//		if (Sandesha2Constants.SPEC_2005_10.Actions.ACTION_TERMINATE_SEQUENCE.equals(action))
+//			rmGlobalMsg = true;
+//
+//		if (Sandesha2Constants.SPEC_2005_10.Actions.ACTION_CLOSE_SEQUENCE.equals(action))
+//			rmGlobalMsg = true;
+
+		return rmGlobalMsg;
+	}
+	
 	public static MessageContext createNewRelatedMessageContext(RMMsgContext referenceRMMessage, AxisOperation operation)
 			throws SandeshaException {
 		try {
@@ -405,6 +450,16 @@
 			MessageContext newMessageContext = new MessageContext();
 			newMessageContext.setConfigurationContext(configContext);
 
+//			Options referenceMsgOptions = referenceMessage.getOptions();
+//			Options newOptions = null;
+//			if (referenceMsgOptions!=null)
+//				newOptions = new Options (referenceMsgOptions);
+//			else
+			
+			Options newOptions = new Options ();
+			
+			newMessageContext.setOptions(newOptions);
+			
 			if (referenceMessage.getAxisServiceGroup() != null) {
 				newMessageContext.setAxisServiceGroup(referenceMessage.getAxisServiceGroup());
 				newMessageContext.setServiceGroupContext(referenceMessage.getServiceGroupContext());
@@ -826,7 +881,7 @@
 				SOAPFactory soapFactory = new SOAP11Factory();
 
 				builder = new StAXOMBuilder(xmlreader);
-				builder.setOmbuilderFactory(soapFactory);
+				builder.setOMBuilderFactory(soapFactory);
 				envelope = soapFactory.getDefaultEnvelope();
 				envelope.getBody().addChild(builder.getDocumentElement());
 

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java?rev=391249&r1=391248&r2=391249&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java Tue Apr  4 01:48:07 2006
@@ -22,6 +22,7 @@
 
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFault;
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axis2.AxisFault;
@@ -328,7 +329,6 @@
 				
 				if (isFaultEnvelope(resenvelope)) {
 					engine.receiveFault(responseMessageContext);
-					System.out.println("Sender Got a fault");
 				}else {
 					engine.receive(responseMessageContext);
 				}
@@ -358,23 +358,12 @@
 		return false;
 	}
 	
-	private boolean isFaultEnvelope (SOAPEnvelope envelope) throws SandeshaException {
-		SOAPHeader header = envelope.getHeader();
-		
-		OMElement actionElement = header.getFirstChildWithName(new QName (AddressingConstants.Final.WSA_NAMESPACE,AddressingConstants.WSA_ACTION));
-		if (actionElement==null)
-			actionElement = header.getFirstChildWithName(new QName (AddressingConstants.Submission.WSA_NAMESPACE,AddressingConstants.WSA_ACTION));
-		
-		String action = actionElement.getText().trim();
-		
-		if (action==null)
-			throw new SandeshaException ("Given envelope does not contain a wsa:action");
-		
-		if (action.equals(AddressingConstants.Final.WSA_FAULT_ACTION)
-				|| action.equals("http://schemas.xmlsoap.org/ws/2004/08/addressing/fault"))
+	private boolean isFaultEnvelope (SOAPEnvelope envelope) throws SandeshaException {		
+		SOAPFault fault = envelope.getBody().getFault();
+		if (fault!=null)
 			return true;
-		
-		return false;
+		else
+			return false;
 	}
 	
 }



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