Author: rwesten
Date: Wed May 28 14:32:48 2014
New Revision: 1598026

URL: http://svn.apache.org/r1598026
Log:
merged fixes for STANBOL-1349 and STANBOL-1350 to trunk

Modified:
    stanbol/trunk/   (props changed)
    stanbol/trunk/commons/   (props changed)
    
stanbol/trunk/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java
    
stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/GenericEnhancerUiResource.java

Propchange: stanbol/trunk/
------------------------------------------------------------------------------
  Merged /stanbol/branches/release-0.12:r1598019

Propchange: stanbol/trunk/commons/
------------------------------------------------------------------------------
  Merged /stanbol/branches/release-0.12/commons:r1598019

Modified: 
stanbol/trunk/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java?rev=1598026&r1=1598025&r2=1598026&view=diff
==============================================================================
--- 
stanbol/trunk/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java
 (original)
+++ 
stanbol/trunk/commons/httpqueryheaders/src/main/java/org/apache/stanbol/commons/httpqueryheaders/impl/QueryHeadersFilter.java
 Wed May 28 14:32:48 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;
+    }
 }

Modified: 
stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/GenericEnhancerUiResource.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/GenericEnhancerUiResource.java?rev=1598026&r1=1598025&r2=1598026&view=diff
==============================================================================
--- 
stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/GenericEnhancerUiResource.java
 (original)
+++ 
stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/GenericEnhancerUiResource.java
 Wed May 28 14:32:48 2014
@@ -129,6 +129,19 @@ public class GenericEnhancerUiResource e
                                     @Context HttpHeaders headers) throws 
EnhancementException,
                                                                          
IOException {
         log.info("enhance from From: " + content);
+        if(content == null){ //(STANBOL-1349) parsing content using 
+            // 'application/x-www-form-urlencoded' is not (officially) 
supported.
+            // ... unofficial it can be done by adding the content as value to 
the
+            //     content parameter
+            throw new WebApplicationException( 
+                Response.status(Response.Status.UNSUPPORTED_MEDIA_TYPE)
+                .entity("Parsing Content as 
'application/x-www-form-urlencoded' is not supported!"
+                    + "Please directly POST the content and set the 
'Content-Type' "
+                    + "header to the media type of the parsed content. 
'application/"
+                    + "octet-stream' SHOULD BE used if the media type of the 
parsed "
+                    + "content is not known.\n")
+                .build());
+        }
         ContentItem ci = ciFactory.createContentItem(new 
StringSource(content));
         if(!buildAjaxview){ //rewrite to a normal EnhancementRequest
             return enhanceFromData(ci, false, null, false, null, false, null, 
headers);


Reply via email to