You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by ch...@apache.org on 2006/02/09 07:17:19 UTC

svn commit: r376202 - in /webservices/sandesha/trunk/src/org/apache/sandesha2: SandeshaException.java util/RMMsgCreator.java util/SandeshaUtil.java workers/Sender.java

Author: chamikara
Date: Wed Feb  8 22:17:17 2006
New Revision: 376202

URL: http://svn.apache.org/viewcvs?rev=376202&view=rev
Log:
Bug fixes

Modified:
    webservices/sandesha/trunk/src/org/apache/sandesha2/SandeshaException.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.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/SandeshaException.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/SandeshaException.java?rev=376202&r1=376201&r2=376202&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/SandeshaException.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/SandeshaException.java Wed Feb  8 22:17:17 2006
@@ -36,4 +36,8 @@
 		super (e);
 	}
 	
+	public SandeshaException (String message,Exception e) {
+		super (message,e);
+	}
+	
 }

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java?rev=376202&r1=376201&r2=376202&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java Wed Feb  8 22:17:17 2006
@@ -31,6 +31,7 @@
 import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.description.AxisOperationFactory;
+import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.description.ParameterImpl;
 import org.apache.commons.logging.Log;
@@ -107,7 +108,6 @@
 				throw new SandeshaException(e.getMessage());
 			}
 		}
-
 	}
 
 	private static void finalizeCreation(MessageContext relatedMessage,
@@ -269,6 +269,7 @@
 
 		AxisOperation createSeqOperation = createSeqmsgContext
 				.getAxisOperation();
+		
 		createSeqOperation.setName(new QName("CreateSequenceOperation"));
 		if (appMsgOperationDesc != null) {
 			createSeqOperation.setPhasesOutFlow(appMsgOperationDesc
@@ -415,7 +416,7 @@
 				terminateOperation.setPhasesOutFaultFlow(outPhases);
 			}
 		}
-
+		
 		SOAPEnvelope envelope = factory.getDefaultEnvelope();
 		terminateRMMessage.setSOAPEnvelop(envelope);
 
@@ -428,7 +429,10 @@
 				terminateSequencePart);
 
 		finalizeCreation(referenceMessage, terminateMessage);
-
+		
+		terminateMessage.setProperty(MessageContext.TRANSPORT_IN,null);   //no need for an incoming transport for an terminate
+																		  //message. If this is put, sender will look for an response.
+		
 		return terminateRMMessage;
 	}
 

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=376202&r1=376201&r2=376202&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java Wed Feb  8 22:17:17 2006
@@ -539,6 +539,14 @@
 
 			newMessageContext.setAxisOperation(operation);
 
