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/11/22 13:13:39 UTC

svn commit: r348154 - in /webservices/sandesha/trunk/src/org/apache/sandesha2: handlers/SandeshaGlobalInHandler.java util/RMMsgCreator.java util/SandeshaUtil.java

Author: chamikara
Date: Tue Nov 22 04:12:21 2005
New Revision: 348154

URL: http://svn.apache.org/viewcvs?rev=348154&view=rev
Log:
Corrected some invalid 'Int' dependencies in methods that manupilate messagenumbers. Since messageNumbers can take 'Long' values the logic had to be carefully designed.

Modified:
    webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java

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=348154&r1=348153&r2=348154&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java Tue Nov 22 04:12:21 2005
@@ -18,6 +18,7 @@
 package org.apache.sandesha2.handlers;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 
 import javax.xml.namespace.QName;
 
@@ -149,9 +150,15 @@
 					ArrayList msgNoArrList = SandeshaUtil
 							.getSplittedMsgNoArraylist(receivedMsgStr);
 
-					if (msgNoArrList.contains(new Long(msgNo).toString())) {
-						drop = true;
+					Iterator iterator = msgNoArrList.iterator();
+					while (iterator.hasNext()) {
+						String temp = (String) iterator.next();
+						String msgNoStr = new Long(msgNo).toString();
+						if (msgNoStr.equals(temp)) {
+							drop = true;
+						}
 					}
+					
 				}
 
 				if (drop == false) {

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=348154&r1=348153&r2=348154&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java Tue Nov 22 04:12:21 2005
@@ -18,8 +18,10 @@
 package org.apache.sandesha2.util;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 
 import javax.xml.namespace.QName;
+
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.addressing.MessageInformationHeaders;
@@ -27,12 +29,8 @@
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.context.ServiceContext;
-import org.apache.axis2.context.ServiceGroupContext;
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.description.AxisOperationFactory;
-import org.apache.axis2.description.AxisService;
-import org.apache.axis2.description.AxisServiceGroup;
-import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.soap.SOAPEnvelope;
 import org.apache.axis2.soap.SOAPFactory;
 import org.apache.sandesha2.Constants;
@@ -353,13 +351,12 @@
 				Constants.SequenceProperties.RECEIVED_MESSAGES);
 		String msgNoList = (String) seqBean.getValue();
 
-		AcknowledgementRange[] ackRangeArr = SandeshaUtil.getAckRangeArray(
-				msgNoList, factory);
-
-		int length = ackRangeArr.length;
-
-		for (int i = 0; i < length; i++)
-			sequenceAck.addAcknowledgementRanges(ackRangeArr[i]);
+		ArrayList ackRangeArrayList = SandeshaUtil.getAckRangeArrayList(msgNoList,factory);
+		Iterator iterator = ackRangeArrayList.iterator();
+		while (iterator.hasNext()) {
+			AcknowledgementRange ackRange = (AcknowledgementRange) iterator.next();
+			sequenceAck.addAcknowledgementRanges(ackRange);
+		}
 
 		sequenceAck.toOMElement(envelope.getHeader());
 		applicationMsg

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=348154&r1=348153&r2=348154&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java Tue Nov 22 04:12:21 2005
@@ -22,19 +22,17 @@
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Iterator;
+import java.util.StringTokenizer;
 
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamReader;
 
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.addressing.MessageInformationHeaders;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.description.AxisOperation;
-import org.apache.axis2.description.TransportInDescription;
-import org.apache.axis2.description.TransportOutDescription;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.om.OMElement;
 import org.apache.axis2.om.impl.llom.builder.StAXBuilder;
@@ -43,13 +41,13 @@
 import org.apache.axis2.soap.SOAP12Constants;
 import org.apache.axis2.soap.SOAPEnvelope;
 import org.apache.axis2.soap.SOAPFactory;
+import org.apache.axis2.soap.SOAPHeader;
 import org.apache.axis2.soap.impl.llom.builder.StAXSOAPModelBuilder;
 import org.apache.axis2.soap.impl.llom.soap11.SOAP11Factory;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.transport.http.HTTPTransportUtils;
 import org.apache.axis2.util.UUIDGenerator;
 import org.apache.axis2.util.Utils;
