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 2012/03/12 12:50:58 UTC

svn commit: r1299640 - in /cxf/branches/2.3.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/ rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/ systests/j...

Author: sergeyb
Date: Mon Mar 12 11:50:57 2012
New Revision: 1299640

URL: http://svn.apache.org/viewvc?rev=1299640&view=rev
Log:
Merged revisions 1299639 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/branches/2.4.x-fixes

................
  r1299639 | sergeyb | 2012-03-12 11:48:07 +0000 (Mon, 12 Mar 2012) | 16 lines
  
  Merged revisions 1299637 via svnmerge from 
  https://svn.apache.org/repos/asf/cxf/branches/2.5.x-fixes
  
  ................
    r1299637 | sergeyb | 2012-03-12 11:45:34 +0000 (Mon, 12 Mar 2012) | 9 lines
    
    Merged revisions 1299635 via svnmerge from 
    https://svn.apache.org/repos/asf/cxf/trunk
    
    ........
      r1299635 | sergeyb | 2012-03-12 11:38:02 +0000 (Mon, 12 Mar 2012) | 1 line
      
      [CXF-4177] Fixing ClientProxyImpl to keep the correct order of path parameter values
    ........
  ................
................

Modified:
    cxf/branches/2.3.x-fixes/   (props changed)
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/BookStoreSubresourcesOnly.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresource.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresourceImpl.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Mar 12 11:50:57 2012
@@ -1,3 +1,3 @@
-/cxf/branches/2.4.x-fixes:1299093
-/cxf/branches/2.5.x-fixes:1299092
-/cxf/trunk:1298830
+/cxf/branches/2.4.x-fixes:1299093,1299639
+/cxf/branches/2.5.x-fixes:1299092,1299637
+/cxf/trunk:1298830,1299635

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=1299640&r1=1299639&r2=1299640&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java Mon Mar 12 11:50:57 2012
@@ -77,7 +77,7 @@ public class ClientProxyImpl extends Abs
     private ClassResourceInfo cri;
     private boolean inheritHeaders;
     private boolean isRoot;
