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";