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/05/04 23:28:19 UTC
svn commit: r1099611 - in /cxf/trunk/rt/frontend/jaxrs/src:
main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java
test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
Author: sergeyb
Date: Wed May 4 21:28:18 2011
New Revision: 1099611
URL: http://svn.apache.org/viewvc?rev=1099611&view=rev
Log:
[CXF-3490] Updating WADL Generator to handle repeating parameters correctly
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java?rev=1099611&r1=1099610&r2=1099611&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java Wed May 4 21:28:18 2011
@@ -26,6 +26,7 @@ import java.io.StringReader;
import java.io.StringWriter;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
+import java.lang.reflect.Type;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
@@ -459,7 +460,8 @@ public class WadlGenerator implements Re
Method method = getMethod(ori);
Class<?> type = method.getParameterTypes()[pm.getIndex()];
if (!"".equals(pm.getName())) {
- doWriteParam(sb, pm, type, pm.getName(), method.getParameterAnnotations()[pm.getIndex()]);
+ doWriteParam(sb, pm, type, method.getGenericParameterTypes()[pm.getIndex()],
+ pm.getName(), method.getParameterAnnotations()[pm.getIndex()]);
} else {
doWriteBeanParam(sb, type, pm, null);
}
@@ -472,16 +474,18 @@ public class WadlGenerator implements Re
if (parentName != null) {
name = parentName + "." + name;
}
- if (InjectionUtils.isPrimitive(entry.getValue())) {
- doWriteParam(sb, entry.getKey(), entry.getValue(), name, new Annotation[]{});
+ Class<?> paramCls = entry.getValue();
+ boolean isPrimitive = InjectionUtils.isPrimitive(paramCls);
+ if (isPrimitive || InjectionUtils.isSupportedCollectionOrArray(paramCls)) {
+ doWriteParam(sb, entry.getKey(), paramCls, paramCls, name, new Annotation[]{});
} else {
- doWriteBeanParam(sb, entry.getValue(), entry.getKey(), name);
+ doWriteBeanParam(sb, paramCls, entry.getKey(), name);
}
}
}
- protected void doWriteParam(StringBuilder sb, Parameter pm, Class<?> type, String paramName,
- Annotation[] anns) {
+ protected void doWriteParam(StringBuilder sb, Parameter pm, Class<?> type,
+ Type genericType, String paramName, Annotation[] anns) {
sb.append("<param name=\"").append(paramName).append("\" ");
String style = ParameterType.PATH == pm.getType() ? "template"
: ParameterType.FORM == pm.getType() ? "query"
@@ -491,6 +495,10 @@ public class WadlGenerator implements Re
if (pm.getDefaultValue() != null) {
sb.append(" default=\"").append(pm.getDefaultValue()).append("\"");
}
+ if (InjectionUtils.isSupportedCollectionOrArray(type)) {
+ type = InjectionUtils.getActualType(genericType);
+ sb.append(" repeating=\"true\"");
+ }
String value = XmlSchemaPrimitiveUtils.getSchemaRepresentation(type);
if (value != null) {
sb.append(" type=\"").append(value).append("\"");
@@ -548,7 +556,7 @@ public class WadlGenerator implements Re
sb.append(">");
Parameter p = inbound ? getRequestBodyParam(ori)
: new Parameter(ParameterType.REQUEST_BODY, 0, "result");
- doWriteParam(sb, p, type, p.getName() == null ? "request" : p.getName(), anns);
+ doWriteParam(sb, p, type, type, p.getName() == null ? "request" : p.getName(), anns);
sb.append("</representation>");
} else {
type = getActualJaxbType(type, opMethod, inbound);
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java?rev=1099611&r1=1099610&r2=1099611&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java Wed May 4 21:28:18 2011
@@ -18,6 +18,8 @@
*/
package org.apache.cxf.jaxrs.model.wadl;
+import java.util.List;
+
import javax.ws.rs.Consumes;
import javax.ws.rs.CookieParam;
import javax.ws.rs.GET;
@@ -83,6 +85,7 @@ public class BookStore {
@HeaderParam("hid") int headerId,
@CookieParam("cid") int cookieId,
@QueryParam("provider.bar") int queryParam,
+ @QueryParam("a") List<String> queryList,
@Context HttpHeaders headers,
@Description("InputBook")
@XMLName(value = "{http://books}thesuperbook2")
@@ -108,14 +111,14 @@ public class BookStore {
@GET
@Path("chapter")
- public Chapter getChaper() {
+ public Chapter getChapter() {
return new Chapter(1);
}
@GET
@Path("chapter2")
@ElementClass(response = Chapter.class)
- public Response getChaper2() {
+ public Response getChapter2() {
return Response.ok().entity(new Chapter(1)).build();
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java?rev=1099611&r1=1099610&r2=1099611&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java Wed May 4 21:28:18 2011
@@ -392,9 +392,10 @@ public class WadlGeneratorTest extends A
checkDocs(requestEls.get(0), "", "Request", "");
- verifyParameters(requestEls.get(0), 2,
+ verifyParameters(requestEls.get(0), 3,
new Param("hid", "header", "xs:int"),
- new Param("provider.bar", "query", "xs:int"));
+ new Param("provider.bar", "query", "xs:int"),
+ new Param("a", "query", "xs:string", true));
verifyXmlJsonRepresentations(requestEls.get(0), book2El, "InputBook");
List<Element> responseEls = getElements(methodEls.get(0), "response", 1);
@@ -550,6 +551,7 @@ public class WadlGeneratorTest extends A
assertEquals(p.getName(), paramEl.getAttribute("name"));
assertEquals(p.getType(), paramEl.getAttribute("style"));
assertEquals(p.getSchemaType(), paramEl.getAttribute("type"));
+ assertEquals(p.isRepeating(), Boolean.valueOf(paramEl.getAttribute("repeating")));
String docs = p.getDocs();
if (docs != null) {
checkDocs(paramEl, "", docs, "");
@@ -599,15 +601,26 @@ public class WadlGeneratorTest extends A
private String type;
private String schemaType;
private String docs;
+ private boolean repeating;
public Param(String name, String type, String schemaType) {
- this(name, type, schemaType, null);
+ this(name, type, schemaType, false);
+ }
+
+ public Param(String name, String type, String schemaType, boolean repeating) {
+ this(name, type, schemaType, repeating, null);
}
public Param(String name, String type, String schemaType, String docs) {
+ this(name, type, schemaType, false, null);
+ }
+
+
+ public Param(String name, String type, String schemaType, boolean repeating, String docs) {
this.name = name;
this.type = type;
this.schemaType = schemaType;
this.docs = docs;
+ this.repeating = repeating;
}
public String getName() {
@@ -625,5 +638,9 @@ public class WadlGeneratorTest extends A
public String getDocs() {
return docs;
}
+
+ public boolean isRepeating() {
+ return repeating;
+ }
}
}