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/10/05 17:49:40 UTC
svn commit: r1179277 - in /cxf/branches/2.4.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/
tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/
tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/ ...
Author: sergeyb
Date: Wed Oct 5 15:49:40 2011
New Revision: 1179277
URL: http://svn.apache.org/viewvc?rev=1179277&view=rev
Log:
Merged revisions 1179271 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1179271 | sergeyb | 2011-10-05 16:39:34 +0100 (Wed, 05 Oct 2011) | 1 line
[CXF-3797] Optional support for multiple in xml representations
........
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/ext/codegen/SourceGenerator.java
cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/WadlToolConstants.java
cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java
cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml
cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml
Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
svn:mergeinfo = /cxf/trunk:1179271
Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java?rev=1179277&r1=1179276&r2=1179277&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java (original)
+++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java Wed Oct 5 15:49:40 2011
@@ -59,6 +59,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.xml.namespace.QName;
+import javax.xml.transform.Source;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
@@ -102,6 +103,9 @@ public class SourceGenerator {
private static final String DEFAULT_RESOURCE_NAME = "Resource";
private static final String TAB = " ";
+ private static final List<String> HTTP_OK_STATUSES =
+ Arrays.asList(new String[] {"200", "201", "202", "203", "204"});
+
private static final Map<String, Class<?>> HTTP_METHOD_ANNOTATIONS;
private static final Map<String, Class<?>> PARAM_ANNOTATIONS;
private static final Set<String> RESOURCE_LEVEL_PARAMS;
@@ -153,6 +157,7 @@ public class SourceGenerator {
private Map<String, String> schemaPackageMap = Collections.emptyMap();
private Map<String, String> schemaTypesMap = Collections.emptyMap();
private Bus bus;
+ private boolean supportMultipleXmlReps;
public SourceGenerator() {
this(Collections.<String, String>emptyMap());
@@ -162,6 +167,10 @@ public class SourceGenerator {
this.properties = properties;
}
+ public void setSupportMultipleXmlReps(boolean support) {
+ supportMultipleXmlReps = support;
+ }
+
private String getClassPackageName(String wadlPackageName) {
if (resourcePackageName != null) {
return resourcePackageName;
@@ -208,14 +217,12 @@ public class SourceGenerator {
private void generateResourceClasses(Application app, GrammarInfo gInfo,
Set<String> typeClassNames, File src) {
Element appElement = app.getAppElement();
- List<Element> resourcesEls = DOMUtils.getChildrenWithName(appElement,
- WadlGenerator.WADL_NS, "resources");
+ List<Element> resourcesEls = getWadlElements(appElement, "resources");
if (resourcesEls.size() != 1) {
throw new IllegalStateException("WADL resources element is missing");
}
- List<Element> resourceEls = DOMUtils.getChildrenWithName(resourcesEls.get(0),
- WadlGenerator.WADL_NS, "resource");
+ List<Element> resourceEls = getWadlElements(resourcesEls.get(0), "resource");
if (resourceEls.size() == 0) {
throw new IllegalStateException("WADL has no resource elements");
}
@@ -249,9 +256,7 @@ public class SourceGenerator {
if (type.length() > 0) {
if (type.startsWith("#")) {
String refId = type.substring(1);
- List<Element> resourceTypes =
- DOMUtils.getChildrenWithName(app.getAppElement(), WadlGenerator.WADL_NS,
- "resource_type");
+ List<Element> resourceTypes = getWadlElements(app.getAppElement(), "resource_type");
for (Element resourceType : resourceTypes) {
if (refId.equals(resourceType.getAttribute("id"))) {
Element realElement = (Element)resourceType.cloneNode(true);
@@ -385,8 +390,7 @@ public class SourceGenerator {
private void writeSubresourceClasses(Application app, Element rElement, ContextInfo info,
File src, boolean isRoot, String resourceId) {
- List<Element> childEls = DOMUtils.getChildrenWithName(rElement,
- WadlGenerator.WADL_NS, "resource");
+ List<Element> childEls = getWadlElements(rElement, "resource");
for (Element subEl : childEls) {
String id = subEl.getAttribute("id");
if (id.length() > 0 && !resourceId.equals(id) && !id.startsWith("{java")
@@ -463,15 +467,13 @@ public class SourceGenerator {
String resourceId,
boolean isRoot,
String currentPath) {
- List<Element> methodEls = DOMUtils.getChildrenWithName(rElement,
- WadlGenerator.WADL_NS, "method");
+ List<Element> methodEls = getWadlElements(rElement, "method");
for (Element methodEl : methodEls) {
writeResourceMethod(methodEl, imports, sbCode, info, isRoot, currentPath);
}
- List<Element> childEls = DOMUtils.getChildrenWithName(rElement,
- WadlGenerator.WADL_NS, "resource");
+ List<Element> childEls = getWadlElements(rElement, "resource");
for (Element childEl : childEls) {
String path = childEl.getAttribute("path");
String newPath = (currentPath + path).replace("//", "/");
@@ -530,85 +532,112 @@ public class SourceGenerator {
boolean isResourceElement = "resource".equals(methodEl.getLocalName());
Element resourceEl = isResourceElement ? methodEl : (Element)methodEl.getParentNode();
- String methodName = methodEl.getAttribute("name");
- String methodNameLowerCase = methodName.toLowerCase();
- String id = methodEl.getAttribute("id");
- if (id.length() == 0) {
- id = methodNameLowerCase;
- }
-
- List<Element> responseEls = DOMUtils.getChildrenWithName(methodEl,
- WadlGenerator.WADL_NS, "response");
- List<Element> requestEls = DOMUtils.getChildrenWithName(methodEl,
- WadlGenerator.WADL_NS, "request");
+ List<Element> responseEls = getWadlElements(methodEl, "response");
+ List<Element> requestEls = getWadlElements(methodEl, "request");
Element firstRequestEl = requestEls.size() >= 1 ? requestEls.get(0) : null;
+ List<Element> allRequestReps = getWadlElements(firstRequestEl, "representation");
+ List<Element> xmlRequestReps = getXmlReps(allRequestReps);
- if (writeAnnotations(info.isInterfaceGenerated())) {
- sbCode.append(TAB);
+ boolean jaxpSourceRequired = xmlRequestReps.size() > 1 && !supportMultipleXmlReps;
+ int numOfMethods = jaxpSourceRequired ? 1 : xmlRequestReps.size();
+ for (int i = 0; i < numOfMethods; i++) {
- if (methodNameLowerCase.length() > 0) {
- if (HTTP_METHOD_ANNOTATIONS.containsKey(methodNameLowerCase)) {
- writeAnnotation(sbCode, imports,
- HTTP_METHOD_ANNOTATIONS.get(methodNameLowerCase), null, true, true);
- } else {
- // TODO : write a custom annotation class name based on HttpMethod
+ Element inXmlRep = xmlRequestReps.get(i);
+
+ String methodNameLowerCase = methodEl.getAttribute("name").toLowerCase();
+ String id = methodEl.getAttribute("id");
+ if (id.length() == 0) {
+ id = methodNameLowerCase;
+ }
+ String suffixName = "";
+ if (!jaxpSourceRequired && inXmlRep != null && xmlRequestReps.size() > 1) {
+ String value = inXmlRep.getAttribute("element");
+ int index = value.indexOf(":");
+ suffixName = value.substring(index + 1);
+ }
+ if (writeAnnotations(info.isInterfaceGenerated())) {
+ sbCode.append(TAB);
+
+ if (methodNameLowerCase.length() > 0) {
+ if (HTTP_METHOD_ANNOTATIONS.containsKey(methodNameLowerCase)) {
+ writeAnnotation(sbCode, imports,
+ HTTP_METHOD_ANNOTATIONS.get(methodNameLowerCase), null, true, true);
+ } else {
+ // TODO : write a custom annotation class name based on HttpMethod
+ }
+ writeFormatAnnotations(allRequestReps, sbCode, imports, true);
+ writeFormatAnnotations(getWadlElements(getOKResponse(responseEls), "representation"),
+ sbCode, imports, false);
+ }
+ if (!isRoot && !"/".equals(currentPath)) {
+ writeAnnotation(sbCode, imports, Path.class, currentPath, true, true);
}
- writeFormatAnnotations(firstRequestEl,
- sbCode, imports, true);
- writeFormatAnnotations(getOKResponse(responseEls), sbCode, imports, false);
+ } else {
+ sbCode.append(getLineSep()).append(TAB);
+ }
+
+ if (!info.isInterfaceGenerated()) {
+ sbCode.append("public ");
}
- if (!isRoot && !"/".equals(currentPath)) {
- writeAnnotation(sbCode, imports, Path.class, currentPath, true, true);
+ boolean responseTypeAvailable = true;
+ if (methodNameLowerCase.length() > 0) {
+ responseTypeAvailable = writeResponseType(responseEls, sbCode, imports,
+ info.getTypeClassNames(), info.getGrammarInfo());
+ sbCode.append(id + suffixName);
+ } else {
+ boolean expandedQName = id.startsWith("{");
+ QName qname = convertToQName(id, expandedQName);
+ String packageName = possiblyConvertNamespaceURI(qname.getNamespaceURI(), expandedQName);
+
+ String clsSimpleName = getSchemaClassName(packageName, info.getGrammarInfo(),
+ qname.getLocalPart(), info.getTypeClassNames());
+ String localName = clsSimpleName == null
+ ? getClassName(qname.getLocalPart(), true, info.getTypeClassNames())
+ : clsSimpleName.substring(packageName.length() + 1);
+ String subResponseNs = clsSimpleName == null ? getClassPackageName(packageName)
+ : clsSimpleName.substring(0, packageName.length());
+ String parentId = ((Element)resourceEl.getParentNode()).getAttribute("id");
+ writeSubResponseType(id.equals(parentId), subResponseNs, localName,
+ sbCode, imports);
+
+ sbCode.append("get" + localName + suffixName);
}
- } else {
- sbCode.append(getLineSep()).append(TAB);
- }
-
- if (!info.isInterfaceGenerated()) {
- sbCode.append("public ");
- }
- boolean responseTypeAvailable = true;
- if (methodNameLowerCase.length() > 0) {
- responseTypeAvailable = writeResponseType(responseEls, sbCode, imports,
- info.getTypeClassNames(), info.getGrammarInfo());
- sbCode.append(id);
- } else {
- boolean expandedQName = id.startsWith("{");
- QName qname = convertToQName(id, expandedQName);
- String packageName = possiblyConvertNamespaceURI(qname.getNamespaceURI(), expandedQName);
- String clsSimpleName = getSchemaClassName(packageName, info.getGrammarInfo(),
- qname.getLocalPart(), info.getTypeClassNames());
- String localName = clsSimpleName == null
- ? getClassName(qname.getLocalPart(), true, info.getTypeClassNames())
- : clsSimpleName.substring(packageName.length() + 1);
- String subResponseNs = clsSimpleName == null ? getClassPackageName(packageName)
- : clsSimpleName.substring(0, packageName.length());
- String parentId = ((Element)resourceEl.getParentNode()).getAttribute("id");
- writeSubResponseType(id.equals(parentId), subResponseNs, localName, sbCode, imports);
+ sbCode.append("(");
- sbCode.append("get" + localName);
- }
-
- sbCode.append("(");
-
- List<Element> inParamElements = getParameters(resourceEl,
- !isRoot && !isResourceElement && resourceEl.getAttribute("id").length() > 0);
-
- writeRequestTypes(firstRequestEl, inParamElements, sbCode, imports, info);
- sbCode.append(")");
- if (info.isInterfaceGenerated()) {
- sbCode.append(";");
- } else {
- generateEmptyMethodBody(sbCode, responseTypeAvailable);
+ List<Element> inParamElements = getParameters(resourceEl,
+ !isRoot && !isResourceElement && resourceEl.getAttribute("id").length() > 0);
+
+ Element repElement = getActualRepElement(allRequestReps, inXmlRep);
+ writeRequestTypes(firstRequestEl, repElement, inParamElements,
+ jaxpSourceRequired, sbCode, imports, info);
+ sbCode.append(")");
+ if (info.isInterfaceGenerated()) {
+ sbCode.append(";");
+ } else {
+ generateEmptyMethodBody(sbCode, responseTypeAvailable);
+ }
+ sbCode.append(getLineSep()).append(getLineSep());
}
- sbCode.append(getLineSep()).append(getLineSep());
}
+ private List<Element> getXmlReps(List<Element> repElements) {
+ List<Element> xmlReps = new ArrayList<Element>();
+ for (Element el : repElements) {
+ String value = el.getAttribute("element");
+ if (value.length() > 0 && value.contains(":")) {
+ xmlReps.add(el);
+ }
+ }
+ if (xmlReps.isEmpty()) {
+ xmlReps.add(null);
+ }
+ return xmlReps;
+ }
+
private List<Element> getParameters(Element resourceEl, boolean isSubresourceMethod) {
List<Element> inParamElements = new LinkedList<Element>();
- List<Element> allParamElements = DOMUtils.getChildrenWithName(resourceEl,
- WadlGenerator.WADL_NS, "param");
+ List<Element> allParamElements = getWadlElements(resourceEl, "param");
for (Element el : allParamElements) {
if (isSubresourceMethod && RESOURCE_LEVEL_PARAMS.contains(el.getAttribute("style"))) {
continue;
@@ -639,30 +668,41 @@ public class SourceGenerator {
}
private boolean addFormParameters(List<Element> inParamElements, Element requestEl) {
- List<Element> repElements =
- DOMUtils.getChildrenWithName(requestEl, WadlGenerator.WADL_NS, "representation");
+ List<Element> repElements = getWadlElements(requestEl, "representation");
if (repElements.size() == 1) {
String mediaType = repElements.get(0).getAttribute("mediaType");
if (MediaType.APPLICATION_FORM_URLENCODED.equals(mediaType)) {
- inParamElements.addAll(DOMUtils.getChildrenWithName(repElements.get(0),
- WadlGenerator.WADL_NS, "param"));
+ inParamElements.addAll(getWadlElements(repElements.get(0), "param"));
return true;
}
}
return false;
}
- private boolean writeResponseType(List<Element> responseEls, StringBuilder sbCode,
- Set<String> imports, Set<String> typeClassNames,
- GrammarInfo gInfo) {
+ private Element getActualRepElement(List<Element> repElements, Element xmlElement) {
+ if (xmlElement != null) {
+ return xmlElement;
+ }
+ for (Element el : repElements) {
+ Element param = DOMUtils.getFirstChildWithName(el, WadlGenerator.WADL_NS, "param");
+ if (param != null) {
+ return el;
+ }
+ }
+ return null;
+ }
+
+ private boolean writeResponseType(List<Element> responseEls,
+ StringBuilder sbCode,
+ Set<String> imports, Set<String> typeClassNames,
+ GrammarInfo gInfo) {
Element okResponse = getOKResponse(responseEls);
List<Element> repElements = null;
if (okResponse != null) {
- repElements =
- DOMUtils.getChildrenWithName(okResponse, WadlGenerator.WADL_NS, "representation");
+ repElements = getWadlElements(okResponse, "representation");
} else {
repElements = CastUtils.cast(Collections.emptyList(), Element.class);
}
@@ -671,7 +711,9 @@ public class SourceGenerator {
sbCode.append("void ");
return false;
}
- String elementName = getElementRefName(repElements, typeClassNames, gInfo, imports);
+ String elementName = getElementRefName(
+ getActualRepElement(repElements, getXmlReps(repElements).get(0)),
+ typeClassNames, gInfo, imports);
if (elementName != null) {
sbCode.append(elementName + " ");
} else {
@@ -684,10 +726,15 @@ public class SourceGenerator {
private Element getOKResponse(List<Element> responseEls) {
for (int i = 0; i < responseEls.size(); i++) {
String statusValue = responseEls.get(i).getAttribute("status");
- if (statusValue.length() == 0
- || Arrays.asList(statusValue.split("\\s")).contains("200")) {
+ if (statusValue.length() == 0) {
return responseEls.get(i);
}
+ String[] statuses = statusValue.split("\\s");
+ for (String status : statuses) {
+ if (HTTP_OK_STATUSES.contains(status)) {
+ return responseEls.get(i);
+ }
+ }
}
return null;
}
@@ -699,9 +746,11 @@ public class SourceGenerator {
}
sbCode.append(localName).append(" ");
}
-
+
private void writeRequestTypes(Element requestEl,
+ Element repElement,
List<Element> inParamEls,
+ boolean jaxpRequired,
StringBuilder sbCode,
Set<String> imports,
ContextInfo info) {
@@ -709,8 +758,7 @@ public class SourceGenerator {
boolean form = false;
boolean formParamsAvailable = false;
if (requestEl != null) {
- inParamEls.addAll(DOMUtils.getChildrenWithName(requestEl,
- WadlGenerator.WADL_NS, "param"));
+ inParamEls.addAll(getWadlElements(requestEl, "param"));
int currentSize = inParamEls.size();
form = addFormParameters(inParamEls, requestEl);
formParamsAvailable = currentSize < inParamEls.size();
@@ -750,15 +798,16 @@ public class SourceGenerator {
String elementParamType = null;
String elementParamName = null;
if (!form) {
- List<Element> repElements = requestEl != null
- ? DOMUtils.getChildrenWithName(requestEl, WadlGenerator.WADL_NS, "representation")
- : CastUtils.cast(Collections.emptyList(), Element.class);
- if (repElements.size() > 0) {
- elementParamType = getElementRefName(repElements, info.getTypeClassNames(),
- info.getGrammarInfo(), imports);
+ if (!jaxpRequired) {
+ elementParamType = getElementRefName(repElement,
+ info.getTypeClassNames(), info.getGrammarInfo(), imports);
if (elementParamType != null) {
elementParamName = elementParamType.toLowerCase();
}
+ } else {
+ addImport(imports, Source.class.getName());
+ elementParamType = Source.class.getSimpleName();
+ elementParamName = "source";
}
} else if (!formParamsAvailable) {
addImport(imports, MultivaluedMap.class.getName());
@@ -773,6 +822,12 @@ public class SourceGenerator {
}
}
+ private List<Element> getWadlElements(Element parent, String name) {
+ return parent != null
+ ? DOMUtils.getChildrenWithName(parent, WadlGenerator.WADL_NS, name)
+ : CastUtils.cast(Collections.emptyList(), Element.class);
+ }
+
private String getPrimitiveType(Element paramEl) {
String type = paramEl.getAttribute("type");
if (type == null) {
@@ -783,17 +838,16 @@ public class SourceGenerator {
return "string".equals(value) ? "String" : value;
}
- private String getElementRefName(List<Element> repElements, Set<String> typeClassNames,
- GrammarInfo gInfo, Set<String> imports) {
- String elementRef = null;
- for (Element el : repElements) {
- String value = el.getAttribute("element");
- if (value.length() > 0) {
- elementRef = value;
- break;
- }
+ private String getElementRefName(Element repElement,
+ Set<String> typeClassNames,
+ GrammarInfo gInfo,
+ Set<String> imports) {
+ if (repElement == null) {
+ return null;
}
- if (elementRef != null) {
+ String elementRef = repElement.getAttribute("element");
+
+ if (elementRef.length() > 0) {
String[] pair = elementRef.split(":");
if (pair.length == 2) {
String namespace = gInfo != null ? gInfo.getNsMap().get(pair[0]) : null;
@@ -813,12 +867,10 @@ public class SourceGenerator {
}
}
} else {
- for (Element el : repElements) {
- Element param = DOMUtils.getFirstChildWithName(el, WadlGenerator.WADL_NS, "param");
- if (param != null) {
- return getPrimitiveType(param);
- }
- }
+ Element param = DOMUtils.getFirstChildWithName(repElement, WadlGenerator.WADL_NS, "param");
+ if (param != null) {
+ return getPrimitiveType(param);
+ }
}
return null;
}
@@ -851,11 +903,8 @@ public class SourceGenerator {
- private void writeFormatAnnotations(Element parentEl, StringBuilder sbCode,
+ private void writeFormatAnnotations(List<Element> repElements, StringBuilder sbCode,
Set<String> imports, boolean inRep) {
- List<Element> repElements = parentEl != null
- ? DOMUtils.getChildrenWithName(parentEl, WadlGenerator.WADL_NS, "representation")
- : CastUtils.cast(Collections.emptyList(), Element.class);
if (repElements.size() == 0) {
return;
}
@@ -865,15 +914,19 @@ public class SourceGenerator {
if (repElements.size() > 1) {
sbCode.append("{");
}
+ String mediaTypes = "";
+ boolean first = true;
for (int i = 0; i < repElements.size(); i++) {
String mediaType = repElements.get(i).getAttribute("mediaType");
- if (mediaType != null) {
- sbCode.append("\"" + mediaType + "\"");
- if (i + 1 < repElements.size()) {
- sbCode.append(", ");
+ if (mediaType != null && !mediaTypes.contains(mediaType)) {
+ if (!first) {
+ mediaTypes += ", ";
}
+ first = false;
+ mediaTypes += "\"" + mediaType + "\"";
}
}
+ sbCode.append(mediaTypes);
if (repElements.size() > 1) {
sbCode.append(" }");
}
@@ -929,8 +982,7 @@ public class SourceGenerator {
}
private List<SchemaInfo> getSchemaElements(Application app) {
- List<Element> grammarEls = DOMUtils.getChildrenWithName(app.getAppElement(),
- WadlGenerator.WADL_NS, "grammars");
+ List<Element> grammarEls = getWadlElements(app.getAppElement(), "grammars");
if (grammarEls.size() != 1) {
return null;
}
@@ -945,8 +997,7 @@ public class SourceGenerator {
}
schemas.add(createSchemaInfo(schemasEls.get(i), systemId));
}
- List<Element> includeEls = DOMUtils.getChildrenWithName(grammarEls.get(0),
- WadlGenerator.WADL_NS, "include");
+ List<Element> includeEls = getWadlElements(grammarEls.get(0), "include");
for (Element includeEl : includeEls) {
String href = includeEl.getAttribute("href");
Modified: cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/WadlToolConstants.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/WadlToolConstants.java?rev=1179277&r1=1179276&r2=1179277&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/WadlToolConstants.java (original)
+++ cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/WadlToolConstants.java Wed Oct 5 15:49:40 2011
@@ -37,6 +37,8 @@ public final class WadlToolConstants {
public static final String CFG_SCHEMA_PACKAGENAME = "schemaPackagename";
public static final String CFG_RESOURCENAME = "resourcename";
+ public static final String CFG_MULTIPLE_XML_REPS = "supportMultipleXmlReps";
+
public static final String CFG_CATALOG = ToolConstants.CFG_CATALOG;
public static final String CFG_BINDING = ToolConstants.CFG_BINDING;
Modified: cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java?rev=1179277&r1=1179276&r2=1179277&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java (original)
+++ cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java Wed Oct 5 15:49:40 2011
@@ -117,6 +117,7 @@ public class JAXRSContainer extends Abst
sg.setPackageName((String)context.get(WadlToolConstants.CFG_PACKAGENAME));
sg.setResourceName((String)context.get(WadlToolConstants.CFG_RESOURCENAME));
+ sg.setSupportMultipleXmlReps(context.optionSet(WadlToolConstants.CFG_MULTIPLE_XML_REPS));
// set the base path
sg.setWadlPath(wadlURL);
Modified: cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml?rev=1179277&r1=1179276&r2=1179277&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml (original)
+++ cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml Wed Oct 5 15:49:40 2011
@@ -137,6 +137,18 @@ Examples:
<switch>noAddressBinding</switch>
</option>
+ <option id="supportMultipleXmlReps" maxOccurs="1">
+ <annotation>
+ Specifies that if a method contains multiple request XML representations
+ then a separate method per every such representation will be generated.
+ Note, enabling this option is not recommended when a server-side JAX-RS
+ code is generated.
+ A single method containing a javax.xml.transform.Source input parameter
+ will be generated by default such cases.
+ </annotation>
+ <switch>supportMultipleXmlReps</switch>
+ </option>
+
<!--
TODO: consider implementing most of the following options
Modified: cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java?rev=1179277&r1=1179276&r2=1179277&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java (original)
+++ cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java Wed Oct 5 15:49:40 2011
@@ -55,6 +55,31 @@ public class JAXRSContainerTest extends
fail();
}
}
+
+ @Test
+ public void testCodeGenInterfacesMultipleInXmlReps() {
+ try {
+ JAXRSContainer container = new JAXRSContainer(null);
+
+ ToolContext context = new ToolContext();
+ context.put(WadlToolConstants.CFG_OUTPUTDIR, output.getCanonicalPath());
+ context.put(WadlToolConstants.CFG_WADLURL, getLocation("/wadl/bookstore.xml"));
+ context.put(WadlToolConstants.CFG_COMPILE, "true");
+ context.put(WadlToolConstants.CFG_MULTIPLE_XML_REPS, "true");
+
+ container.setContext(context);
+ container.execute();
+
+ assertNotNull(output.list());
+
+ verifyFiles("java", true, false, "superbooks", "org.apache.cxf.jaxrs.model.wadl", 10);
+ verifyFiles("class", true, false, "superbooks", "org.apache.cxf.jaxrs.model.wadl", 10);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
+ }
@Test
public void testCodeGenInterfacesWithBinding() {
Modified: cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml?rev=1179277&r1=1179276&r2=1179277&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml (original)
+++ cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml Wed Oct 5 15:49:40 2011
@@ -118,6 +118,15 @@
</response>
</method>
+ <method name="POST" id="addBookOrBook2">
+ <request>
+ <representation mediaType="application/xml" element="prefix1:thebook"/>
+ <representation mediaType="application/xml" element="prefix1:theBook2"/>
+ <representation mediaType="application/json"/>
+ </request>
+ <response status="201"/>
+ </method>
+
<method name="PUT" id="addBook">
<doc>Update the book</doc>
<request>