You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2013/10/29 16:20:16 UTC

svn commit: r1536747 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/

Author: sergeyb
Date: Tue Oct 29 15:20:15 2013
New Revision: 1536747

URL: http://svn.apache.org/r1536747
Log:
[CXF-5347] Making sure matrix params do not interfere with RequestPreprocessor handling extensions

Added:
    cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_atom_book_json_matrix.txt   (with props)
Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/PathSegmentImpl.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java
    cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAtomBookTest.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/PathSegmentImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/PathSegmentImpl.java?rev=1536747&r1=1536746&r2=1536747&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/PathSegmentImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/PathSegmentImpl.java Tue Oct 29 15:20:15 2013
@@ -56,6 +56,15 @@ public class PathSegmentImpl implements 
         return path;
     }
     
+    public String getMatrixString() {
+        int index = path.indexOf(';');
+        if (index == -1) {
+            return null;
+        } else {
+            return path.substring(index);
+        }
+    }
+    
     public String toString() {
         return path;
     }

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java?rev=1536747&r1=1536746&r2=1536747&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java Tue Oct 29 15:20:15 2013
@@ -79,23 +79,31 @@ public class RequestPreprocessor {
     }
     
     private void handleLanguageMappings(Message m, UriInfo uriInfo) {
-        String path = uriInfo.getPath(false);
+        if (languageMappings.isEmpty()) {
+            return;
+        }
+        PathSegmentImpl ps = new PathSegmentImpl(uriInfo.getPath(false));
+        String path = ps.getPath();
         for (Map.Entry<?, ?> entry : languageMappings.entrySet()) {
             if (path.endsWith("." + entry.getKey())) {
                 updateAcceptLanguageHeader(m, entry.getValue().toString());
-                updatePath(m, path, entry.getKey().toString());
+                updatePath(m, path, entry.getKey().toString(), ps.getMatrixString());
                 break;
             }    
         }
     }
     
     private void handleExtensionMappings(Message m, UriInfo uriInfo) {
-        String path = uriInfo.getPath(false);
+        if (extensionMappings.isEmpty()) {
+            return;
+        }
+        PathSegmentImpl ps = new PathSegmentImpl(uriInfo.getPath(false));
+        String path = ps.getPath();
         for (Map.Entry<?, ?> entry : extensionMappings.entrySet()) {
             String key = entry.getKey().toString();
             if (path.endsWith("." + key)) {
                 updateAcceptTypeHeader(m, entry.getValue().toString());
-                updatePath(m, path, key);
+                updatePath(m, path, key, ps.getMatrixString());
                 if ("wadl".equals(key)) {
                     // the path has been updated and Accept was not necessarily set to 
                     // WADL type (xml or json or html - other options)
@@ -126,8 +134,11 @@ public class RequestPreprocessor {
             .put(HttpHeaders.ACCEPT_LANGUAGE, acceptLanguage);
     }
     
-    private void updatePath(Message m, String path, String suffix) {
+    private void updatePath(Message m, String path, String suffix, String matrixString) {
         String newPath = path.substring(0, path.length() - (suffix.length() + 1));
+        if (matrixString != null) {
+            newPath += matrixString;
+        }
         HttpUtils.updatePath(m, newPath);
     }
     

Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAtomBookTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAtomBookTest.java?rev=1536747&r1=1536746&r2=1536747&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAtomBookTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAtomBookTest.java Tue Oct 29 15:20:15 2013
@@ -100,6 +100,10 @@ public class JAXRSAtomBookTest extends A
         getAndCompareJson("http://localhost:" + PORT + "/bookstore/bookstore/books/entries/123.json",
                                "resources/expected_atom_book_json.txt",
                                "*/*");
+        // do the same using extension mappings & matrix parameters
+        getAndCompareJson("http://localhost:" + PORT + "/bookstore/bookstore/books/entries/123.json;a=b",
+                               "resources/expected_atom_book_json_matrix.txt",
+                               "*/*");
         
         
     }

Added: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_atom_book_json_matrix.txt
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_atom_book_json_matrix.txt?rev=1536747&view=auto
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_atom_book_json_matrix.txt (added)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_atom_book_json_matrix.txt Tue Oct 29 15:20:15 2013
@@ -0,0 +1,14 @@
+{
+ "id":"123",
+ "title":"CXF in Action",
+ "content":{
+  "attributes":{
+   "type":"application/xml"
+  },
+  "children":["<Book><id>123<\/id><name>CXF in Action<\/name><\/Book>"
+  ]
+ },
+ "attributes":{
+  "xml:base":"http://localhost:9080/bookstore/bookstore/books/entries/123;a=b"
+ }
+}
\ No newline at end of file

Propchange: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_atom_book_json_matrix.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_atom_book_json_matrix.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain