Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 0428417BDE for ; Tue, 9 Jun 2015 13:11:04 +0000 (UTC) Received: (qmail 63558 invoked by uid 500); 9 Jun 2015 13:11:03 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 63496 invoked by uid 500); 9 Jun 2015 13:11:03 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 63487 invoked by uid 99); 9 Jun 2015 13:11:03 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 09 Jun 2015 13:11:03 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id C0B85DFF08; Tue, 9 Jun 2015 13:11:03 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sergeyb@apache.org To: commits@cxf.apache.org Message-Id: <11505c78c1fb47b7b9e7a2ab52057686@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: cxf git commit: [CXF-6477] Updating the proxy code to resolve path parameters from the body beans if possible Date: Tue, 9 Jun 2015 13:11:03 +0000 (UTC) Repository: cxf Updated Branches: refs/heads/master 8bbdb86fc -> d99c3428c [CXF-6477] Updating the proxy code to resolve path parameters from the body beans if possible Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/d99c3428 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/d99c3428 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/d99c3428 Branch: refs/heads/master Commit: d99c3428cfb877f517959d4667eafd62bb03c807 Parents: 8bbdb86 Author: Sergey Beryozkin Authored: Tue Jun 9 14:10:26 2015 +0100 Committer: Sergey Beryozkin Committed: Tue Jun 9 14:10:26 2015 +0100 ---------------------------------------------------------------------- .../apache/cxf/jaxrs/client/ClientProxyImpl.java | 18 +++++++++++++----- .../org/apache/cxf/systest/jaxrs/BookStore.java | 10 ++++++++++ .../systest/jaxrs/JAXRSClientServerBookTest.java | 7 +++++++ 3 files changed, 30 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/d99c3428/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java ---------------------------------------------------------------------- diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java index 05b4ead..c32210f 100644 --- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java +++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java @@ -166,11 +166,10 @@ public class ClientProxyImpl extends AbstractClient implements MultivaluedMap types = getParametersInfo(m, params, ori); List beanParamsList = getParameters(types, ParameterType.BEAN); - - List pathParams = getPathParamValues(m, params, types, beanParamsList, ori); - int bodyIndex = getBodyIndex(types, ori); + List pathParams = getPathParamValues(m, params, types, beanParamsList, ori, bodyIndex); + UriBuilder builder = getCurrentBuilder().clone(); if (isRoot) { addNonEmptyPath(builder, ori.getClassResourceInfo().getURITemplate().getValue()); @@ -388,7 +387,8 @@ public class ClientProxyImpl extends AbstractClient implements Object[] params, MultivaluedMap map, List beanParams, - OperationResourceInfo ori) { + OperationResourceInfo ori, + int bodyIndex) { List list = new LinkedList(); if (isRoot) { list.addAll(valuesMap.values()); @@ -413,7 +413,7 @@ public class ClientProxyImpl extends AbstractClient implements for (Parameter p : beanParams) { beanParamValues.putAll(getValuesFromBeanParam(params[p.getIndex()], PathParam.class)); } - + Object requestBody = bodyIndex == -1 ? null : params[bodyIndex]; for (String varName : methodVars) { Parameter p = paramsMap.remove(varName); if (p != null) { @@ -421,6 +421,14 @@ public class ClientProxyImpl extends AbstractClient implements } else if (beanParamValues.containsKey(varName)) { BeanPair pair = beanParamValues.get(varName); list.add(convertParamValue(pair.getValue(), pair.getAnns())); + } else if (requestBody != null) { + try { + Method getter = requestBody.getClass().getMethod("get" + StringUtils.capitalize(varName), + new Class[]{}); + list.add(getter.invoke(requestBody, new Object[]{})); + } catch (Exception ex) { + // continue + } } } http://git-wip-us.apache.org/repos/asf/cxf/blob/d99c3428/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java index ffa7617..01a5c75 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java @@ -163,6 +163,16 @@ public class BookStore { public Book getBookRoot() { return new Book("root", 124L); } + @PUT + @Path("/updatebook/{id}") + @Consumes("application/xml") + @Produces("application/xml") + public Book updateEchoBook(Book book) { + if (book.getId() != Long.parseLong(ui.getPathParameters().getFirst("id"))) { + throw new WebApplicationException(404); + } + return new Book("root", book.getId()); + } @GET @Path("/books/wildcard") @Produces("text/*") http://git-wip-us.apache.org/repos/asf/cxf/blob/d99c3428/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java index f8925c2..65d0a12 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java @@ -107,6 +107,13 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase { assertEquals(500, r.getStatus()); } @Test + public void testUpdateBookWithProxy() throws Exception { + String address = "http://localhost:" + PORT; + BookStore store = JAXRSClientFactory.create(address, BookStore.class); + Book b = store.updateEchoBook(new Book("CXF", 125L)); + assertEquals(125L, b.getId()); + } + @Test public void testGetBookRoot() throws Exception { String address = "http://localhost:" + PORT + "/bookstore/;JSESSIONID=xxx"; WebClient wc = WebClient.create(address);