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 2013/10/23 09:14:44 UTC

svn commit: r1534931 - /stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java

Author: rwesten
Date: Wed Oct 23 07:14:44 2013
New Revision: 1534931

URL: http://svn.apache.org/r1534931
Log:
STANBOL-1094: Worked around an issue (or Jersey bug) that caused UriInfo.getPathParameter() to return an empty map! Because of that ContentItem URIs parsed in the request where not set. This should be a temporal workaround!

Modified:
    stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java

Modified: stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java?rev=1534931&r1=1534930&r2=1534931&view=diff
==============================================================================
--- stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java (original)
+++ stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java Wed Oct 23 07:14:44 2013
@@ -24,8 +24,13 @@ import static org.apache.stanbol.enhance
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -250,8 +255,40 @@ public class ContentItemReader implement
      */
     private UriRef getContentItemId() {
         //NOTE: check for request NULL is needed because of unit tests
-        if (uriInfo == null) return null;        
-        final String ciUri = uriInfo.getPathParameters().getFirst("uri");
+        if (uriInfo == null) return null;
+        URI uri = uriInfo.getRequestUri();
+        String query = uri.getQuery();
+        log.debug("parse ContentItem ID from URI: {}",uri);
+        //TODO: workaround for uriInfo.getPathParameters() not working as expected
+        //MultivaluedMap<String,String> params = uriInfo.getPathParameters();
+        //final String ciUri = params.getFirst("uri");
+        String ciUri = null; //parse the uri parameter manually from the request URI
+        if(query != null){
+            int index = query.indexOf("uri=");
+            if(index >= 0){
+               index = index+4; //add "uri=".length
+               int endIndex = query.indexOf('&', index);
+               if(endIndex <= index){
+                   endIndex = query.length();
+               }
+               if(index < endIndex){
+                   try {
+                    ciUri = URLDecoder.decode(query.substring(index, endIndex), "UTF-8");
+                } catch (UnsupportedEncodingException e) {
+                    throw new IllegalStateException(e); //should never happen
+                }
+               }
+            }
+        }
+        if(ciUri != null){
+            try { //validate the parsed URI
+                new URI(ciUri);
+            } catch (URISyntaxException e) {
+               throw new WebApplicationException("The parsed ContentItem URI '"
+                       + ciUri +"' is not a valid URI. Please check the value "
+                       + "of the 'uri' parameter",Response.Status.BAD_REQUEST);
+            }
+        }
         return ciUri == null ? null : new UriRef(ciUri);
     }
     /**