+			
+			//setting parent child relationships 
+			AxisService service = newMessageContext.getAxisService();
+			if (service!=null && operation!=null) {
+				service.addChild(operation);
+				operation.setParent(service);
+			}
+			
 			OperationContext operationContext = new OperationContext(operation);
 			newMessageContext.setOperationContext(operationContext);
 			operationContext.addMessageContext(newMessageContext);

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=376202&r1=376201&r2=376202&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java Wed Feb  8 22:17:17 2006
@@ -62,17 +62,19 @@
 public class Sender extends Thread {
 
 	private boolean runSender = false;
+
 	private boolean stopSenderAfterWork = false;
+
 	private ArrayList workingSequences = new ArrayList();
-	
+
 	private ConfigurationContext context = null;
-	
+
 	Log log = LogFactory.getLog(getClass());
 
 	public synchronized void stopSenderForTheSequence(String sequenceID) {
 		workingSequences.remove(sequenceID);
-		if (workingSequences.size()==0) {
-			//stopSenderAfterWork = true;
+		if (workingSequences.size() == 0) {
+			// stopSenderAfterWork = true;
 		}
 	}
 
@@ -88,14 +90,13 @@
 			storageManager = SandeshaUtil.getSandeshaStorageManager(context);
 		} catch (SandeshaException e2) {
 			// TODO Auto-generated catch block
-			log.debug ("ERROR: Could not start sender");
+			log.debug("ERROR: Could not start sender");
 			e2.printStackTrace();
 			return;
 		}
-		
+
 		while (runSender) {
-			
-			
+
 			try {
 				if (context == null) {
 					String message = "Can't continue the Sender. Context is null";
@@ -103,202 +104,214 @@
 					throw new SandeshaException(message);
 				}
 
-				Transaction pickMessagesToSendTransaction = storageManager.getTransaction(); //starting
-																			   // a
-																			   // new
-																			   // transaction
+				Transaction pickMessagesToSendTransaction = storageManager
+						.getTransaction(); // starting
+				// a
+				// new
+				// transaction
 
 				SenderBeanMgr mgr = storageManager.getRetransmitterBeanMgr();
 				Collection coll = mgr.findMsgsToSend();
-				if (coll.size()==0 && stopSenderAfterWork) {
+				if (coll.size() == 0 && stopSenderAfterWork) {
 					runSender = false;
 					pickMessagesToSendTransaction.commit();
 					continue;
 				}
-				
+
 				pickMessagesToSendTransaction.commit();
-				
+
 				Iterator iter = coll.iterator();
 
 				while (iter.hasNext()) {
 
 					SenderBean bean = (SenderBean) iter.next();
 					String key = (String) bean.getMessageContextRefKey();
-					MessageContext msgCtx = storageManager.retrieveMessageContext(key,context);
+					MessageContext msgCtx = storageManager
+							.retrieveMessageContext(key, context);
 
-					if (msgCtx==null) {
+					if (msgCtx == null) {
 						String message = "Message context is not present in the storage";
 					}
-					//sender will not send the message if following property is set and not true.
-					//But it will set if it is not set (null)
-					
-					//This is used to make sure that the mesage get passed the Sandesha2TransportSender.
-										
-					String qualifiedForSending = (String) msgCtx.getProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING);
-					if (qualifiedForSending!=null && !qualifiedForSending.equals(Sandesha2Constants.VALUE_TRUE)) {
+					// sender will not send the message if following property is
+					// set and not true.
+					// But it will set if it is not set (null)
+
+					// This is used to make sure that the mesage get passed the
+					// Sandesha2TransportSender.
+
+					String qualifiedForSending = (String) msgCtx
+							.getProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING);
+					if (qualifiedForSending != null
+							&& !qualifiedForSending
+									.equals(Sandesha2Constants.VALUE_TRUE)) {
 						continue;
 					}
-					
-					try {
 
-						if (msgCtx == null) {
-							log.debug ("ERROR: Sender has an Unavailable Message entry");
-							break;
-						}
-												
-						RMMsgContext rmMsgCtx = MsgInitializer
-								.initializeMessage(msgCtx);
-						//rmMsgCtx.addSOAPEnvelope();
-						
-						//skip sending if this message has been mentioned as a message not to send (within sandesha2.properties)
-						ArrayList msgsNotToSend = PropertyManager.getInstance().getMessagesNotToSend();
-						//SandeshaPropertyBean propertyBean = (SandeshaPropertyBean) messageContext.getParameter(Sandesha2Constants.SANDESHA2_POLICY_BEAN);
-						
-						if (msgsNotToSend!=null && msgsNotToSend.contains(new Integer (rmMsgCtx.getMessageType()))) {
-							continue;
-						}
-						
-						updateMessage(msgCtx);
+					// try {
 
-						
-						log.info("Sender is sending a '" + SandeshaUtil
-									.getMessageTypeString(rmMsgCtx.getMessageType()) + "' message.");
-						
-						Transaction preSendTransaction = storageManager.getTransaction();
-
-						int messageType = rmMsgCtx.getMessageType();
-						
-						if (messageType == Sandesha2Constants.MessageTypes.APPLICATION) {
-							
-							Sequence sequence = (Sequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
-							String sequenceID = sequence.getIdentifier().getIdentifier();
-							//checking weather the sequence has been timed out.
-							boolean sequenceTimedOut = SequenceManager.hasSequenceTimedOut (sequenceID, rmMsgCtx);
-							if (sequenceTimedOut) {
-								//sequence has been timed out.
-								//do time out processing.
-								
-								//TODO uncomment below line
-								TerminateManager.terminateSendingSide(context,sequenceID,msgCtx.isServerSide());
-								
-								String message = "Sequence timed out";
-								log.debug(message);
-								throw new SandeshaException (message);
-							}
-							
-							//piggybacking if an ack if available for the same
-							// sequence.
-							AcknowledgementManager
-									.piggybackAckIfPresent(rmMsgCtx);
-						}
-						
-						preSendTransaction.commit();
-						
-						try {
-							//every message should be resumed (pause==false) when sending
-//							boolean paused = msgCtx.isPaused();
-							
-							
-//							AxisEngine engine = new AxisEngine(msgCtx
-//									.getConfigurationContext());
-//							if (paused) {
-//								engine.resume(msgCtx);
-//							}else  {
-//								engine.send(msgCtx);
-//							}
-							
-							TransportOutDescription transportOutDescription = msgCtx.getTransportOut();
-							TransportSender transportSender = transportOutDescription.getSender();
-							if (transportSender!=null) {
-								transportSender.invoke(msgCtx);
-							}
-							
-						} catch (Exception e) {
-							//Exception is sending. retry later
-							String message = "Exception thrown in sending...";
-							log.debug(message);
-							log.debug(e.getMessage());
+					if (msgCtx == null) {
+						log
+								.debug("ERROR: Sender has an Unavailable Message entry");
+						break;
+					}
 
-						} 
-												
-						Transaction postSendTransaction = storageManager.getTransaction();
-
-						MessageRetransmissionAdjuster retransmitterAdjuster = new MessageRetransmissionAdjuster();
-
-						if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.APPLICATION) {
-							Sequence sequence = (Sequence) rmMsgCtx
-									.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
-							long messageNo = sequence.getMessageNumber()
-									.getMessageNumber();
-						}
+					RMMsgContext rmMsgCtx = MsgInitializer
+							.initializeMessage(msgCtx);
+					// rmMsgCtx.addSOAPEnvelope();
+
+					// skip sending if this message has been mentioned as a
+					// message not to send (within sandesha2.properties)
+					ArrayList msgsNotToSend = PropertyManager.getInstance()
+							.getMessagesNotToSend();
+					// SandeshaPropertyBean propertyBean =
+					// (SandeshaPropertyBean)
+					// messageContext.getParameter(Sandesha2Constants.SANDESHA2_POLICY_BEAN);
+
+					if (msgsNotToSend != null
+							&& msgsNotToSend.contains(new Integer(rmMsgCtx
+									.getMessageType()))) {
+						continue;
+					}
+
+					updateMessage(msgCtx);
 
-						retransmitterAdjuster.adjustRetransmittion(bean,context);
+					log.info("Sender is sending a '"
+							+ SandeshaUtil.getMessageTypeString(rmMsgCtx
+									.getMessageType()) + "' message.");
+
+					Transaction preSendTransaction = storageManager
+							.getTransaction();
+
+					int messageType = rmMsgCtx.getMessageType();
+
+					if (messageType == Sandesha2Constants.MessageTypes.APPLICATION) {
+
+						Sequence sequence = (Sequence) rmMsgCtx
+								.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
+						String sequenceID = sequence.getIdentifier()
+								.getIdentifier();
+						// checking weather the sequence has been timed out.
+						boolean sequenceTimedOut = SequenceManager
+								.hasSequenceTimedOut(sequenceID, rmMsgCtx);
+						if (sequenceTimedOut) {
+							// sequence has been timed out.
+							// do time out processing.
+
+							// TODO uncomment below line
+							TerminateManager.terminateSendingSide(context,
+									sequenceID, msgCtx.isServerSide());
 
-							
-						//update or delete only if the object is still present.
-						SenderBean bean1 = mgr.retrieve(bean.getMessageID());
-						if (bean1 != null) {
-							if (bean.isReSend()) {
-								bean1.setSentCount(bean.getSentCount());
-								bean1.setTimeToSend(bean.getTimeToSend());
-							
-								mgr.update(bean1);
-							}else 
-								mgr.delete(bean1.getMessageID());
+							String message = "Sequence timed out";
+							log.debug(message);
+							throw new SandeshaException(message);
 						}
 
-						postSendTransaction.commit(); //commiting the current
-												  // transaction
+						// piggybacking if an ack if available for the same
+						// sequence.
+						AcknowledgementManager.piggybackAckIfPresent(rmMsgCtx);
+					}
 
-						if (!msgCtx.isServerSide())
-							checkForSyncResponses(msgCtx);
-												
-
-						Transaction terminateCleaningTransaction = storageManager
-								.getTransaction();
-						if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.TERMINATE_SEQ) {
-							//terminate sending side.
-							TerminateSequence terminateSequence = (TerminateSequence) rmMsgCtx
-									.getMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ);
-							String sequenceID = terminateSequence
-									.getIdentifier().getIdentifier();
-							ConfigurationContext configContext = msgCtx
-									.getConfigurationContext();
-
-							TerminateManager.terminateSendingSide(configContext, sequenceID,msgCtx.isServerSide());
-							
-							//removing a entry from the Listener
-							String transport = msgCtx.getTransportOut().getName().getLocalPart();
-							
-							
-							//TODO complete below. Need a more eligent method which finishes the current message before ending.
-							//ListenerManager.stop(configContext,transport);
-						}
+					preSendTransaction.commit();
+
+					// every message should be resumed (pause==false) when
+					// sending
+					// boolean paused = msgCtx.isPaused();
+
+					// AxisEngine engine = new AxisEngine(msgCtx
+					// .getConfigurationContext());
+					// if (paused) {
+					// engine.resume(msgCtx);
+					// }else {
+					// engine.send(msgCtx);
+					// }
+
+					TransportOutDescription transportOutDescription = msgCtx
+							.getTransportOut();
+					TransportSender transportSender = transportOutDescription
+							.getSender();
+					if (transportSender != null) {
+						transportSender.invoke(msgCtx);
+					}
+
+					Transaction postSendTransaction = storageManager
+							.getTransaction();
+
+					MessageRetransmissionAdjuster retransmitterAdjuster = new MessageRetransmissionAdjuster();
 
-						terminateCleaningTransaction.commit();
+					if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.APPLICATION) {
+						Sequence sequence = (Sequence) rmMsgCtx
+								.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
+						long messageNo = sequence.getMessageNumber()
+								.getMessageNumber();
+					}
+
+					retransmitterAdjuster.adjustRetransmittion(bean, context);
 
-					} catch (AxisFault e1) {
-						e1.printStackTrace();
-					} catch (Throwable e3) {
-						e3.printStackTrace();
+					// update or delete only if the object is still present.
+					SenderBean bean1 = mgr.retrieve(bean.getMessageID());
+					if (bean1 != null) {
+						if (bean.isReSend()) {
+							bean1.setSentCount(bean.getSentCount());
+							bean1.setTimeToSend(bean.getTimeToSend());
+
+							mgr.update(bean1);
+						} else
+							mgr.delete(bean1.getMessageID());
 					}
+
+					postSendTransaction.commit(); // commiting the current
+					// transaction
+
+					if (!msgCtx.isServerSide())
+						checkForSyncResponses(msgCtx);
+
+					Transaction terminateCleaningTransaction = storageManager
+							.getTransaction();
+					if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.TERMINATE_SEQ) {
+						// terminate sending side.
+						TerminateSequence terminateSequence = (TerminateSequence) rmMsgCtx
+								.getMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ);
+						String sequenceID = terminateSequence.getIdentifier()
+								.getIdentifier();
+						ConfigurationContext configContext = msgCtx
+								.getConfigurationContext();
+
+						TerminateManager.terminateSendingSide(configContext,
+								sequenceID, msgCtx.isServerSide());
+
+						// removing a entry from the Listener
+						String transport = msgCtx.getTransportOut().getName()
+								.getLocalPart();
+
+						// TODO complete below. Need a more eligent method which
+						// finishes the current message before ending.
+						// ListenerManager.stop(configContext,transport);
+					}
+
+					terminateCleaningTransaction.commit();
+
 				}
 
-			} catch (SandeshaException e) {
+			} catch (AxisFault e) {
+				String message = "An Exception was throws in sending";
+				System.out.println(message);
+				log.error(e.getMessage());
 				e.printStackTrace();
-				return;
+
+				// TODO : when this is the client side throw the exception to
+				// the client when necessary.
+
 			}
 
 			try {
 				Thread.sleep(Sandesha2Constants.SENDER_SLEEP_TIME);
 			} catch (InterruptedException e1) {
-				//e1.printStackTrace();
+				// e1.printStackTrace();
 				log.debug("Sender was interupted...");
 				log.debug(e1.getMessage());
 				log.debug("End printing Interrupt...");
 			}
 		}