-    private Map<String, Object> valuesMap;
+    private Map<String, Object> valuesMap = Collections.emptyMap();
     
     public ClientProxyImpl(URI baseURI, ClassResourceInfo cri, boolean isRoot, 
                            boolean inheritHeaders, Object... varValues) {
@@ -98,21 +98,23 @@ public class ClientProxyImpl extends Abs
     }
     
     private void initValuesMap(Object... varValues) {
-        if (isRoot && varValues.length != 0) {
-            valuesMap = new LinkedHashMap<String, Object>();
+        if (isRoot) {
             List<String> vars = cri.getURITemplate().getVariables();
+            valuesMap = new LinkedHashMap<String, Object>();
             for (int i = 0; i < vars.size(); i++) {
-                if (i < varValues.length) {
-                    valuesMap.put(vars.get(i), varValues[i]);
+                if (varValues.length > 0) {
+                    if (i < varValues.length) {
+                        valuesMap.put(vars.get(i), varValues[i]);
+                    } else {
+                        org.apache.cxf.common.i18n.Message msg = new org.apache.cxf.common.i18n.Message(
+                             "ROOT_VARS_MISMATCH", BUNDLE, vars.size(), varValues.length);
+                        LOG.info(msg.toString());
+                        break;
+                    }
                 } else {
-                    org.apache.cxf.common.i18n.Message msg = new org.apache.cxf.common.i18n.Message(
-                         "ROOT_VARS_MISMATCH", BUNDLE, vars.size(), varValues.length);
-                    LOG.info(msg.toString());
-                    break;
+                    valuesMap.put(vars.get(i), "");
                 }
             }
-        } else {
-            valuesMap = Collections.emptyMap();
         }
     }
     
@@ -326,40 +328,46 @@ public class ClientProxyImpl extends Abs
     private List<Object> getPathParamValues(MultivaluedMap<ParameterType, Parameter> map,
                                             Object[] params,
                                             OperationResourceInfo ori) {
-        List<Parameter> paramsList =  getParameters(map, ParameterType.PATH);
         List<Object> list = new LinkedList<Object>();
         if (isRoot) {
             list.addAll(valuesMap.values());
         }
-        List<String> vars = ori.getURITemplate().getVariables();
-        // TODO : unfortunately, UriBuilder will lose a method-scoped parameter 
-        // if a same name variable exists in a class scope which is an api bug.
-        // It's a rare case but we might want just to use UriBuilderImpl() directly 
-        // on the client side and tell it to choose the last variable value
+        List<String> methodVars = ori.getURITemplate().getVariables();
+        
+        List<Parameter> paramsList =  getParameters(map, ParameterType.PATH);
+        Map<String, Parameter> paramsMap = new LinkedHashMap<String, Parameter>();
         for (Parameter p : paramsList) {
-            if (valuesMap.containsKey(p.getName()) && !vars.contains(p.getName())) {
+            if (p.getName().length() == 0) {
+                MultivaluedMap<String, Object> values = 
+                    InjectionUtils.extractValuesFromBean(params[p.getIndex()], "");
+                for (String var : methodVars) {
+                    list.addAll(values.get(var));
+                }
+            } else {
+                paramsMap.put(p.getName(), p);
+            }
+        }
+        
+        for (String varName : methodVars) {
+            Parameter p = paramsMap.remove(varName);
+            if (p != null) {
+                list.add(params[p.getIndex()]);
+            }
+        }
+        
+        for (Parameter p : paramsMap.values()) {
+            if (valuesMap.containsKey(p.getName())) {
                 int index = 0; 
                 for (Iterator<String> it = valuesMap.keySet().iterator(); it.hasNext(); index++) {
-                    if (it.next().equals(p.getName())) {
+                    if (it.next().equals(p.getName()) && index < list.size()) {
                         list.remove(index);
                         list.add(index, params[p.getIndex()]);
                         break;
                     }
                 }
-            } else {
-                String paramName = p.getName();
-                if (!"".equals(paramName)) {
-                    list.add(params[p.getIndex()]);
-                } else {
-                    MultivaluedMap<String, Object> values = 
-                        InjectionUtils.extractValuesFromBean(params[p.getIndex()], "");
-                    for (String var : vars) {
-                        list.addAll(values.get(var));
-                    }
-                }
-                
-            }
+            }    
         }
+        
         return list;
     }
     

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java?rev=1299640&r1=1299639&r2=1299640&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java Mon Mar 12 11:50:57 2012
@@ -74,8 +74,19 @@ public class JAXRSClientFactoryBeanTest 
         bean.setAddress("http://bar");
         bean.setResourceClass(BookStoreSubresourcesOnly.class);
         BookStoreSubresourcesOnly store = bean.create(BookStoreSubresourcesOnly.class, 1, 2, 3);
-        BookStoreSubresourcesOnly store2 = store.getItself2("11", "33");
-        assertEquals("http://bar/bookstore/11/2/33/sub2", 
+        BookStoreSubresourcesOnly store2 = store.getItself2("4", "11", "33");
+        assertEquals("http://bar/bookstore/11/2/33/sub2/4", 
+                     WebClient.client(store2).getCurrentURI().toString());
+    }
+    
+    @Test
+    public void testTemplateInRootReplaceEmpty() throws Exception {
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+        bean.setAddress("http://bar");
+        bean.setResourceClass(BookStoreSubresourcesOnly.class);
+        BookStoreSubresourcesOnly store = bean.create(BookStoreSubresourcesOnly.class);
+        BookStoreSubresourcesOnly store2 = store.getItself4("4", "11", "22", "33");
+        assertEquals("http://bar/bookstore/11/22/33/sub2/4", 
                      WebClient.client(store2).getCurrentURI().toString());
     }
     

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/BookStoreSubresourcesOnly.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/BookStoreSubresourcesOnly.java?rev=1299640&r1=1299639&r2=1299640&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/BookStoreSubresourcesOnly.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/BookStoreSubresourcesOnly.java Mon Mar 12 11:50:57 2012
@@ -31,8 +31,9 @@ public class BookStoreSubresourcesOnly {
         return this;
     }
     
-    @Path("/sub2")
-    public BookStoreSubresourcesOnly getItself2(@PathParam("id") String id1, @PathParam("id3") String id3) { 
+    @Path("/sub2/{id4}")
+    public BookStoreSubresourcesOnly getItself2(@PathParam("id4") String id4,
+                                                @PathParam("id") String id1, @PathParam("id3") String id3) { 
         return this;
     }
     
@@ -40,6 +41,14 @@ public class BookStoreSubresourcesOnly {
     public BookStoreSubresourcesOnly getItself3(@PathParam("id4") String id4) { 
         return this;
     }
+    
+    @Path("/sub2/{id4}")
+    public BookStoreSubresourcesOnly getItself4(@PathParam("id4") String id4,
+                                                @PathParam("id") String id1,
+                                                @PathParam("id2") String id2,
+                                                @PathParam("id3") String id3) { 
+        return this;
+    }
 }
 
 

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresource.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresource.java?rev=1299640&r1=1299639&r2=1299640&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresource.java (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresource.java Mon Mar 12 11:50:57 2012
@@ -79,6 +79,13 @@ public interface BookSubresource {
                      @FormParam("") Book formBook) throws BookNotFoundFault;
     
     @POST
+    @Path("/subresource5/{id}/{name}")
+    @Produces("application/xml")
+    @Consumes("application/xml")
+    Book getTheBook5(@PathParam("name") String name,
+                     @PathParam("id") long id) throws BookNotFoundFault;
+    
+    @POST
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
     @Produces("application/xml")
     OrderBean addOrder(@FormParam("") OrderBean order);

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresourceImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresourceImpl.java?rev=1299640&r1=1299639&r2=1299640&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresourceImpl.java (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresourceImpl.java Mon Mar 12 11:50:57 2012
@@ -107,4 +107,8 @@ public class BookSubresourceImpl impleme
         return getTheBook();
     }
 
+    public Book getTheBook5(String name, long bookid) throws BookNotFoundFault {
+        return new Book(name, bookid);
+    }
+
 }

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java?rev=1299640&r1=1299639&r2=1299640&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java Mon Mar 12 11:50:57 2012
@@ -85,7 +85,7 @@ public class JAXRSSoapBookTest extends A
     @BeforeClass
     public static void startServers() throws Exception {
         assertTrue("server did not launch correctly", 
-                   launchServer(BookServerRestSoap.class));
+                   launchServer(BookServerRestSoap.class, true));
     }
     
     @Test
@@ -441,6 +441,18 @@ public class JAXRSSoapBookTest extends A
     }
     
     @Test
+    public void testGetBookSubresourceParamOrder() throws Exception {
+        
+        String baseAddress = "http://localhost:" + PORT + "/test/services/rest";
+        BookStoreJaxrsJaxws proxy = JAXRSClientFactory.create(baseAddress,
+                                                              BookStoreJaxrsJaxws.class);
+        BookSubresource bs = proxy.getBookSubresource("139");
+        Book b = bs.getTheBook5("CXF", 555L);
+        assertEquals(555, b.getId());
+        assertEquals("CXF", b.getName());
+    }
+    
+    @Test
     public void testAddOrderFormBean() throws Exception {
         
         String baseAddress = "http://localhost:" + PORT + "/test/services/rest";