You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by di...@apache.org on 2005/07/16 00:59:36 UTC
svn commit: r219254 -
/geronimo/trunk/specs/javamail/src/java/javax/mail/internet/ParameterList.java
Author: dims
Date: Fri Jul 15 15:59:35 2005
New Revision: 219254
URL: http://svn.apache.org/viewcvs?rev=219254&view=rev
Log:
Fix parsing problem GERONIMO-764
Modified:
geronimo/trunk/specs/javamail/src/java/javax/mail/internet/ParameterList.java
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/internet/ParameterList.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/internet/ParameterList.java?rev=219254&r1=219253&r2=219254&view=diff
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/internet/ParameterList.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/internet/ParameterList.java Fri Jul 15 15:59:35 2005
@@ -23,14 +23,14 @@
import java.util.Iterator;
import java.util.Map;
import java.util.StringTokenizer;
-
-// Represents lists in things like
+import java.util.List;
+import java.util.ArrayList;// Represents lists in things like
// Content-Type: text/plain;charset=klingon
//
// The ;charset=klingon is the parameter list, may have more of them with ';'
/**
- * @version $Rev$ $Date$
+ * @version $Rev: 179695 $ $Date: 2005-06-02 21:45:02 -0400 (Thu, 02 Jun 2005) $
*/
public class ParameterList {
private Map _parameters = new HashMap();
@@ -42,9 +42,9 @@
if (list == null) {
return;
} else {
- StringTokenizer tokenizer = new StringTokenizer(list, ";");
- while (tokenizer.hasMoreTokens()) {
- String parameter = tokenizer.nextToken();
+ String[] tokens = split(list,';');
+ for (int i=0;tokens != null && i<tokens.length;i++) {
+ String parameter = tokens[i];
int eq = parameter.indexOf("=");
if (eq == -1) {
throw new ParseException(parameter);
@@ -93,6 +93,47 @@
}
return result.toString();
// TODO Return in same list as parsed format
+ }
+
+ public static String[] split(String str, char separatorChar) {
+ if (str == null) {
+ return null;
+ }
+ int len = str.length();
+ if (len == 0) {
+ return new String[0];
+ }
+ List list = new ArrayList();
+ int i = 0, start = 0;
+ boolean match = false;
+ while (i < len) {
+ char ch = str.charAt(i);
+ // Skip any separatorChar within quotes
+ if(ch == '\"') {
+ i++;
+ while(i < len && str.charAt(i) != '\"'){
+ i++;
+ }
+ if(i < len){
+ i++;
+ continue;
+ }
+ }
+ if (ch == separatorChar) {
+ if (match) {
+ list.add(str.substring(start, i));
+ match = false;
+ }
+ start = ++i;
+ continue;
+ }
+ match = true;
+ i++;
+ }
+ if (match) {
+ list.add(str.substring(start, i));
+ }
+ return (String[]) list.toArray(new String[list.size()]);
}
public String toString(int lineBreak) {