You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by yo...@apache.org on 2007/04/01 05:43:43 UTC
svn commit: r524524 - in /lucene/solr/trunk/src:
test/org/apache/solr/servlet/SolrRequestParserTest.java
webapp/src/org/apache/solr/servlet/SolrRequestParsers.java
Author: yonik
Date: Sat Mar 31 20:43:42 2007
New Revision: 524524
URL: http://svn.apache.org/viewvc?view=rev&rev=524524
Log:
fix queryString parsing to handle UTF8 (percent encoded): SOLR-202
Modified:
lucene/solr/trunk/src/test/org/apache/solr/servlet/SolrRequestParserTest.java
lucene/solr/trunk/src/webapp/src/org/apache/solr/servlet/SolrRequestParsers.java
Modified: lucene/solr/trunk/src/test/org/apache/solr/servlet/SolrRequestParserTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/servlet/SolrRequestParserTest.java?view=diff&rev=524524&r1=524523&r2=524524
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/servlet/SolrRequestParserTest.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/servlet/SolrRequestParserTest.java Sat Mar 31 20:43:42 2007
@@ -17,7 +17,6 @@
package org.apache.solr.servlet;
-import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
@@ -25,20 +24,13 @@
import java.util.List;
import java.util.Map;
-import javax.servlet.http.HttpServletRequestWrapper;
-
import org.apache.commons.io.IOUtils;
-import org.apache.solr.core.Config;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.SolrCore;
-import org.apache.solr.util.ContentStream;
-import org.apache.solr.request.MapSolrParams;
import org.apache.solr.request.MultiMapSolrParams;
import org.apache.solr.request.SolrParams;
-import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.util.AbstractSolrTestCase;
-
-import junit.framework.TestCase;
+import org.apache.solr.util.ContentStream;
public class SolrRequestParserTest extends AbstractSolrTestCase {
@@ -118,5 +110,21 @@
parser.buildRequestFrom( new MultiMapSolrParams( args ), streams );
assertEquals( 1, streams.size() );
assertEquals( txt, IOUtils.toString( streams.get(0).getStream() ) );
+ }
+
+ public void testUrlParamParsing()
+ {
+ String[][] teststr = new String[][] {
+ { "this is simple", "this%20is%20simple" },
+ { "this is simple", "this+is+simple" },
+ { "\u00FC", "%C3%BC" }, // lower-case "u" with diaeresis/umlaut
+ { "\u0026", "%26" }, // &
+ { "\u20AC", "%E2%82%AC" } // euro
+ };
+
+ for( String[] tst : teststr ) {
+ MultiMapSolrParams params = SolrRequestParsers.parseQueryString( "val="+tst[1] );
+ assertEquals( tst[0], params.get( "val" ) );
+ }
}
}
Modified: lucene/solr/trunk/src/webapp/src/org/apache/solr/servlet/SolrRequestParsers.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/webapp/src/org/apache/solr/servlet/SolrRequestParsers.java?view=diff&rev=524524&r1=524523&r2=524524
==============================================================================
--- lucene/solr/trunk/src/webapp/src/org/apache/solr/servlet/SolrRequestParsers.java (original)
+++ lucene/solr/trunk/src/webapp/src/org/apache/solr/servlet/SolrRequestParsers.java Sat Mar 31 20:43:42 2007
@@ -21,6 +21,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
+import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
@@ -178,17 +179,22 @@
{
Map<String,String[]> map = new HashMap<String, String[]>();
if( queryString != null && queryString.length() > 0 ) {
- for( String kv : queryString.split( "&" ) ) {
- int idx = kv.indexOf( '=' );
- if( idx > 0 ) {
- String name = URLDecoder.decode( kv.substring( 0, idx ));
- String value = URLDecoder.decode( kv.substring( idx+1 ));
- MultiMapSolrParams.addParam( name, value, map );
- }
- else {
- String name = URLDecoder.decode( kv );
- MultiMapSolrParams.addParam( name, "", map );
+ try {
+ for( String kv : queryString.split( "&" ) ) {
+ int idx = kv.indexOf( '=' );
+ if( idx > 0 ) {
+ String name = URLDecoder.decode( kv.substring( 0, idx ), "UTF-8");
+ String value = URLDecoder.decode( kv.substring( idx+1 ), "UTF-8");
+ MultiMapSolrParams.addParam( name, value, map );
+ }
+ else {
+ String name = URLDecoder.decode( kv, "UTF-8" );
+ MultiMapSolrParams.addParam( name, "", map );
+ }
}
+ }
+ catch( UnsupportedEncodingException uex ) {
+ throw new SolrException( 500, uex );
}
}
return new MultiMapSolrParams( map );