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 2011/06/20 23:46:08 UTC
svn commit: r1137796 - in /cxf/branches/2.4.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/
rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/
Author: sergeyb
Date: Mon Jun 20 21:46:08 2011
New Revision: 1137796
URL: http://svn.apache.org/viewvc?rev=1137796&view=rev
Log:
Merged revisions 1137793 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1137793 | sergeyb | 2011-06-20 22:39:31 +0100 (Mon, 20 Jun 2011) | 1 line
[CXF-3591] Better linking to schema elements from JAX-RS Response
........
Modified:
cxf/branches/2.4.x-fixes/ (props changed)
cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStoreWithSingleSlash.java
cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
svn:mergeinfo = /cxf/trunk:1137793
Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Jun 20 21:46:08 2011
@@ -1 +1 @@
-/cxf/trunk:1-1134023,1134142,1134248,1134281,1134523,1134526,1135106,1135457,1135484,1135899,1136380,1136417,1136837,1136860,1136933,1136942-1136953,1136960,1137509,1137658-1137678
+/cxf/trunk:1-1134023,1134142,1134248,1134281,1134523,1134526,1135106,1135457,1135484,1135899,1136380,1136417,1136837,1136860,1136933,1136942-1136953,1136960,1137509,1137658-1137678,1137793
Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java?rev=1137796&r1=1137795&r2=1137796&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java (original)
+++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java Mon Jun 20 21:46:08 2011
@@ -586,7 +586,7 @@ public class WadlGenerator implements Re
doWriteParam(sb, p, type, type, p.getName() == null ? "request" : p.getName(), anns);
sb.append("</representation>");
} else {
- type = getActualJaxbType(type, opMethod, inbound);
+ type = ResourceUtils.getActualJaxbType(type, opMethod, inbound);
if (qnameResolver != null && mt.getSubtype().contains("xml") && jaxbTypes.contains(type)) {
generateQName(sb, qnameResolver, clsMap, type,
getBodyAnnotations(ori, inbound));
@@ -629,18 +629,6 @@ public class WadlGenerator implements Re
}
}
- protected Class<?> getActualJaxbType(Class<?> type, Method resourceMethod, boolean inbound) {
- ElementClass element = resourceMethod.getAnnotation(ElementClass.class);
- if (element != null) {
- Class<?> cls = inbound ? element.request() : element.response();
- if (cls != Object.class) {
- return cls;
- }
- }
- return type;
-
- }
-
protected List<OperationResourceInfo> sortOperationsByPath(Set<OperationResourceInfo> ops) {
List<OperationResourceInfo> opsWithSamePath = new LinkedList<OperationResourceInfo>(ops);
Collections.sort(opsWithSamePath, new Comparator<OperationResourceInfo>() {
Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java?rev=1137796&r1=1137795&r2=1137796&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java (original)
+++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java Mon Jun 20 21:46:08 2011
@@ -55,6 +55,7 @@ import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
@@ -83,6 +84,7 @@ import org.apache.cxf.jaxrs.model.Parame
import org.apache.cxf.jaxrs.model.URITemplate;
import org.apache.cxf.jaxrs.model.UserOperation;
import org.apache.cxf.jaxrs.model.UserResource;
+import org.apache.cxf.jaxrs.model.wadl.ElementClass;
import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
import org.apache.cxf.message.Message;
import org.apache.cxf.resource.ResourceManager;
@@ -456,24 +458,38 @@ public final class ResourceUtils {
return types;
}
+ public static Class<?> getActualJaxbType(Class<?> type, Method resourceMethod, boolean inbound) {
+ ElementClass element = resourceMethod.getAnnotation(ElementClass.class);
+ if (element != null) {
+ Class<?> cls = inbound ? element.request() : element.response();
+ if (cls != Object.class) {
+ return cls;
+ }
+ }
+ return type;
+ }
+
private static void getAllTypesForResource(ClassResourceInfo resource, Map<Class<?>, Type> types,
boolean jaxbOnly) {
for (OperationResourceInfo ori : resource.getMethodDispatcher().getOperationResourceInfos()) {
Class<?> cls = ori.getMethodToInvoke().getReturnType();
- Type type = ori.getMethodToInvoke().getGenericReturnType();
+ if (cls == Response.class) {
+ cls = getActualJaxbType(cls, ori.getMethodToInvoke(), false);
+ }
if (jaxbOnly) {
checkJaxbType(cls, types);
} else {
+ Type type = ori.getMethodToInvoke().getGenericReturnType();
types.put(cls, type);
}
for (Parameter pm : ori.getParameters()) {
if (pm.getType() == ParameterType.REQUEST_BODY) {
Class<?> inType = ori.getMethodToInvoke().getParameterTypes()[pm.getIndex()];
- Type type2 = ori.getMethodToInvoke().getGenericParameterTypes()[pm.getIndex()];
if (jaxbOnly) {
checkJaxbType(inType, types);
} else {
- types.put(inType, type2);
+ Type type = ori.getMethodToInvoke().getGenericParameterTypes()[pm.getIndex()];
+ types.put(inType, type);
}
}
}
Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStoreWithSingleSlash.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStoreWithSingleSlash.java?rev=1137796&r1=1137795&r2=1137796&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStoreWithSingleSlash.java (original)
+++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStoreWithSingleSlash.java Mon Jun 20 21:46:08 2011
@@ -20,13 +20,19 @@ package org.apache.cxf.jaxrs.model.wadl;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+
+import org.apache.cxf.jaxrs.model.wadl.jaxb.Book;
@Path("/")
public class BookStoreWithSingleSlash {
@GET
@Path("book")
- public String getBookName() {
- return "book";
+ @ElementClass(response = Book.class)
+ @Produces("application/xml")
+ public Response getBookName() {
+ return null;
}
}
Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java?rev=1137796&r1=1137795&r2=1137796&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java (original)
+++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java Mon Jun 20 21:46:08 2011
@@ -227,6 +227,7 @@ public class WadlGeneratorTest extends A
WadlGenerator.WADL_NS, "resource");
assertEquals(1, resourceEls.size());
assertEquals("book", resourceEls.get(0).getAttribute("path"));
+ checkGrammars(doc.getDocumentElement(), "thebook", null, "thechapter");
}
private void checkResponse(Response r) throws Exception {
@@ -274,17 +275,24 @@ public class WadlGeneratorTest extends A
assertEquals("http://superbooks", schemasEls.get(0).getAttribute("targetNamespace"));
List<Element> elementEls = DOMUtils.getChildrenWithName(schemasEls.get(0),
XmlSchemaConstants.XSD_NAMESPACE_URI, "element");
- assertEquals(3, elementEls.size());
+
+ int size = book2El == null ? 2 : 3;
+
+ assertEquals(size, elementEls.size());
assertTrue(checkElement(elementEls, bookEl, "tns:book"));
- assertTrue(checkElement(elementEls, book2El, "tns:book2"));
+ if (book2El != null) {
+ assertTrue(checkElement(elementEls, book2El, "tns:book2"));
+ }
assertTrue(checkElement(elementEls, chapterEl, "tns:chapter"));
List<Element> complexTypesEls = DOMUtils.getChildrenWithName(schemasEls.get(0),
XmlSchemaConstants.XSD_NAMESPACE_URI, "complexType");
- assertEquals(3, complexTypesEls.size());
+ assertEquals(size, complexTypesEls.size());
assertTrue(checkComplexType(complexTypesEls, "book"));
- assertTrue(checkComplexType(complexTypesEls, "book2"));
+ if (book2El != null) {
+ assertTrue(checkComplexType(complexTypesEls, "book2"));
+ }
assertTrue(checkComplexType(complexTypesEls, "chapter"));
}