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 2005/09/28 12:48:17 UTC

svn commit: r292160 - in /webservices/sandesha/trunk: samples/interop/ src/org/apache/sandesha2/ src/org/apache/sandesha2/handlers/ src/org/apache/sandesha2/msgprocessors/ src/org/apache/sandesha2/util/ src/org/apache/sandesha2/wsrm/

Author: chamikara
Date: Wed Sep 28 03:47:35 2005
New Revision: 292160

URL: http://svn.apache.org/viewcvs?rev=292160&view=rev
Log:
Previously since the acks were set at the SandeshaOutHandler it didnt work when the msgReceiver was InOnly. Fixed this by setting the ack in the SandeshaInHandler. In handler sents the ack message and call engine.send ().

Modified:
    webservices/sandesha/trunk/samples/interop/services.xml
    webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgCreator.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/Sender.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/ServerOutHandler.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AcknowledgementRange.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/RMElements.java

Modified: webservices/sandesha/trunk/samples/interop/services.xml
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/samples/interop/services.xml?rev=292160&r1=292159&r2=292160&view=diff
==============================================================================
--- webservices/sandesha/trunk/samples/interop/services.xml (original)
+++ webservices/sandesha/trunk/samples/interop/services.xml Wed Sep 28 03:47:35 2005
@@ -8,7 +8,7 @@
     <module ref="sandesha" />
 
     <operation name="ping">  
-        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
+        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver" />
     </operation>
 
     <operation name="echoString">

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgCreator.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgCreator.java?rev=292160&r1=292159&r2=292160&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgCreator.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgCreator.java Wed Sep 28 03:47:35 2005
@@ -24,6 +24,7 @@
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.addressing.MessageInformationHeaders;
 import org.apache.axis2.addressing.om.AddressingHeaders;
+import org.apache.axis2.clientapi.Call;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
@@ -62,23 +63,56 @@
 
 	public static RMMsgContext createCreateSeqMsg(RMMsgContext applicationRMMsg)
 			throws SandeshaException {
-		ConfigurationContext context = applicationRMMsg.getMessageContext()
-				.getSystemContext();
+		MessageContext applicationMsgContext = applicationRMMsg
+				.getMessageContext();
+		if (applicationMsgContext == null)
+			throw new SandeshaException("Application message is null");
+		ConfigurationContext context = applicationMsgContext.getSystemContext();
 		if (context == null)
 			throw new SandeshaException("Configuration Context is null");
 
-		MessageContext msgContext;
+		MessageContext createSeqmsgContext;
 		try {
-			msgContext = new MessageContext(context, applicationRMMsg
-					.getMessageContext().getTransportIn(), applicationRMMsg
-					.getMessageContext().getTransportOut());
-		} catch (AxisFault e) {
+			//creating by copying common contents. (this will not set contexts
+			// except for configCtx).
+			createSeqmsgContext = SandeshaUtil
+					.shallowCopy(applicationMsgContext);
+		} catch (SandeshaException e) {
 			throw new SandeshaException(e.getMessage());
 		}
-		msgContext.setTo(applicationRMMsg.getTo());
-		msgContext.setReplyTo(applicationRMMsg.getReplyTo());
 
-		RMMsgContext createSeqRMMsg = new RMMsgContext(msgContext);
+		//setting contexts
+		createSeqmsgContext.setServiceGroupContext(applicationMsgContext
+				.getServiceGroupContext());
+		createSeqmsgContext.setServiceGroupContextId(applicationMsgContext
+				.getServiceGroupContextId());
+		createSeqmsgContext.setServiceContext(applicationMsgContext
+				.getServiceContext());
+		createSeqmsgContext.setServiceContextID(applicationMsgContext
+				.getServiceContextID());
+
+		try {
+			//TODO set a suitable ope. description
+			OperationContext createSeqOpContext = new OperationContext(
+					applicationMsgContext.getOperationDescription());
+			createSeqmsgContext.setOperationContext(createSeqOpContext);
+			createSeqOpContext.addMessageContext(createSeqmsgContext);
+
+			//Setting a new SOAP Envelop.
+			SOAPEnvelope envelope = SOAPAbstractFactory.getSOAPFactory(
+					Constants.DEFAULT_SOAP_VERSION).getDefaultEnvelope();
+
+			createSeqmsgContext.setEnvelope(envelope);
+			createSeqOpContext.addMessageContext(createSeqmsgContext);
+			createSeqmsgContext.setOperationContext(createSeqOpContext);
+		} catch (AxisFault e2) {
+			throw new SandeshaException(e2.getMessage());
+		}
+
+		createSeqmsgContext.setTo(applicationRMMsg.getTo());
+		createSeqmsgContext.setReplyTo(applicationRMMsg.getReplyTo());
+
+		RMMsgContext createSeqRMMsg = new RMMsgContext(createSeqmsgContext);
 
 		CreateSequence createSequencePart = new CreateSequence();
 
@@ -171,8 +205,8 @@
 	}
 
 	//Adds a ack message to the following message.