-import org.apache.commons.httpclient.NameValuePair;
 import org.apache.sandesha2.Constants;
 import org.apache.sandesha2.RMMsgContext;
 import org.apache.sandesha2.SandeshaDynamicProperties;
@@ -80,86 +78,96 @@
 		return uuid;
 	}
 
-	public static AcknowledgementRange[] getAckRangeArray(String msgNoStr,
-			SOAPFactory factory) {
-		String[] msgNoStrs = msgNoStr.split(",");
-		long[] msgNos = getLongArr(msgNoStrs);
-
-		long[] sortedMsgNos = sort(msgNos);
-
-		int length = sortedMsgNos.length;
-		if (length == 0)
-			return null;
-		//for (int i=0;i<length;i++)
-		//	System.out.println (sortedMsgNos[i]);
+	public static ArrayList getAckRangeArrayList(String msgNoStr,
+			SOAPFactory factory) throws SandeshaException {
 
 		ArrayList ackRanges = new ArrayList();
-		// upper = 0;
-		long lower = sortedMsgNos[0];
-		//long max = sortedMsgNos[sortedMsgNos.length];
-		long temp = sortedMsgNos[0];
-
-		for (long i = 1; i < length; i++) {
-			int intI = (int) i;
-			if ((sortedMsgNos[intI] == (temp + 1))
-					|| (sortedMsgNos[intI] == (temp))) {
-				temp = sortedMsgNos[intI];
-				continue;
+
+		StringTokenizer tokenizer = new StringTokenizer(msgNoStr, ",");
+		ArrayList sortedMsgNoArrayList = getSortedMsgNoArrayList(tokenizer);
+
+		Iterator iterator = sortedMsgNoArrayList.iterator();
+		long lower = 0;
+		long upper = 0;
+		boolean completed = true;
+
+		while (iterator.hasNext()) {
+			Long tempLng = (Long) iterator.next();
+			long temp = tempLng.longValue();
+			if (lower == 0) {
+				lower = temp;
+				upper = temp;
+				completed = false;
+			} else if (temp == (upper + 1)) {
+				upper = temp;
+				completed = false;
+			} else {
+				//add ackRange (lower,upper)
+				AcknowledgementRange ackRange = new AcknowledgementRange(
+						factory);
+				ackRange.setLowerValue(lower);
+				ackRange.setUpperValue(upper);
+				ackRanges.add(ackRange);
+
+				lower = temp;
+				upper = temp;
+				completed = false;
 			}
+		}
 
+		if (!completed) {
 			AcknowledgementRange ackRange = new AcknowledgementRange(factory);
 			ackRange.setLowerValue(lower);
-			ackRange.setUpperValue(temp);
+			ackRange.setUpperValue(upper);
 			ackRanges.add(ackRange);
-
-			lower = sortedMsgNos[intI];
-			temp = sortedMsgNos[intI];
-
+			completed = true;
 		}
 
-		AcknowledgementRange ackRange = new AcknowledgementRange(factory);
-		ackRange.setLowerValue(lower);
-		ackRange.setUpperValue(temp);
-		ackRanges.add(ackRange);
-
-		Object[] objs = ackRanges.toArray();
-		int l = objs.length;
-		AcknowledgementRange[] ackRangeArr = new AcknowledgementRange[l];
-		for (int i = 0; i < l; i++)
-			ackRangeArr[i] = (AcknowledgementRange) objs[i];
-
-		return ackRangeArr;
+		return ackRanges;
 	}
 
-	//	TODO remove int from folowing methods. (to make them truly Long :) )
+	private static ArrayList getSortedMsgNoArrayList(StringTokenizer tokenizer)
+			throws SandeshaException {
+		ArrayList msgNubers = new ArrayList();
 
-	private static long[] sort(long[] input) {
-		int length = input.length;
+		while (tokenizer.hasMoreElements()) {
+			String temp = tokenizer.nextToken();
 
-		long temp = 0;
-		for (int i = 0; i < length; i++) {
-			temp = 0;
-			for (int j = i; j < length; j++) {
-				if (input[j] < input[i]) {
-					//swap
-					temp = input[i];
-					input[i] = input[j];
-					input[j] = temp;
-				}
+			try {
+				long msgNo = Long.parseLong(temp);
+				msgNubers.add(new Long(msgNo));
+			} catch (Exception ex) {
+				throw new SandeshaException("Invalid msg number list");
 			}
 		}
 
-		return input;
+		ArrayList sortedMsgNumberList = sort(msgNubers);
+		return sortedMsgNumberList;
 	}
 
-	public static long[] getLongArr(String[] strings) {
-		int length = strings.length;
-		long[] longs = new long[length];
-		for (int i = 0; i < length; i++) {
-			longs[i] = Long.parseLong(strings[i]);
+	public static ArrayList sort(ArrayList list) {
+
+		ArrayList sortedList = new ArrayList();
+
+		long max = 0;
+		Iterator it1 = list.iterator();
+		while (it1.hasNext()) {
+			Long tempLng = (Long) it1.next();
+			long temp = tempLng.longValue();
+			if (temp > max)
+				max = temp;
 		}
 
-		return longs;
+		int item = 0;
+		for (long i = 1; i <= max; i++) {
+			Long temp = new Long(i);
+			if (list.contains(temp)) {
+				sortedList.add(item, temp);
+				item++;
+			}
+		}
+
+		return sortedList;
 	}
 
 	public static String storeMessageContext(MessageContext ctx)
@@ -312,13 +320,13 @@
 
 	//TODO: correct following to work for long.
 	public static ArrayList getSplittedMsgNoArraylist(String str) {
-		String[] splitted = str.split(",");
+
+		StringTokenizer tokenizer = new StringTokenizer(str, ",");
+
 		ArrayList results = new ArrayList();
 
-		long count = splitted.length;
-		for (int i = 0; i < count; i++) {
-			String s = splitted[i];
-			results.add(s);
+		while (tokenizer.hasMoreTokens()) {
+			results.add(tokenizer.nextToken());
 		}
 
 		return results;
@@ -397,8 +405,14 @@
 
 		String action = msgCtx.getWSAAction();
 		SOAPEnvelope env = msgCtx.getEnvelope();
-		OMElement sequenceElem = env.getFirstChildWithName(new QName(
-				Constants.WSRM.NS_URI_RM, Constants.WSRM.SEQUENCE));
+		SOAPHeader header = null;
+		if (env != null)
+			header = env.getHeader();
+
+		OMElement sequenceElem = null;
+		if (header != null)
+			sequenceElem = header.getFirstChildWithName(new QName(
+					Constants.WSRM.NS_URI_RM, Constants.WSRM.SEQUENCE));
 
 		if (sequenceElem != null)
 			rmGlobalMsg = true;
@@ -441,18 +455,31 @@
 					.getSystemContext();
 			MessageContext newMessageContext = new MessageContext(configContext);
 
-			newMessageContext.setAxisServiceGroup(referenceMessage
-					.getAxisServiceGroup());
-			newMessageContext.setAxisService(referenceMessage.getAxisService());
+			if (referenceMessage.getAxisServiceGroup() != null) {
+				newMessageContext.setAxisServiceGroup(referenceMessage
+						.getAxisServiceGroup());
+			}
+
+			if (referenceMessage.getAxisService() != null) {
+				newMessageContext.setAxisService(referenceMessage
+						.getAxisService());
+			}
+
 			newMessageContext.setAxisOperation(operation);
-			newMessageContext.setServiceGroupContext(referenceMessage
-					.getServiceGroupContext());
-			newMessageContext.setServiceGroupContextId(referenceMessage
-					.getServiceGroupContextId());
-			newMessageContext.setServiceContext(referenceMessage
-					.getServiceContext());
-			newMessageContext.setServiceContextID(referenceMessage
-					.getServiceContextID());
+
+			if (referenceMessage.getServiceGroupContext() != null) {
+				newMessageContext.setServiceGroupContext(referenceMessage
+						.getServiceGroupContext());
+				newMessageContext.setServiceGroupContextId(referenceMessage
+						.getServiceGroupContextId());
+			}
+
+			if (referenceMessage.getServiceContext() != null) {
+				newMessageContext.setServiceContext(referenceMessage
+						.getServiceContext());
+				newMessageContext.setServiceContextID(referenceMessage
+						.getServiceContextID());
+			}
 
 			OperationContext operationContext = new OperationContext(operation);
 			newMessageContext.setOperationContext(operationContext);



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