-
 	}
 
 	private boolean isResponseExpected(RMMsgContext rmMsgCtx) {
@@ -308,7 +321,7 @@
 			responseExpected = true;
 		}
 		if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.APPLICATION) {
-			//a ack may arrive. (not a application response)
+			// a ack may arrive. (not a application response)
 			if (rmMsgCtx.getMessageContext().getAxisOperation()
 					.getMessageExchangePattern().equals(
 							org.apache.wsdl.WSDLConstants.MEP_URI_IN_OUT)) {
@@ -319,139 +332,108 @@
 		return true;
 	}
 
-	public synchronized void runSenderForTheSequence(ConfigurationContext context, String sequenceID) {
-		
-		if (sequenceID!=null && !workingSequences.contains(sequenceID))
+	public synchronized void runSenderForTheSequence(
+			ConfigurationContext context, String sequenceID) {
+
+		if (sequenceID != null && !workingSequences.contains(sequenceID))
 			workingSequences.add(sequenceID);
-		
 
 		if (!isSenderStarted()) {
-			runSender = true;     //so that isSenderStarted()=true.
+			runSender = true; // so that isSenderStarted()=true.
 			super.start();
 			this.context = context;
 		}
 	}
 
 	private void updateMessage(MessageContext msgCtx1) throws SandeshaException {
-//		try {
-//			RMMsgContext rmMsgCtx1 = MsgInitializer.initializeMessage(msgCtx1);
-//			rmMsgCtx1.addSOAPEnvelope();
-//
-//		} catch (AxisFault e) {
-//			String message = "Exception in updating contexts";
-//			log.debug(message);
-//			throw new SandeshaException(message);
-//		}
+		// try {
+		// RMMsgContext rmMsgCtx1 = MsgInitializer.initializeMessage(msgCtx1);
+		// rmMsgCtx1.addSOAPEnvelope();
+		//
+		// } catch (AxisFault e) {
+		// String message = "Exception in updating contexts";
+		// log.debug(message);
+		// throw new SandeshaException(message);
+		// }
 
 	}
 
-	private void checkForSyncResponses(MessageContext msgCtx) {
+	private void checkForSyncResponses(MessageContext msgCtx)
+			throws SandeshaException {
 
 		try {
-			
+
 			boolean responsePresent = (msgCtx
 					.getProperty(MessageContext.TRANSPORT_IN) != null);
 			if (!responsePresent)
 				return;
 			
-			//we never expect sync responses. so we can freely create a new operation context for the incoming RM Specific message.
-	        // create the responseMessageContext
+			// create the responseMessageContext
 
 			MessageContext responseMessageContext = new MessageContext();
-			responseMessageContext.setConfigurationContext(msgCtx.getConfigurationContext());
-			responseMessageContext.setSessionContext(msgCtx.getSessionContext());
+			responseMessageContext.setServerSide(false);
+			responseMessageContext.setConfigurationContext(msgCtx
+					.getConfigurationContext());
+			responseMessageContext
+					.setSessionContext(msgCtx.getSessionContext());
 			responseMessageContext.setTransportIn(msgCtx.getTransportIn());
 			responseMessageContext.setTransportOut(msgCtx.getTransportOut());
 
-	        responseMessageContext.setProperty(MessageContext.TRANSPORT_IN,
-	        		msgCtx.getProperty(MessageContext.TRANSPORT_IN));
-	       // msgCtx.getAxisOperation().registerOperationContext(responseMessageContext, msgCtx.getOperationContext());
-	        responseMessageContext.setServerSide(false);
-	        responseMessageContext.setServiceContext(msgCtx.getServiceContext());
-	        responseMessageContext.setServiceGroupContext(msgCtx.getServiceGroupContext());
-
-	        //we never expect sync responses. so we can freely create a new operation context for the incoming RM Specific message.
-	        AxisOperation inOnlyOperation = AxisOperationFactory.getAxisOperation(AxisOperationFactory.MEP_CONSTANT_IN_ONLY);
-	        inOnlyOperation.setRemainingPhasesInFlow(msgCtx.getAxisOperation().getRemainingPhasesInFlow());
-	        
-	        OperationContext inOnlyOperationContext = new OperationContext (inOnlyOperation);
-	        responseMessageContext.setAxisOperation(inOnlyOperation);
-	        responseMessageContext.setOperationContext(inOnlyOperationContext);
-	        
-	        // If request is REST we assume the responseMessageContext is REST, so set the variable
-	        responseMessageContext.setDoingREST(msgCtx.isDoingREST());
-
-	        SOAPEnvelope resenvelope = TransportUtils.createSOAPMessage(responseMessageContext,
-	        		msgCtx.getEnvelope().getNamespace().getName());
-
-	        if (resenvelope != null) {
-	            responseMessageContext.setEnvelope(resenvelope);
-	            AxisEngine engine = new AxisEngine(msgCtx.getConfigurationContext());
-	            engine.receive(responseMessageContext);
-	        } else {
-	        	String message = "Exception is Receiving message...";
-	        	log.debug(message);
-	            throw new AxisFault(message);
-	        }
-			
-			
+			responseMessageContext.setProperty(MessageContext.TRANSPORT_IN,
+					msgCtx.getProperty(MessageContext.TRANSPORT_IN));
+			// msgCtx.getAxisOperation().registerOperationContext(responseMessageContext,
+			// msgCtx.getOperationContext());
+			// responseMessageContext.setServerSide(false);
+			responseMessageContext
+					.setServiceContext(msgCtx.getServiceContext());
+			responseMessageContext.setServiceGroupContext(msgCtx
+					.getServiceGroupContext());
+
+			// we never expect sync responses. so we can freely create a new
+			// operation context for the incoming RM Specific message.
+			AxisOperation inOnlyOperation =
+				 AxisOperationFactory.getAxisOperation(AxisOperationFactory.MEP_CONSTANT_IN_ONLY);
+		    inOnlyOperation.setRemainingPhasesInFlow(msgCtx.getAxisOperation().getRemainingPhasesInFlow());
+			AxisOperation syncResponseAxisOperation = msgCtx.getAxisOperation();
+		    OperationContext inOnlyOperationContext = new OperationContext (inOnlyOperation);
 			
+		    responseMessageContext.setAxisOperation(inOnlyOperation);
+		    responseMessageContext.setOperationContext(inOnlyOperationContext);
 			
-			
-			/*boolean responsePresent = (msgCtx
-					.getProperty(MessageContext.TRANSPORT_IN) != null);
+//			//following set the operationContext & the axisOperation of the newIncoming message to those
+//			//of the outGoing message. But does not add the message to the op. context or the AxisOperation.
+//			//Currently opcontext does not allow messages outside the map to be added to it.
+//			responseMessageContext.setAxisOperation(syncResponseAxisOperation);
+//			responseMessageContext
+//					.setOperationContext(syncResponseMsgOperationContext);
 
-			if (responsePresent) {
-				//create the response
-				MessageContext response = new MessageContext(msgCtx
-						.getConfigurationContext(), msgCtx.getSessionContext(),
-						msgCtx.getTransportIn(), msgCtx.getTransportOut());
-				response.setProperty(MessageContext.TRANSPORT_IN, msgCtx
-						.getProperty(MessageContext.TRANSPORT_IN));
-
-				response.setServerSide(false);
-
-				//If request is REST we assume the response is REST, so set the
-				// variable
-				response.setDoingREST(msgCtx.isDoingREST());
-				response.setServiceGroupContextId(msgCtx
-						.getServiceGroupContextId());
-				response
-						.setServiceGroupContext(msgCtx.getServiceGroupContext());
-				response.setServiceContext(msgCtx.getServiceContext());
-				response.setAxisService(msgCtx.getAxisService());
-				response.setAxisServiceGroup(msgCtx.getAxisServiceGroup());
-
-				
-				//setting the in-flow.
-				//ArrayList inPhaseHandlers =
-				// response.getAxisOperation().getRemainingPhasesInFlow();
-				//
-				// if (inPhaseHandlers==null || inPhaseHandlers.isEmpty()) {
-				// ArrayList phases =
-				// msgCtx.getSystemContext().getAxisConfiguration().getInPhasesUptoAndIncludingPostDispatch();
-				// response.getAxisOperation().setRemainingPhasesInFlow(phases); }
-				//
-
-				//Changed following from TransportUtils to SandeshaUtil since
-				// op.
-				// context is anavailable.
-				SOAPEnvelope resenvelope = null;
-//				resenvelope = SandeshaUtil.createSOAPMessage(response, msgCtx
-//						.getEnvelope().getNamespace().getName());
-
-				resenvelope = TransportUtils.createSOAPMessage(response,msgCtx
-  						.getEnvelope().getNamespace().getName());
-				if (resenvelope != null) {
-					AxisEngine engine = new AxisEngine(msgCtx
-							.getConfigurationContext());
-					response.setEnvelope(resenvelope);
-					engine.receive(response);
-				}
-			} */
+			// If request is REST we assume the responseMessageContext is REST,
+			// so set the variable
 
+		    responseMessageContext.setDoingREST(msgCtx.isDoingREST());
+
+			SOAPEnvelope resenvelope = null;
+			try {
+				resenvelope = TransportUtils.createSOAPMessage(
+						responseMessageContext, msgCtx.getEnvelope().getNamespace()
+								.getName());
+			} catch (AxisFault e) {
+				// TODO Auto-generated catch block
+				log.debug("Valid SOAP envelope not found");
+			}
+
+			if (resenvelope != null) {
+				responseMessageContext.setEnvelope(resenvelope);
+				AxisEngine engine = new AxisEngine(msgCtx
+						.getConfigurationContext());
+				engine.receive(responseMessageContext);
+			} 
+			
 		} catch (Exception e) {
-			log.info("No valid Sync response...");
+			String message = "No valid Sync response...";
+			log.info(message);
+			throw new SandeshaException(message, e);
+
 		}
 	}
 



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