-	public static void addAckMessage(RMMsgContext applicationMsg)
-			throws SandeshaException {
+	public static void addAckMessage(RMMsgContext applicationMsg,
+			String sequenceId) throws SandeshaException {
 		SOAPEnvelope envelope = applicationMsg.getSOAPEnvelope();
 		if (envelope == null) {
 			SOAPEnvelope newEnvelope = SOAPAbstractFactory.getSOAPFactory(
@@ -181,30 +215,22 @@
 		}
 		envelope = applicationMsg.getSOAPEnvelope();
 
-		MessageContext requestMessage = null;
-
-		try {
-			requestMessage = applicationMsg.getMessageContext()
-					.getOperationContext().getMessageContext(
-							WSDLConstants.MESSAGE_LABEL_IN);
-		} catch (AxisFault e) {
-			throw new SandeshaException(e.getMessage());
-		}
-
-		if (requestMessage == null)
-			throw new SandeshaException("Request message is null");
-
-		RMMsgContext reqRMMsgCtx = null;
-
-		reqRMMsgCtx = MsgInitializer.initializeMessage(requestMessage);
-
-		Sequence reqSequence = (Sequence) reqRMMsgCtx
-				.getMessagePart(Constants.MESSAGE_PART_SEQUENCE);
-		if (reqSequence == null)
-			throw new SandeshaException(
-					"Sequence part of application message is null");
-
-		String sequenceId = reqSequence.getIdentifier().getIdentifier();
+//		MessageContext requestMessage = null;
+//
+//		try {
+//			requestMessage = applicationMsg.getMessageContext()
+//					.getOperationContext().getMessageContext(
+//							WSDLConstants.MESSAGE_LABEL_IN);
+//		} catch (AxisFault e) {
+//			throw new SandeshaException(e.getMessage());
+//		}
+//
+//		if (requestMessage == null)
+//			throw new SandeshaException("Request message is null");
+//
+//		RMMsgContext reqRMMsgCtx = null;
+//
+//		reqRMMsgCtx = MsgInitializer.initializeMessage(requestMessage);
 
 		SequenceAcknowledgement sequenceAck = new SequenceAcknowledgement();
 		Identifier id = new Identifier();
@@ -243,13 +269,13 @@
 
 	}
 
-	public static RMMsgContext createAckMessage(RMMsgContext applicationMsg)
+	public static RMMsgContext createAckMessage(RMMsgContext applicationRMMsgCtx)
 			throws SandeshaException {
 		try {
-			MessageContext applicationMsgCtx = applicationMsg
+			MessageContext applicationMsgCtx = applicationRMMsgCtx
 					.getMessageContext();
 			MessageContext ackMsgCtx = SandeshaUtil
-					.copyMessageContext(applicationMsgCtx);
+					.shallowCopy(applicationMsgCtx);
 			ackMsgCtx.setServiceGroupContext(applicationMsgCtx
 					.getServiceGroupContext());
 			ackMsgCtx.setServiceGroupContextId(applicationMsgCtx
@@ -257,21 +283,34 @@
 			ackMsgCtx.setServiceContext(applicationMsgCtx.getServiceContext());
 			ackMsgCtx.setServiceContextID(applicationMsgCtx
 					.getServiceContextID());
+
 			RMMsgContext ackRMMsgCtx = new RMMsgContext(ackMsgCtx);
 
-			OperationContext ackOpCtx = new OperationContext(ackMsgCtx
+			//TODO set a suitable description
+			OperationContext ackOpCtx = new OperationContext(applicationMsgCtx
 					.getOperationDescription());
-			MessageContext requestAppMsg = applicationMsgCtx
-					.getOperationContext().getMessageContext(
-							WSDLConstants.MESSAGE_LABEL_IN);
-			
-			//added request applicatin message as the request message for the newly created ack.
+
+			//			//TODO set a suitable request msg (if required)
+			//			MessageContext requestAppMsg = applicationMsgCtx
+			//					.getOperationContext().getMessageContext(
+			//							WSDLConstants.MESSAGE_LABEL_IN);
+
+			//added request applicatin message as the request message for the
+			// newly created ack.
 			//this helps to tread addAck and createAck cases equally.
-			ackOpCtx.addMessageContext(requestAppMsg);
+			//ackOpCtx.addMessageContext(requestAppMsg);
 			ackMsgCtx.setOperationContext(ackOpCtx);
 			ackOpCtx.addMessageContext(ackMsgCtx);
 
-			addAckMessage(ackRMMsgCtx);
+			Sequence reqSequence = (Sequence) applicationRMMsgCtx
+					.getMessagePart(Constants.MESSAGE_PART_SEQUENCE);
+			if (reqSequence == null)
+				throw new SandeshaException(
+						"Sequence part of application message is null");
+
+			String sequenceId = reqSequence.getIdentifier().getIdentifier();
+
+			addAckMessage(ackRMMsgCtx, sequenceId);
 			return ackRMMsgCtx;
 		} catch (AxisFault e) {
 			throw new SandeshaException(e.getMessage());

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/Sender.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/Sender.java?rev=292160&r1=292159&r2=292160&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/Sender.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/Sender.java Wed Sep 28 03:47:35 2005
@@ -19,6 +19,11 @@
 import java.util.Collection;
 import java.util.Iterator;
 
+import javax.xml.stream.FactoryConfigurationError;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.AbstractContext;
 import org.apache.axis2.context.ConfigurationContext;
@@ -45,6 +50,7 @@
 	public void run () {
 		
 		while (senderStarted) {
+			System.out.println ("|-|");
 			try {
 				if (context==null)
 					throw new SandeshaException ("Can't continue the Sender. Context is null");
@@ -60,11 +66,25 @@
 				 RetransmitterBean bean = (RetransmitterBean) iter.next();
 				 String key = (String) bean.getKey();
 				 MessageContext msgCtx = SandeshaUtil.getStoredMessageContext(key);
+				 
 				 try {
+					System.out.println ("SERIALIZATION BEFORE SENDING....");
+					 XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
+					 msgCtx.getEnvelope().serialize(writer);
+				} catch (XMLStreamException e2) {
+					// TODO Auto-generated catch block
+					e2.printStackTrace();
+				} catch (FactoryConfigurationError e2) {
+					// TODO Auto-generated catch block
+					e2.printStackTrace();
+				}
+				 
+				try {
 					new AxisEngine(context).send(msgCtx);
 				} catch (AxisFault e1) {
 					e1.printStackTrace();
 				}
+				
 			}
 			
 			try {

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/ServerOutHandler.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/ServerOutHandler.java?rev=292160&r1=292159&r2=292160&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/ServerOutHandler.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/ServerOutHandler.java Wed Sep 28 03:47:35 2005
@@ -18,7 +18,9 @@
 package org.apache.sandesha2.handlers;
 
 import javax.xml.namespace.QName;
+import javax.xml.stream.FactoryConfigurationError;
 import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.axis2.AxisFault;
@@ -67,6 +69,12 @@
 		ConfigurationContext ctx = msgCtx.getSystemContext();
 		SandeshaUtil.startSenderIfStopped(ctx);
 
+		
+		
+		
+		
+
+		
 		//getting rm message
 		RMMsgContext rmMsgCtx;
 		try {
@@ -87,7 +95,7 @@
 				AbstractContext context = rmMsgCtx.getContext();
 				if (context == null)
 					throw new SandeshaException("Context is null");
-				
+
 				Sequence sequence = (Sequence) requestRMMsgCtx
 						.getMessagePart(Constants.MESSAGE_PART_SEQUENCE);
 				if (sequence == null)
@@ -131,50 +139,86 @@
 				if (!validResponse) { //TODO either change MsgReceiver or move
 					if (Constants.WSA.NS_URI_ANONYMOUS.equals(acksToEPR
 							.getAddress())) {
-						RMMsgCreator.addAckMessage(rmMsgCtx);
+						Sequence reqSequence = (Sequence) requestRMMsgCtx
+								.getMessagePart(Constants.MESSAGE_PART_SEQUENCE);
+						if (reqSequence == null)
+							throw new SandeshaException(
+									"Sequence part of application message is null");
+
+						String sequenceId = reqSequence.getIdentifier()
+								.getIdentifier();
+
+						RMMsgCreator.addAckMessage(rmMsgCtx, sequenceId);
 					}
 				} else {
 					//valid response
 
 					RMMsgContext ackRMMsgContext = RMMsgCreator
-							.createAckMessage(rmMsgCtx);
-					MessageContext ackMsgContext = ackRMMsgContext.getMessageContext();
-					ackMsgContext.setServiceGroupContext(msgCtx.getServiceGroupContext());
-					ackMsgContext.setServiceGroupContextId(msgCtx.getServiceGroupContextId());
+							.createAckMessage(requestRMMsgCtx);
+					MessageContext ackMsgContext = ackRMMsgContext
+							.getMessageContext();
+					ackMsgContext.setServiceGroupContext(msgCtx
+							.getServiceGroupContext());
+					ackMsgContext.setServiceGroupContextId(msgCtx
+							.getServiceGroupContextId());
 					ackMsgContext.setServiceContext(msgCtx.getServiceContext());
-					ackMsgContext.setServiceContextID(msgCtx.getServiceContextID());
-					OperationContext ackOpContext = new OperationContext (ackMsgContext.getOperationDescription());
+					ackMsgContext.setServiceContextID(msgCtx
+							.getServiceContextID());
+					
+					//TODO set a suitable operation description
+					OperationContext ackOpContext = new OperationContext(
+							reqMsgCtx.getOperationDescription());
+					
 					ackOpContext.addMessageContext(ackMsgContext);
 					ackMsgContext.setOperationContext(ackOpContext);
-					RMMsgContext newRMMsgCtx = SandeshaUtil
-							.copyRMMessageContext(rmMsgCtx);
+					RMMsgContext newRMMsgCtx = SandeshaUtil.deepCopy(rmMsgCtx);
 					MessageContext newMsgCtx = newRMMsgCtx.getMessageContext();
 					rmMsgCtx.setSOAPEnvelop(ackRMMsgContext.getSOAPEnvelope());
 
 					//setting contexts
-					newMsgCtx.setServiceGroupContext(msgCtx.getServiceGroupContext());
-					newMsgCtx.setServiceGroupContextId(msgCtx.getServiceGroupContextId());
+					newMsgCtx.setServiceGroupContext(msgCtx
+							.getServiceGroupContext());
+					newMsgCtx.setServiceGroupContextId(msgCtx
+							.getServiceGroupContextId());
 					newMsgCtx.setServiceContext(msgCtx.getServiceContext());
 					newMsgCtx.setServiceContextID(msgCtx.getServiceContextID());
-				    OperationContext newOpContext = new OperationContext (newMsgCtx.getOperationDescription());
-				    newOpContext.addMessageContext(newMsgCtx);
-				    newMsgCtx.setOperationContext(newOpContext);
-				    
+					OperationContext newOpContext = new OperationContext(
+							newMsgCtx.getOperationDescription());
+					newOpContext.addMessageContext(newMsgCtx);
+					newMsgCtx.setOperationContext(newOpContext);
+
 					//processing the response
 					processResponseMessage(newRMMsgCtx, requestRMMsgCtx);
+					//msgCtx.setTo(null);
+					msgCtx.setPausedTrue(getName());
+					
+
 				}
 			}
 		} catch (SandeshaException e) {
 			throw new AxisFault(e.getMessage());
 		}
+		
+		// serializing
+		try {
+			SOAPEnvelope env11 = msgCtx.getEnvelope();
+			XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
+			env11.serialize(writer);
+		} catch (XMLStreamException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		} catch (FactoryConfigurationError e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
 	}
 
-	private void processResponseMessage(RMMsgContext msg, RMMsgContext reqMsg)
+	private void processResponseMessage(RMMsgContext rmMsg, RMMsgContext reqRMMsg)
 			throws SandeshaException {
-		if (msg == null || reqMsg == null)
+		if (rmMsg == null || reqRMMsg == null)
 			throw new SandeshaException("Message or reques message is null");
 
-		Sequence sequence = (Sequence) reqMsg
+		Sequence sequence = (Sequence) reqRMMsg
 				.getMessagePart(Constants.MESSAGE_PART_SEQUENCE);
 		if (sequence == null)
 			throw new SandeshaException("Sequence part is null");
@@ -183,7 +227,7 @@
 		if (incomingSeqId == null || incomingSeqId == "")
 			throw new SandeshaException("Invalid seqence Id");
 
-		AbstractContext context = msg.getContext();
+		AbstractContext context = rmMsg.getContext();
 		if (context == null)
 			throw new SandeshaException("Context is null");
 
@@ -193,7 +237,7 @@
 		SequencePropertyBean toBean = mgr.retrieve(incomingSeqId,
 				Constants.SEQ_PROPERTY_TO_EPR);
 		SequencePropertyBean replyToBean = mgr.retrieve(incomingSeqId,
-				Constants.SEQ_PROPERTY_ACKS_TO_EPR);
+				Constants.SEQ_PROPERTY_REPLY_TO_EPR);
 		SequencePropertyBean outSequenceBean = mgr.retrieve(incomingSeqId,
 				Constants.SEQ_PROPERTY_OUT_SEQUENCE_ID);
 
@@ -213,27 +257,58 @@
 				|| incomingReplyTo.getAddress() == "")
 			throw new SandeshaException("ReplyTo is not set correctly");
 
-		msg.setTo(incomingReplyTo);
-		msg.setReplyTo(incomingTo);
+		rmMsg.setTo(incomingReplyTo);
+		rmMsg.setReplyTo(incomingTo);
 
 		if (outSequenceBean == null || outSequenceBean.getValue() == null) {
 			RetransmitterBeanMgr retransmitterMgr = AbstractBeanMgrFactory
 					.getInstance(context).getRetransmitterBeanMgr();
 
-			msg.getMessageContext().setPausedTrue(getName());
+			rmMsg.getMessageContext().setPausedTrue(getName());
 
 			RetransmitterBean appMsgEntry = new RetransmitterBean();
-			String key = SandeshaUtil.storeMessageContext(msg
+			
+			RMMsgContext copiedRMMsgCtx = SandeshaUtil.deepCopy(rmMsg);
+			MessageContext copiedMsgCtx = copiedRMMsgCtx.getMessageContext();
+			MessageContext msg = rmMsg.getMessageContext();
+			//msg.setResponseWritten(false);
+			//msg.setOutPutWritten(true);
+			//msg.getOperationContext().setProperty(org.apache.axis2.Constants.RESPONSE_WRITTEN,org.apache.axis2.Constants.VALUE_TRUE);
+
+			
+			Object val = msg.getOperationContext().getProperty (org.apache.axis2.Constants.RESPONSE_WRITTEN);
+			copiedMsgCtx.setServiceGroupContext(msg
+					.getServiceGroupContext());
+			copiedMsgCtx.setServiceGroupContextId(msg
+					.getServiceGroupContextId());
+			copiedMsgCtx.setServiceContext(msg
+					.getServiceContext());
+			copiedMsgCtx.setServiceContextID(msg
+					.getServiceContextID());
+			copiedMsgCtx.setOperationContext(msg.getOperationContext());
+			
+			//TODO IF - may not work when op context is changed
+			try {
+				msg.getOperationContext().addMessageContext(copiedMsgCtx);
+			} catch (AxisFault e) {
+				e.printStackTrace();
+			}
+			
+			String key = SandeshaUtil.storeMessageContext(rmMsg
 					.getMessageContext());
 			appMsgEntry.setKey(key);
 			appMsgEntry.setLastSentTime(0);
 			appMsgEntry.setTempSequenceId(incomingSeqId);
 			appMsgEntry.setSend(false);
-			appMsgEntry.setMessageId(msg.getMessageId());
+			appMsgEntry.setMessageId(rmMsg.getMessageId());
+
 			retransmitterMgr.insert(appMsgEntry);
 
-			addCreateSequenceMessage(msg);
+			addCreateSequenceMessage(rmMsg);
+			
+
 
+			
 		} else {
 			//Sequence id is present
 			//set sequence part
@@ -245,8 +320,8 @@
 	public void addCreateSequenceMessage(RMMsgContext applicationRMMsg)
 			throws SandeshaException {
 		MessageContext applicationMsg = applicationRMMsg.getMessageContext();
-		if (applicationMsg==null)
-			throw new SandeshaException ("Message context is null");
+		if (applicationMsg == null)
+			throw new SandeshaException("Message context is null");
 		RMMsgContext createSeqRMMessage = RMMsgCreator
 				.createCreateSeqMsg(applicationRMMsg);
 		MessageContext createSeqMsg = createSeqRMMessage.getMessageContext();

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=292160&r1=292159&r2=292160&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Wed Sep 28 03:47:35 2005
@@ -29,6 +29,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.soap.SOAPEnvelope;
 import org.apache.sandesha2.Constants;
@@ -36,7 +37,9 @@
 import org.apache.sandesha2.MsgValidator;
 import org.apache.sandesha2.RMMsgContext;
 import org.apache.sandesha2.RMMsgCreator;
+import org.apache.sandesha2.SOAPAbstractFactory;
 import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.msgreceivers.RMMessageReceiver;
 import org.apache.sandesha2.storage.AbstractBeanMgrFactory;
 import org.apache.sandesha2.storage.beanmanagers.NextMsgBeanMgr;
 import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
@@ -59,6 +62,10 @@
 
 		System.out.println("Application msg processor called");
 
+		MessageContext msgCtx = rmMsgCtx.getMessageContext();
+		if (msgCtx==null)
+			throw new SandeshaException ("Message context is null");
+		
 		if (rmMsgCtx.getProperty(Constants.APPLICATION_PROCESSING_DONE) != null
 				&& rmMsgCtx.getProperty(Constants.APPLICATION_PROCESSING_DONE)
 						.equals("true")) {
@@ -123,28 +130,72 @@
 
 		if (acksToStr.equals(Constants.WSA.NS_URI_ANONYMOUS)) {
 
-			//Adding sync ack
-			//set acknowledgement
-			//TODO stop adding acks to every message. Add acks only when
-			// needed.
-			
-			
-//			try {
-//				MessageContext responseMsgCtx = rmMsgCtx.getMessageContext().getOperationContext().getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT);		
-//				if (responseMsgCtx==null){
-//					responseMsgCtx = new MessageContext (configCtx,rmMsgCtx.getMessageContext().getTransportIn(),rmMsgCtx.getMessageContext().getTransportOut());
-//					rmMsgCtx.getMessageContext().getOperationContext().addMessageContext(responseMsgCtx);
-//					
-//					//TODO following line is due to a bug in Axis2. Remove this when it is fixed.
-//					responseMsgCtx.setOperationContext(rmMsgCtx.getMessageContext().getOperationContext());
-//				}
-//				
-//				RMMsgContext responseRMMsg = new RMMsgContext (responseMsgCtx);
-//				RMMsgCreator.addAckMessage(responseRMMsg);
-//				
-//			} catch (AxisFault af) {
-//				throw new SandeshaException (af.getMessage());
-//			} 
+//			//Adding sync ack
+//			//set acknowledgement
+//			//TODO stop adding acks to every message. Add acks only when
+//			// needed.
+//			
+//			
+////			try {
+////				MessageContext responseMsgCtx = rmMsgCtx.getMessageContext().getOperationContext().getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT);		
+////				if (responseMsgCtx==null){
+////					responseMsgCtx = new MessageContext (configCtx,rmMsgCtx.getMessageContext().getTransportIn(),rmMsgCtx.getMessageContext().getTransportOut());
+////					rmMsgCtx.getMessageContext().getOperationContext().addMessageContext(responseMsgCtx);
+////					
+////					//TODO following line is due to a bug in Axis2. Remove this when it is fixed.
+////					responseMsgCtx.setOperationContext(rmMsgCtx.getMessageContext().getOperationContext());
+////				}
+////				
+////				RMMsgContext responseRMMsg = new RMMsgContext (responseMsgCtx);
+////				RMMsgCreator.addAckMessage(responseRMMsg);
+////				
+////			} catch (AxisFault af) {
+////				throw new SandeshaException (af.getMessage());
+////			} 
+			
+			
+			RMMsgContext ackRMMsgCtx = SandeshaUtil.deepCopy(rmMsgCtx);
+			MessageContext ackMsgCtx = ackRMMsgCtx.getMessageContext();
+			ackMsgCtx.setServiceGroupContext(msgCtx
+					.getServiceGroupContext());
+			ackMsgCtx.setServiceGroupContextId(msgCtx
+					.getServiceGroupContextId());
+			ackMsgCtx.setServiceContext(msgCtx.getServiceContext());
+			ackMsgCtx.setServiceContextID(msgCtx
+					.getServiceContextID());
+			
+			//TODO set a suitable operation description
+			OperationContext ackOpContext = new OperationContext(
+					msgCtx.getOperationDescription());
+			
+			try {
+				ackOpContext.addMessageContext(ackMsgCtx);
+			} catch (AxisFault e2) {
+				throw new SandeshaException (e2.getMessage());
+			}
+			ackMsgCtx.setOperationContext(ackOpContext);
+			
+			//Set new envelope
+			SOAPEnvelope envelope = SOAPAbstractFactory.getSOAPFactory(Constants.DEFAULT_SOAP_VERSION).getDefaultEnvelope();
+			try {
+				ackMsgCtx.setEnvelope(envelope);
+			} catch (AxisFault e3) {
+				throw new SandeshaException (e3.getMessage());
+			}
+			
+			//FIXME set acksTo instead of ReplyTo
+			ackMsgCtx.setTo(msgCtx.getReplyTo());
+			ackMsgCtx.setReplyTo(msgCtx.getTo());
+			RMMsgCreator.addAckMessage(ackRMMsgCtx,sequenceId);
+
+			
+		    AxisEngine engine = new AxisEngine(
+		     		ackRMMsgCtx.getMessageContext().getSystemContext());
+		    try {
+				engine.send(ackRMMsgCtx.getMessageContext());
+			} catch (AxisFault e1) {
+				throw new SandeshaException (e1.getMessage());
+			}
 
 		} else {
 			//TODO Add async Ack
@@ -207,6 +258,8 @@
 							"true");
 
 					System.out.println("paused");
+					
+					
 				} catch (Exception ex) {
 					throw new SandeshaException(ex.getMessage());
 				}

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=292160&r1=292159&r2=292160&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java Wed Sep 28 03:47:35 2005
@@ -22,14 +22,19 @@
 import java.util.StringTokenizer;
 
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.addressing.MessageInformationHeaders;
+import org.apache.axis2.addressing.miheaders.RelatesTo;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 
 import org.apache.axis2.description.TransportInDescription;
 import org.apache.axis2.description.TransportOutDescription;
+import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.om.impl.MIMEOutputUtils;
+import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.util.UUIDGenerator;
+import org.apache.sandesha2.Constants;
 import org.apache.sandesha2.RMMsgContext;
 import org.apache.sandesha2.SandeshaException;
 import org.apache.sandesha2.Sender;
@@ -44,8 +49,9 @@
 public class SandeshaUtil {
 
 	private static Hashtable storedMsgContexts = new Hashtable();
-	private static Sender sender = new Sender ();
-	
+
+	private static Sender sender = new Sender();
+
 	public static String getUUID() {
 		String uuid = "uuid:" + UUIDGenerator.getUUID();
 		return uuid;
@@ -151,70 +157,97 @@
 	//		getAckRangeArray( msgList);
 	//		
 	//	}
-	
-	public static MessageContext copyMessageContext (MessageContext msgCtx) throws SandeshaException {
-		ConfigurationContext configCtx = msgCtx.getSystemContext();
-		TransportInDescription transportIn = msgCtx.getTransportIn();
-		TransportOutDescription transportOut = msgCtx.getTransportOut();
-		MessageInformationHeaders msgInfoHeaders = msgCtx.getMessageInformationHeaders();
-		
+
+	public static MessageContext deepCopy(MessageContext msgCtx)
+			throws SandeshaException {
+
 		try {
-			MessageContext newMessageContext = new MessageContext (configCtx,transportIn,transportOut);
+			MessageContext newMessageContext = shallowCopy(msgCtx);
 			newMessageContext.setDoingMTOM(msgCtx.isDoingMTOM());
 			newMessageContext.setDoingREST(msgCtx.isDoingREST());
-			newMessageContext.setEnvelope(msgCtx.getEnvelope());
-			newMessageContext.setFaultTo(msgCtx.getFaultTo());
-			newMessageContext.setFrom(msgCtx.getFrom());
-			//newMessageContext.setInFaultFlow(msgCtx.geti);
 			newMessageContext.setMessageID(getUUID());
-			newMessageContext.setMessageInformationHeaders(msgCtx.getMessageInformationHeaders());
-			//newMessageContext.setOperationContext(msgCtx.getOperationContext());
-			newMessageContext.setOperationDescription(msgCtx.getOperationDescription());
 			newMessageContext.setOutPutWritten(msgCtx.isOutPutWritten());
 			newMessageContext.setParent(msgCtx.getParent());
 			newMessageContext.setPausedPhaseName(msgCtx.getPausedPhaseName());
-			newMessageContext.setProcessingFault(msgCtx.isProcessingFault() );
-			newMessageContext.setRelatesTo(msgCtx.getRelatesTo());
+			newMessageContext.setProcessingFault(msgCtx.isProcessingFault());
 			newMessageContext.setResponseWritten(msgCtx.isResponseWritten());
 			newMessageContext.setRestThroughPOST(msgCtx.isRestThroughPOST());
 			newMessageContext.setServerSide(msgCtx.isServerSide());
-			//newMessageContext.setServiceContext(msgCtx.getServiceContext());
-			//newMessageContext.setServiceContextID(msgCtx.getServiceContextID());
-			newMessageContext.setServiceDescription(msgCtx.getServiceDescription());
-			//newMessageContext.setServiceGroupContext(msgCtx.getServiceGroupContext());
-			//newMessageContext.setServiceGroupContextId(msgCtx.getServiceGroupContextId());
-			if (msgCtx.getServiceGroupDescription()!=null)
-				newMessageContext.setServiceGroupDescription(msgCtx.getServiceGroupDescription());
+			newMessageContext.setOperationDescription(msgCtx
+					.getOperationDescription());
+
+			newMessageContext.setProperty(MessageContext.TRANSPORT_OUT, msgCtx
+					.getProperty(MessageContext.TRANSPORT_OUT));
+			newMessageContext.setProperty(HTTPConstants.HTTPOutTransportInfo,
+					msgCtx.getProperty(HTTPConstants.HTTPOutTransportInfo));
+
+			//Setting the charater set encoding
+			newMessageContext
+					.setProperty(MessageContext.CHARACTER_SET_ENCODING, msgCtx
+							.getProperty(MessageContext.CHARACTER_SET_ENCODING));
+
+			if (msgCtx.getEnvelope() != null)
+				newMessageContext.setEnvelope(msgCtx.getEnvelope());
+
+			//copying transport info. TODO remove http specific ness.
+			newMessageContext.setProperty(MessageContext.TRANSPORT_OUT, msgCtx
+					.getProperty(MessageContext.TRANSPORT_OUT));
+			newMessageContext.setProperty(HTTPConstants.HTTPOutTransportInfo,
+					msgCtx.getProperty(HTTPConstants.HTTPOutTransportInfo));
+			return newMessageContext;
+
+		} catch (AxisFault e) {
+			throw new SandeshaException("Cannot copy message");
+		}
+	}
+
+	public static MessageContext shallowCopy(MessageContext msgCtx)
+			throws SandeshaException {
+		ConfigurationContext configCtx = msgCtx.getSystemContext();
+		TransportInDescription transportIn = msgCtx.getTransportIn();
+		TransportOutDescription transportOut = msgCtx.getTransportOut();
+		MessageInformationHeaders msgInfoHeaders1 = new MessageInformationHeaders();
+		msgInfoHeaders1.setTo(msgCtx.getTo());
+		msgInfoHeaders1.setFrom(msgCtx.getFrom());
+		msgInfoHeaders1.setReplyTo(msgCtx.getReplyTo());
+		msgInfoHeaders1.setFaultTo(msgCtx.getFaultTo());
+		msgInfoHeaders1.setMessageId(getUUID());
+
+		try {
+			MessageContext newMessageContext = new MessageContext(configCtx,
+					transportIn, transportOut);
+			newMessageContext.setMessageInformationHeaders(msgInfoHeaders1);
+			newMessageContext.setServiceDescription(msgCtx
+					.getServiceDescription());
+			if (msgCtx.getServiceGroupDescription() != null)
+				newMessageContext.setServiceGroupDescription(msgCtx
+						.getServiceGroupDescription());
+
 			newMessageContext.setSoapAction(msgCtx.getSoapAction());
-			newMessageContext.setTo(msgCtx.getTo());
 			newMessageContext.setWSAAction(msgCtx.getWSAAction());
-			
-			if (msgCtx.getEnvelope()!=null)
-				newMessageContext.setEnvelope(msgCtx.getEnvelope());
-			
-			//newMessageContext.setServiceContext(msgCtx.getServiceContext());
-			//newMessageContext.setse
-			
+
 			return newMessageContext;
-			
+
 		} catch (AxisFault e) {
-			throw new SandeshaException ("Cannot copy message");
+			throw new SandeshaException("Cannot copy message");
 		}
+
 	}
-	
-	public static RMMsgContext copyRMMessageContext (RMMsgContext rmMsgContext) throws SandeshaException{
+
+	public static RMMsgContext deepCopy(RMMsgContext rmMsgContext)
+			throws SandeshaException {
 		MessageContext msgCtx = null;
-		if (rmMsgContext.getMessageContext()!=null)
-			msgCtx = copyMessageContext(rmMsgContext.getMessageContext());
-		
-	    RMMsgContext newRMMsgCtx = new RMMsgContext ();
-	    if (msgCtx!=null)
-	    	newRMMsgCtx.setMessageContext(msgCtx);
-	    
-	    return newRMMsgCtx;	
+		if (rmMsgContext.getMessageContext() != null)
+			msgCtx = deepCopy(rmMsgContext.getMessageContext());
+
+		RMMsgContext newRMMsgCtx = new RMMsgContext();
+		if (msgCtx != null)
+			newRMMsgCtx.setMessageContext(msgCtx);
+
+		return newRMMsgCtx;
 	}
-	
-	public static void startSenderIfStopped (ConfigurationContext context) {
+
+	public static void startSenderIfStopped(ConfigurationContext context) {
 		if (!sender.isSenderStarted()) {
 			sender.start(context);
 		}

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AcknowledgementRange.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AcknowledgementRange.java?rev=292160&r1=292159&r2=292160&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AcknowledgementRange.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AcknowledgementRange.java Wed Sep 28 03:47:35 2005
@@ -19,7 +19,9 @@
 import java.util.Iterator;
 
 import javax.xml.namespace.QName;
+import javax.xml.stream.FactoryConfigurationError;
 import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.axis2.om.OMAbstractFactory;
@@ -70,10 +72,24 @@
 		if (ackRangePart == null)
 			throw new OMException("The passed element is null");
 
+		
+		// serializing
+		try {
+			XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
+			ackRangePart.serialize(writer);
+		} catch (XMLStreamException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		} catch (FactoryConfigurationError e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+		
+		
 		OMAttribute lowerAttrib = ackRangePart.getAttribute(new QName(
-				Constants.WSRM.LOWER));
+				Constants.WSRM.NS_URI_RM,Constants.WSRM.LOWER));
 		OMAttribute upperAttrib = ackRangePart.getAttribute(new QName(
-				Constants.WSRM.UPPER));
+				Constants.WSRM.NS_URI_RM,Constants.WSRM.UPPER));
 
 		if (lowerAttrib == null || upperAttrib == null)
 			throw new OMException(

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/RMElements.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/RMElements.java?rev=292160&r1=292159&r2=292160&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/RMElements.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/RMElements.java Wed Sep 28 03:47:35 2005
@@ -67,7 +67,7 @@
 								Constants.WSRM.SEQUENCE_ACK));
 		if (sequenceAckElement != null) {
 			sequenceAcknowledgement = new SequenceAcknowledgement();
-			sequence.fromOMElement(envelope.getHeader());
+			sequenceAcknowledgement.fromOMElement(envelope.getHeader());
 		}
 
 		OMElement createSeqElement = envelope.getBody().getFirstChildWithName(



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