Author: sergeyb
Date: Wed Oct 10 11:40:35 2012
New Revision: 1396550
URL: http://svn.apache.org/viewvc?rev=1396550&view=rev
Log:
[CXF-4349] Reverting some of the updates, using a workaround to get xsi:type
generated
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.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=1396550&r1=1396549&r2=1396550&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
Wed Oct 10 11:40:35 2012
@@ -628,13 +628,9 @@ public class ClientProxyImpl extends Abs
:
aMethod.getParameterAnnotations()[bodyIndex];
try {
if (bodyIndex != -1) {
- Class<?> paramClass =
method.getParameterTypes()[bodyIndex];
Type paramType =
method.getGenericParameterTypes()[bodyIndex];
- boolean isAssignable =
paramClass.isAssignableFrom(body.getClass());
- writeBody(body, outMessage,
- isAssignable ? paramClass : body.getClass(),
- isAssignable ? paramType : body.getClass(),
+ writeBody(body, outMessage, body.getClass(), paramType,
anns, os);
} else {
writeBody(body, outMessage, body.getClass(),
body.getClass(),
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java?rev=1396550&r1=1396549&r2=1396550&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
Wed Oct 10 11:40:35 2012
@@ -218,7 +218,7 @@ public class JAXRSOutInterceptor extends
? ori.getMethodToInvoke() : ori.getAnnotatedMethod();
}
boolean asyncResponse = exchange.get(AsyncResponse.class) != null;
- Class<?> targetType = getRawResponseClass(invoked, responseObj,
asyncResponse);
+ Class<?> targetType = getRawResponseClass(responseObj);
Type genericType = getGenericResponseType(invoked, responseObj,
targetType, asyncResponse);
if (genericType instanceof TypeVariable) {
genericType =
InjectionUtils.getSuperType(ori.getClassResourceInfo().getServiceClass(),
@@ -415,14 +415,12 @@ public class JAXRSOutInterceptor extends
}
- private Class<?> getRawResponseClass(Method invoked, Object targetObject,
boolean async) {
+ private Class<?> getRawResponseClass(Object targetObject) {
if (GenericEntity.class.isAssignableFrom(targetObject.getClass())) {
return ((GenericEntity<?>)targetObject).getRawType();
} else {
Class<?> targetClass = targetObject.getClass();
- Class<?> responseClass = async || invoked == null
- || !invoked.getReturnType().isAssignableFrom(targetClass) ?
targetClass : invoked.getReturnType();
- return ClassHelper.getRealClassFromClass(responseClass);
+ return ClassHelper.getRealClassFromClass(targetClass);
}
}
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=1396550&r1=1396549&r2=1396550&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
Wed Oct 10 11:40:35 2012
@@ -118,7 +118,7 @@ public abstract class AbstractJAXBProvid
private String collectionWrapperName;
private Map<String, String> collectionWrapperMap;
- private List<String> jaxbElementClassNames = Collections.emptyList();
+ private List<String> jaxbElementClassNames;
private Map<String, Object> cProperties;
private Map<String, Object> uProperties;
@@ -226,19 +226,34 @@ public abstract class AbstractJAXBProvid
protected Object convertToJaxbElementIfNeeded(Object obj, Class<?> cls,
Type genericType)
throws Exception {
- boolean asJaxbElement = jaxbElementClassNames.contains(cls.getName());
+ Class<?> jaxbElementCls = jaxbElementClassNames == null ? null :
getJaxbElementClass(cls);
+ boolean asJaxbElement = jaxbElementCls != null;
if (!asJaxbElement && isXmlRoot(cls)) {
return obj;
}
-
+ if (jaxbElementCls == null) {
+ jaxbElementCls = cls;
+ }
QName name = null;
- String expandedName = jaxbElementClassMap.get(cls.getName());
+ String expandedName =
jaxbElementClassMap.get(jaxbElementCls.getName());
if (expandedName != null) {
name = JAXRSUtils.convertStringToQName(expandedName);
} else if (marshalAsJaxbElement || asJaxbElement) {
- name = getJaxbQName(cls, genericType, obj, false);
+ name = getJaxbQName(jaxbElementCls, genericType, obj, false);
}
- return name != null ? new JAXBElement<Object>(name, (Class)cls, null,
obj) : obj;
+ return name != null ? new JAXBElement<Object>(name,
(Class)jaxbElementCls, null, obj) : obj;
+ }
+
+ protected Class<?> getJaxbElementClass(Class<?> cls) {
+ if (cls == Object.class) {
+ return null;
+ }
+ if (jaxbElementClassNames.contains(cls.getName())) {
+ return cls;
+ } else {
+ return getJaxbElementClass(cls.getSuperclass());
+ }
+
}
public void setCollectionWrapperName(String wName) {
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=1396550&r1=1396549&r2=1396550&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
Wed Oct 10 11:40:35 2012
@@ -128,6 +128,12 @@ public class BookStore {
}
@GET
+ @Path("object")
+ public Object getBookAsObject() {
+ return new Book("Book as Object", 125L);
+ }
+
+ @GET
@Path("/default")
@Produces("application/xml")
public Book getDefaultBook() {
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=1396550&r1=1396549&r2=1396550&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
Wed Oct 10 11:40:35 2012
@@ -79,7 +79,7 @@ public class JAXRSClientServerBookTest e
public static void startServers() throws Exception {
AbstractResourceInfo.clearAllMaps();
assertTrue("server did not launch correctly",
- launchServer(BookServer.class));
+ launchServer(BookServer.class, true));
createStaticBus();
}
@@ -185,6 +185,16 @@ public class JAXRSClientServerBookTest e
}
@Test
+ public void testGetBookAsObject() throws Exception {
+
+ String endpointAddress =
+ "http://localhost:" + PORT + "/bookstore/object";
+ WebClient wc = WebClient.create(endpointAddress);
+ Book b = wc.get(Book.class);
+ assertEquals("Book as Object", b.getName());
+ }
+
+ @Test
public void testProcessingInstruction() throws Exception {
String base = "http://localhost:" + PORT;
String endpointAddress = base + "/bookstore/name-in-query";