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/08/20 15:15:46 UTC
svn commit: r1515818 - in /cxf/branches/2.7.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/
systests/jaxrs/src/test...
Author: sergeyb
Date: Tue Aug 20 13:15:46 2013
New Revision: 1515818
URL: http://svn.apache.org/r1515818
Log:
Merged revisions 1515807 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1515807 | sergeyb | 2013-08-20 15:55:06 +0300 (Tue, 20 Aug 2013) | 1 line
[CXF-5214] Better support for BeanParams
........
Modified:
cxf/branches/2.7.x-fixes/ (props changed)
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResourceContextImpl.java
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book2.java
cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Merged /cxf/trunk:r1515807
Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java?rev=1515818&r1=1515817&r2=1515818&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java Tue Aug 20 13:15:46 2013
@@ -27,7 +27,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
-import java.util.Set;
import java.util.logging.Logger;
import javax.ws.rs.NotFoundException;
@@ -47,11 +46,7 @@ import org.apache.cxf.endpoint.AbstractE
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointException;
import org.apache.cxf.endpoint.EndpointImpl;
-import org.apache.cxf.jaxrs.model.BeanParamInfo;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
-import org.apache.cxf.jaxrs.model.OperationResourceInfo;
-import org.apache.cxf.jaxrs.model.Parameter;
-import org.apache.cxf.jaxrs.model.ParameterType;
import org.apache.cxf.jaxrs.model.UserResource;
import org.apache.cxf.jaxrs.provider.DataBindingProvider;
import org.apache.cxf.jaxrs.provider.ProviderFactory;
@@ -344,17 +339,7 @@ public class AbstractJAXRSFactoryBean ex
protected void setBeanInfo(ProviderFactory factory) {
List<ClassResourceInfo> cris = serviceFactory.getClassResourceInfo();
for (ClassResourceInfo cri : cris) {
- Set<OperationResourceInfo> oris = cri.getMethodDispatcher().getOperationResourceInfos();
- for (OperationResourceInfo ori : oris) {
- List<Parameter> params = ori.getParameters();
- for (Parameter param : params) {
- if (param.getType() == ParameterType.BEAN) {
- Class<?> cls = ori.getMethodToInvoke().getParameterTypes()[param.getIndex()];
- BeanParamInfo bpi = new BeanParamInfo(cls, getBus());
- factory.addBeanParamInfo(bpi);
- }
- }
- }
+ cri.initBeanParamInfo(factory);
}
}
Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java?rev=1515818&r1=1515817&r2=1515818&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java Tue Aug 20 13:15:46 2013
@@ -217,6 +217,15 @@ public class JAXRSServerFactoryBean exte
return server;
}
+
+ protected void setBeanInfo(ProviderFactory factory) {
+ List<ClassResourceInfo> cris = serviceFactory.getClassResourceInfo();
+ for (ClassResourceInfo cri : cris) {
+ cri.initBeanParamInfo(factory);
+ }
+
+ }
+
protected void applyFeatures() {
if (getFeatures() != null) {
for (Feature feature : getFeatures()) {
Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResourceContextImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResourceContextImpl.java?rev=1515818&r1=1515817&r2=1515818&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResourceContextImpl.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResourceContextImpl.java Tue Aug 20 13:15:46 2013
@@ -26,6 +26,9 @@ import javax.ws.rs.core.UriInfo;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
import org.apache.cxf.jaxrs.model.OperationResourceInfo;
+import org.apache.cxf.jaxrs.provider.ProviderFactory;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.PhaseInterceptorChain;
public class ResourceContextImpl implements ResourceContext {
@@ -53,7 +56,11 @@ public class ResourceContextImpl impleme
}
private <T> T doInitResource(Class<?> cls, T resource) {
- cri.getSubResource(subClass, cls, resource, true);
+ ClassResourceInfo sub = cri.getSubResource(subClass, cls, resource, true);
+ Message m = PhaseInterceptorChain.getCurrentMessage();
+ if (m != null) {
+ sub.initBeanParamInfo(ProviderFactory.getInstance(m));
+ }
return resource;
}
Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java?rev=1515818&r1=1515817&r2=1515818&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java Tue Aug 20 13:15:46 2013
@@ -19,6 +19,8 @@
package org.apache.cxf.jaxrs.model;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -26,6 +28,7 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import javax.ws.rs.BeanParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@@ -34,6 +37,7 @@ import javax.ws.rs.core.MediaType;
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
+import org.apache.cxf.jaxrs.provider.ProviderFactory;
import org.apache.cxf.jaxrs.utils.AnnotationUtils;
import org.apache.cxf.jaxrs.utils.InjectionUtils;
import org.apache.cxf.jaxrs.utils.JAXRSUtils;
@@ -279,4 +283,32 @@ public class ClassResourceInfo extends B
public ClassResourceInfo getParent() {
return parent;
}
+
+ public void initBeanParamInfo(ProviderFactory factory) {
+ Set<OperationResourceInfo> oris = getMethodDispatcher().getOperationResourceInfos();
+ for (OperationResourceInfo ori : oris) {
+ List<Parameter> params = ori.getParameters();
+ for (Parameter param : params) {
+ if (param.getType() == ParameterType.BEAN) {
+ Class<?> cls = ori.getMethodToInvoke().getParameterTypes()[param.getIndex()];
+ BeanParamInfo bpi = new BeanParamInfo(cls, getBus());
+ factory.addBeanParamInfo(bpi);
+ }
+ }
+ }
+ List<Method> methods = super.getParameterMethods();
+ for (Method m : methods) {
+ if (m.getAnnotation(BeanParam.class) != null) {
+ BeanParamInfo bpi = new BeanParamInfo(m.getParameterTypes()[0], getBus());
+ factory.addBeanParamInfo(bpi);
+ }
+ }
+ List<Field> fields = super.getParameterFields();
+ for (Field f : fields) {
+ if (f.getAnnotation(BeanParam.class) != null) {
+ BeanParamInfo bpi = new BeanParamInfo(f.getType(), getBus());
+ factory.addBeanParamInfo(bpi);
+ }
+ }
+ }
}
Modified: cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book2.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book2.java?rev=1515818&r1=1515817&r2=1515818&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book2.java (original)
+++ cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book2.java Tue Aug 20 13:15:46 2013
@@ -19,9 +19,11 @@
package org.apache.cxf.systest.jaxrs;
+import javax.ws.rs.BeanParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
@@ -46,6 +48,10 @@ public class Book2 {
@XmlTransient
private UriInfo uriInfo;
+ @BeanParam
+ @XmlTransient
+ private QueryBean2 queryBean;
+
public Book2() {
}
@@ -78,5 +84,50 @@ public class Book2 {
name = params.getFirst("bookname");
return this;
}
+
+ @GET
+ @Path("rc/bean")
+ @Produces("application/xml")
+ public Book2 initFromQueryBean(@BeanParam QueryBean bean) {
+ id = bean.getBookid();
+ name = bean.getBookname();
+ return this;
+ }
+
+ @GET
+ @Path("rc/bean2")
+ @Produces("application/xml")
+ public Book2 initFromQueryBean2() {
+ id = queryBean.getBookid();
+ name = queryBean.getBookname();
+ return this;
+ }
+ public static class QueryBean {
+ private long id;
+ private String name;
+
+ public long getBookid() {
+ return id;
+ }
+
+ @QueryParam("bookid")
+ public void setBookid(long i) {
+ this.id = i;
+ }
+
+ public String getBookname() {
+ return name;
+ }
+
+ @QueryParam("bookname")
+ public void setBookname(String bookname) {
+ this.name = bookname;
+ }
+
+ }
+
+ public static class QueryBean2 extends QueryBean {
+
+ }
}
Modified: cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java?rev=1515818&r1=1515817&r2=1515818&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java (original)
+++ cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Tue Aug 20 13:15:46 2013
@@ -1772,6 +1772,18 @@ public class JAXRSClientServerBookTest e
}
@Test
+ public void testGetBookWithResourceContextBeanParam() throws Exception {
+ String address = "http://localhost:" + PORT + "/bookstore/booksubresource/context/rc/bean";
+ doTestGetBookWithResourceContext(address);
+ }
+
+ @Test
+ public void testGetBookWithResourceContextBeanParam2() throws Exception {
+ String address = "http://localhost:" + PORT + "/bookstore/booksubresource/context/rc/bean2";
+ doTestGetBookWithResourceContext(address);
+ }
+
+ @Test
public void testGetBookWithResourceContextInstance() throws Exception {
String address = "http://localhost:" + PORT + "/bookstore/booksubresource/instance/context/rc";
doTestGetBookWithResourceContext(address);