Repository: cxf Updated Branches: refs/heads/2.7.x-fixes 2314106f6 -> ee6c9257e
[CXF-5941, CXF-5961] Controlling the order of inherited parameters, fixing the regression, patches from Alexey Markevich applied with some extra code Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/ee6c9257 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/ee6c9257 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/ee6c9257 Branch: refs/heads/2.7.x-fixes Commit: ee6c9257effc6d63cd5320f4d08dd8089a54c4fd Parents: 2314106 Author: Sergey Beryozkin <sberyoz...@talend.com> Authored: Thu Aug 21 10:42:06 2014 +0100 Committer: Sergey Beryozkin <sberyoz...@talend.com> Committed: Thu Aug 21 11:05:06 2014 +0100 ---------------------------------------------------------------------- .../cxf/tools/wadlto/jaxrs/JAXRSContainer.java | 17 +++++++-- .../cxf/tools/wadlto/jaxrs/SourceGenerator.java | 17 +++++++-- .../cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml | 36 +++++++++++--------- .../tools/wadlto/jaxrs/JAXRSContainerTest.java | 2 +- .../cxf/tools/wadlto/jaxrs/WADLToJavaTest.java | 1 + .../jaxrs/src/test/resources/wadl/test.xml | 2 +- 6 files changed, 51 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/ee6c9257/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java ---------------------------------------------------------------------- diff --git a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java index c8ab714..f357d12 100644 --- a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java +++ b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java @@ -33,6 +33,7 @@ import java.util.Set; import org.xml.sax.InputSource; +import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.common.util.URIParserUtil; import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.tools.common.AbstractCXFToolContainer; @@ -152,9 +153,13 @@ public class JAXRSContainer extends AbstractCXFToolContainer { sg.setSuspendedAsyncMethods(getSuspendedAsyncMethods()); sg.setResponseMethods(getResponseMethods()); - + sg.setGenerateEnums(context.optionSet(WadlToolConstants.CFG_GENERATE_ENUMS)); - sg.setInheritResourceParams(context.optionSet(WadlToolConstants.CFG_INHERIT_PARAMS)); + boolean inheritResourceParams = context.optionSet(WadlToolConstants.CFG_INHERIT_PARAMS); + sg.setInheritResourceParams(inheritResourceParams); + if (inheritResourceParams) { + sg.setInheritResourceParamsFirst(isInheritResourceParamsFirst()); + } sg.setSkipSchemaGeneration(context.optionSet(WadlToolConstants.CFG_NO_TYPES)); boolean noVoidForEmptyResponses = context.optionSet(WadlToolConstants.CFG_NO_VOID_FOR_EMPTY_RESPONSES); @@ -238,6 +243,14 @@ public class JAXRSContainer extends AbstractCXFToolContainer { return Collections.emptySet(); } } + private boolean isInheritResourceParamsFirst() { + Object value = context.get(WadlToolConstants.CFG_INHERIT_PARAMS); + if (StringUtils.isEmpty((String)value)) { + return false; + } else { + return "first".equals(value.toString().trim()); + } + } //TODO: this belongs to JAXB Databinding, should we just reuse // org.apache.cxf.tools.wsdlto.databinding.jaxb ? http://git-wip-us.apache.org/repos/asf/cxf/blob/ee6c9257/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java ---------------------------------------------------------------------- diff --git a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java index f660963..a9be7e6 100644 --- a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java +++ b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java @@ -191,6 +191,7 @@ public class SourceGenerator { private boolean generateEnums; private boolean skipSchemaGeneration; private boolean inheritResourceParams; + private boolean inheritResourceParamsFirst; private boolean useVoidForEmptyResponses = true; private boolean generateResponseIfHeadersSet; @@ -822,6 +823,7 @@ public class SourceGenerator { } inParamElements.add(el); } + int inheritedCount = 0; for (Element inherited : inheritedParams) { boolean duplicate = false; for (Element in : inParamElements) { @@ -831,7 +833,12 @@ public class SourceGenerator { } } if (!duplicate) { - inParamElements.add(inherited); + if (inheritResourceParamsFirst && inheritedCount < inParamElements.size()) { + inParamElements.set(inheritedCount, inherited); + } else { + inParamElements.add(inherited); + } + inheritedCount++; } } inheritedParams.addAll(newInheritedParams); @@ -1007,7 +1014,7 @@ public class SourceGenerator { String required = paramEl.getAttribute("required"); if (Multipart.class.equals(paramAnn) && "false".equals(required)) { writeAnnotation(sbCode, imports, paramAnn, null, false, false); - sbCode.append("(value = \"").append(name).append("\", required = \"false\"").append(')'); + sbCode.append("(value = \"").append(name).append("\", required = false").append(')'); } else { writeAnnotation(sbCode, imports, paramAnn, name, false, false); } @@ -1321,7 +1328,7 @@ public class SourceGenerator { Element paramEl = DOMUtils.getFirstChildWithName(repElement, getWadlNamespace(), "param"); if (paramEl != null) { String type = getPrimitiveType(paramEl, info, imports); - type = addListIfRepeating(type, isRepeatingParam(paramEl), imports); + return addListIfRepeating(type, isRepeatingParam(paramEl), imports); } } } @@ -1666,6 +1673,10 @@ public class SourceGenerator { this.inheritResourceParams = inherit; } + public void setInheritResourceParamsFirst(boolean inherit) { + this.inheritResourceParamsFirst = inherit; + } + public void setSchemaPackageMap(Map<String, String> map) { this.schemaPackageMap = map; } http://git-wip-us.apache.org/repos/asf/cxf/blob/ee6c9257/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml ---------------------------------------------------------------------- diff --git a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml index 1fd5cc3..d45d64e 100644 --- a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml +++ b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml @@ -161,7 +161,16 @@ Examples: </annotation> <switch>impl</switch> </option> - + <option id="async" maxOccurs="1"> + <annotation> + Specifies a comma separated list of method names or identifiers + which need to support suspended asynchronous invocations + </annotation> + <associatedArgument placement="immediate"> + <annotation> methodNames</annotation> + </associatedArgument> + <switch>async</switch> + </option> <option id="generateEnums" maxOccurs="1"> <annotation> Specifies that Enum classes can be generated to represent @@ -169,12 +178,16 @@ Examples: </annotation> <switch>generateEnums</switch> </option> - <option id="inheritResourceParams" maxOccurs="1"> <annotation> - Specifies that resource-level (path or matrix) parameters - can be inherited by child resources + Specifies that path or matrix parameters can be inherited by child resources. + By default the inherited parameters will be listed last in a method parameter list. + The "first" qualifier can be used to reverse the order. </annotation> + <associatedArgument placement="immediate"> + <annotation> first|last</annotation> + <valueenum>first|last</valueenum> + </associatedArgument> <switch>inheritResourceParams</switch> </option> @@ -215,27 +228,16 @@ Examples: </annotation> <switch>generateResponseIfHeadersSet</switch> </option> - <option id="generateResponseForMethods" maxOccurs="unbounded"> + <option id="generateResponseForMethods" maxOccurs="1"> <annotation> Specifies a comma separated list of method names or identifiers which need to have JAXRS Response return type generated </annotation> <associatedArgument placement="immediate"> - <annotation>methodNames</annotation> + <annotation> methodNames</annotation> </associatedArgument> <switch>generateResponseForMethods</switch> </option> - <option id="async" maxOccurs="unbounded"> - <annotation> - Specifies a comma separated list of method names or identifiers - which need to support suspended asynchronous invocations - </annotation> - <associatedArgument placement="immediate"> - <annotation>methodNames</annotation> - </associatedArgument> - <switch>async</switch> - </option> - <option id="xjc" maxOccurs="unbounded"> <annotation> Specifies a comma separated list of arguments that are passed directly to XJC when the http://git-wip-us.apache.org/repos/asf/cxf/blob/ee6c9257/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java ---------------------------------------------------------------------- diff --git a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java index a0416b8..c06a9f6 100644 --- a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java +++ b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java @@ -101,7 +101,7 @@ public class JAXRSContainerTest extends ProcessorTestBase { context.put(WadlToolConstants.CFG_SCHEMA_TYPE_MAP, "{http://www.w3.org/2001/XMLSchema}anyType=" + "java.io.InputStream"); - context.put(WadlToolConstants.CFG_INHERIT_PARAMS, "true"); + context.put(WadlToolConstants.CFG_INHERIT_PARAMS, "=last"); container.setContext(context); container.execute(); http://git-wip-us.apache.org/repos/asf/cxf/blob/ee6c9257/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/WADLToJavaTest.java ---------------------------------------------------------------------- diff --git a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/WADLToJavaTest.java b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/WADLToJavaTest.java index 28acdf3..81a6ebc 100644 --- a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/WADLToJavaTest.java +++ b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/WADLToJavaTest.java @@ -46,6 +46,7 @@ public class WADLToJavaTest extends ProcessorTestBase { "-tMap", "{http://www.w3.org/2001/XMLSchema}date=java.util.List..String", "-async getName,delete", + "-inheritResourceParams first", "-compile", getLocation("/wadl/bookstore.xml"), }; http://git-wip-us.apache.org/repos/asf/cxf/blob/ee6c9257/tools/wadlto/jaxrs/src/test/resources/wadl/test.xml ---------------------------------------------------------------------- diff --git a/tools/wadlto/jaxrs/src/test/resources/wadl/test.xml b/tools/wadlto/jaxrs/src/test/resources/wadl/test.xml index b70b9ef..5604970 100644 --- a/tools/wadlto/jaxrs/src/test/resources/wadl/test.xml +++ b/tools/wadlto/jaxrs/src/test/resources/wadl/test.xml @@ -2,7 +2,7 @@ <grammars /> <resources> <resource id="Test" path="/repository"> - + <param name="top" style="template" type="xs:string"/> <method name="GET" id="listRepositories"> <response> <representation mediaType="application/json" />