Author: schor Date: Thu Mar 24 15:18:55 2011 New Revision: 1084994 URL: http://svn.apache.org/viewvc?rev=1084994&view=rev Log: [UIMA-2097] fix URI handling with quoted otherwise illegal chars
Modified: uima/sandbox/trunk/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CFEConfigFromXML_XMLBeans.java Modified: uima/sandbox/trunk/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CFEConfigFromXML_XMLBeans.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CFEConfigFromXML_XMLBeans.java?rev=1084994&r1=1084993&r2=1084994&view=diff ============================================================================== --- uima/sandbox/trunk/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CFEConfigFromXML_XMLBeans.java (original) +++ uima/sandbox/trunk/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CFEConfigFromXML_XMLBeans.java Thu Mar 24 15:18:55 2011 @@ -23,6 +23,7 @@ import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.net.URL; import java.util.ArrayList; import java.util.List; @@ -56,7 +57,7 @@ public class CFEConfigFromXML_XMLBeans List<String> vals = efvs_xml.getValuesList(); if ((1 == vals.size()) && (vals.get(0).startsWith("file://"))) { - return new EnumFeatureValues(new URI(vals.get(0)).getPath(), efvs_xml.getCaseSensitive()); + return new EnumFeatureValues(quote(vals.get(0)).getPath(), efvs_xml.getCaseSensitive()); } return new EnumFeatureValues(vals, efvs_xml.getCaseSensitive()); } @@ -211,4 +212,43 @@ public class CFEConfigFromXML_XMLBeans { return m_CFEDescriptor.getNullValueImage(); } + + // Maintainer note: remove these methods once base sdk 2.3.2 is released, and switch + // to using these methods from there + /** + * Create a URI from a string, with proper quoting. + * Already quoted things in the input string are not re-quoted. + * There are several cases: + * String has no characters needing quoting + * String has chars needing quoting, but no chars are currently quoted (e.g. %20) + * String has quoted (e.g. %20) characters but no other chars needing quoting + * String has quoted (e.g. %20) characters and chars needing quoting, not currently quoted + * -- this case will throw an exception + * @param s + * @return URI with proper quoting + * @throws URISyntaxException + */ + private static URI quote (String s) throws URISyntaxException { + if (-1 == s.indexOf('%')) { + // 3 argument constructor does any needed quoting of otherwise illegal chars + // https://issues.apache.org/jira/browse/UIMA-2097 + return new URI(null, s, null); + } + + // assume s already has all otherwise illegal chars properly quoted + return new URI(s); + } + + /** + * Create a URI from a URL, with proper quoting. + * Already quoted things in the input string are not re-quoted. + * @param u + * @return URI with proper quoting + * @throws URISyntaxException + */ + + private static URI quote(URL u) throws URISyntaxException { + return quote(u.toString()); + } + }