You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by rw...@apache.org on 2014/05/28 16:15:40 UTC

svn commit: r1598019 - /stanbol/branches/release-0.12/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java

Author: rwesten
Date: Wed May 28 14:15:40 2014
New Revision: 1598019

URL: http://svn.apache.org/r1598019
Log:
fix for STANBOL-1350

Modified:
    stanbol/branches/release-0.12/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java

Modified: stanbol/branches/release-0.12/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java
URL: http://svn.apache.org/viewvc/stanbol/branches/release-0.12/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java?rev=1598019&r1=1598018&r2=1598019&view=diff
==============================================================================
--- stanbol/branches/release-0.12/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java (original)
+++ stanbol/branches/release-0.12/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java Wed May 28 14:15:40 2014
@@ -19,7 +19,15 @@ package org.apache.stanbol.commons.httpq
 import static org.apache.stanbol.commons.httpqueryheaders.Constants.HEARDER_PREFIX;
 
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -55,17 +63,18 @@ public class QueryHeadersFilter implemen
             return;
         }
         OverwriteableHeaderHttpServletRequest wrapped = null;
-        Enumeration<String> paramNames = request.getParameterNames();
-        while(paramNames.hasMoreElements()) {
-            String param = paramNames.nextElement();
+        
+        Map<String,List<String>> queryParams = parseQueryParams(httpRequest.getQueryString());
+        for(Entry<String,List<String>> entry : queryParams.entrySet()){
+            String param = entry.getKey();
             if(param != null && param.startsWith(HEARDER_PREFIX) && param.length() > HEARDER_PREFIX.length()+1){
                 String header = param.substring(HEARDER_PREFIX.length());
-                String[] values = request.getParameterValues(param);
-                if(values != null && values.length > 0){
+                List<String> values = entry.getValue();
+                if(values != null && !values.isEmpty()){
                     if(wrapped == null ){ //lazzy initialisation 
                         wrapped = new OverwriteableHeaderHttpServletRequest(httpRequest);
                     }
-                    wrapped.setHeader(header, values);
+                    wrapped.setHeader(header, values.toArray(new String[values.size()]));
                 }
             }
         }
@@ -81,5 +90,35 @@ public class QueryHeadersFilter implemen
         // Get properties parsed to the Filter
         //filterConfig
     }
-
+    private static Map<String, List<String>> parseQueryParams(String query){
+        if(query == null){
+            return Collections.emptyMap();
+        }
+        String[] params;
+        try {
+            params = URLDecoder.decode(query, "UTF-8").split("&");
+        } catch (UnsupportedEncodingException e) {
+            throw new IllegalStateException(e.getMessage(),e);
+        }
+        Map<String, List<String>> map = new HashMap<String, List<String>>();
+        for (String param : params) {
+            int idx = param.indexOf('=');
+            String name;
+            String value;
+            if(idx < 0 ){
+                name = param;
+                value = null;
+            } else {
+                name = param.substring(0, idx);
+                value = param.substring(idx+1);
+            }
+            List<String> values = map.get(name);
+            if(values == null){
+                values = new ArrayList<String>(4);
+                map.put(name, values);
+            }
+            values.add(value);
+        }
+        return map;
+    }
 }