Author: sergeyb
Date: Sat Jul 16 23:24:23 2011
New Revision: 1147504

URL: http://svn.apache.org/viewvc?rev=1147504&view=rev
Log:
[CXF-3660] Fixing JAXRS proxies to ignore single slash path values

Modified:
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
    
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
    
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=1147504&r1=1147503&r2=1147504&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
 Sat Jul 16 23:24:23 2011
@@ -72,6 +72,7 @@ public class ClientProxyImpl extends Abs
 
     private static final Logger LOG = 
LogUtils.getL7dLogger(ClientProxyImpl.class);
     private static final ResourceBundle BUNDLE = 
BundleUtils.getBundle(ClientProxyImpl.class);
+    private static final String SLASH = "/";
     
     private ClassResourceInfo cri;
     private boolean inheritHeaders;
@@ -141,9 +142,10 @@ public class ClientProxyImpl extends Abs
         
         UriBuilder builder = getCurrentBuilder().clone(); 
         if (isRoot) {
-            
builder.path(ori.getClassResourceInfo().getURITemplate().getValue());
+            addNonEmptyPath(builder, 
ori.getClassResourceInfo().getURITemplate().getValue());
         }
-        builder.path(ori.getURITemplate().getValue());
+        addNonEmptyPath(builder, ori.getURITemplate().getValue());
+        
         handleMatrixes(types, params, builder);
         handleQueries(types, params, builder);
         
@@ -187,6 +189,12 @@ public class ClientProxyImpl extends Abs
         
     }
 
+    private void addNonEmptyPath(UriBuilder builder, String pathValue) {
+        if (!SLASH.equals(pathValue)) {
+            builder.path(pathValue);
+        }
+    }
+    
     private static MultivaluedMap<ParameterType, Parameter> 
getParametersInfo(OperationResourceInfo ori) {
         MultivaluedMap<ParameterType, Parameter> map = 
             new MetadataMap<ParameterType, Parameter>();

Modified: 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java?rev=1147504&r1=1147503&r2=1147504&view=diff
==============================================================================
--- 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
 (original)
+++ 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
 Sat Jul 16 23:24:23 2011
@@ -65,6 +65,7 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.StreamingOutput;
 import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@@ -95,6 +96,8 @@ public class BookStore {
     private HttpHeaders httpHeaders;
     @Context 
     private SecurityContext securityContext;
+    @Context 
+    private UriInfo ui;
     
     public BookStore() {
         init();
@@ -122,7 +125,16 @@ public class BookStore {
     @POST
     @Path("emptypost")
     public void emptypost() {
-        System.out.println("empty post");
+        String uri = ui.getAbsolutePath().toString();
+        System.out.println(uri);
+        if (uri.endsWith("/")) {
+            throw new WebApplicationException(400);
+        }
+    }
+    
+    @POST
+    public void emptypostNoPath() {
+        emptypost();
     }
     
     @GET

Modified: 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java?rev=1147504&r1=1147503&r2=1147504&view=diff
==============================================================================
--- 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
 (original)
+++ 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
 Sat Jul 16 23:24:23 2011
@@ -597,8 +597,9 @@ public class JAXRSClientServerBookTest e
     
     @Test
     public void testEmptyPostProxy() throws Exception {
+        String address = "http://localhost:"; + PORT;
         JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); 
-        bean.setAddress("http://localhost:"; + PORT);
+        bean.setAddress(address);
         bean.setResourceClass(BookStore.class);
         BookStore store = bean.create(BookStore.class);
         store.emptypost();
@@ -606,6 +607,17 @@ public class JAXRSClientServerBookTest e
     }
     
     @Test
+    public void testEmptyPostProxy2() throws Exception {
+        String address = "http://localhost:"; + PORT;
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+        bean.setAddress(address);
+        bean.setResourceClass(BookStore.class);
+        BookStore store = bean.create(BookStore.class);
+        store.emptypostNoPath();
+        assertEquals(204, WebClient.client(store).getResponse().getStatus());
+    }
+    
+    @Test
     public void testGetBookByEncodedQuery() throws Exception {
         getAndCompareAsStrings("http://localhost:"; + PORT + 
"/bookstore/bookquery?"
                                + "urlid=http%3A%2F%2Ftest.com%2Frss%2F123",


Reply via email to