Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id F245C11884 for ; Tue, 19 Aug 2014 16:24:15 +0000 (UTC) Received: (qmail 14618 invoked by uid 500); 19 Aug 2014 16:24:15 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 14562 invoked by uid 500); 19 Aug 2014 16:24:15 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 14553 invoked by uid 99); 19 Aug 2014 16:24:15 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 19 Aug 2014 16:24:15 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 9D9AF8BF525; Tue, 19 Aug 2014 16:24:15 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sergeyb@apache.org To: commits@cxf.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: git commit: [CXF-5956, CXF-5961] Support for repeating response parameters and optional multipart parameters, patches to both issues provided by Alexei Markevich Date: Tue, 19 Aug 2014 16:24:15 +0000 (UTC) Repository: cxf Updated Branches: refs/heads/2.7.x-fixes fb9a71990 -> d677b1fdb [CXF-5956, CXF-5961] Support for repeating response parameters and optional multipart parameters, patches to both issues provided by Alexei Markevich Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/d677b1fd Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/d677b1fd Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/d677b1fd Branch: refs/heads/2.7.x-fixes Commit: d677b1fdb9456b3d7f6d2d01518c25895a618cfc Parents: fb9a719 Author: Sergey Beryozkin Authored: Tue Aug 19 17:18:27 2014 +0100 Committer: Sergey Beryozkin Committed: Tue Aug 19 17:23:55 2014 +0100 ---------------------------------------------------------------------- .../cxf/tools/wadlto/jaxrs/SourceGenerator.java | 57 ++++++++++++++------ .../tools/wadlto/jaxrs/JAXRSContainerTest.java | 3 ++ .../jaxrs/src/test/resources/wadl/test.xml | 2 +- 3 files changed, 45 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/d677b1fd/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 86dd169..f660963 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 @@ -743,13 +743,14 @@ public class SourceGenerator { QName qname = convertToQName(id, expandedQName); String packageName = possiblyConvertNamespaceURI(qname.getNamespaceURI(), expandedQName); - String clsSimpleName = getSchemaClassName(packageName, info.getGrammarInfo(), + String clsFullName = getSchemaClassName(packageName, info.getGrammarInfo(), qname.getLocalPart(), info.getTypeClassNames()); - String localName = clsSimpleName == null + int lastDotIndex = clsFullName == null ? -1 : clsFullName.lastIndexOf("."); + String localName = clsFullName == null ? getClassName(qname.getLocalPart(), true, info.getTypeClassNames()) - : clsSimpleName.substring(packageName.length() + 1); - String subResponseNs = clsSimpleName == null ? getClassPackageName(packageName) - : clsSimpleName.substring(0, packageName.length()); + : clsFullName.substring(lastDotIndex + 1); + String subResponseNs = clsFullName == null ? getClassPackageName(packageName) + : clsFullName.substring(0, lastDotIndex); Object parentNode = resourceEl.getParentNode(); String parentId = parentNode instanceof Element ? ((Element)parentNode).getAttribute("id") @@ -1003,7 +1004,13 @@ public class SourceGenerator { } } if (writeAnnotations(info.isInterfaceGenerated())) { - writeAnnotation(sbCode, imports, paramAnn, name, false, false); + 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(')'); + } else { + writeAnnotation(sbCode, imports, paramAnn, name, false, false); + } sbCode.append(" "); String defaultVal = paramEl.getAttribute("default"); if (defaultVal.length() > 0) { @@ -1011,7 +1018,7 @@ public class SourceGenerator { sbCode.append(" "); } } - boolean isRepeating = Boolean.valueOf(paramEl.getAttribute("repeating")); + boolean isRepeating = isRepeatingParam(paramEl); String type = enumCreated ? getTypicalClassName(name) : getPrimitiveType(paramEl, info, imports); if (OPTIONAL_PARAMS.contains(paramAnn) @@ -1019,10 +1026,7 @@ public class SourceGenerator { && AUTOBOXED_PRIMITIVES_MAP.containsKey(type)) { type = AUTOBOXED_PRIMITIVES_MAP.get(type); } - if (isRepeating) { - addImport(imports, List.class.getName()); - type = "List<" + type + ">"; - } + type = addListIfRepeating(type, isRepeating, imports); String paramName; if (JavaUtils.isJavaKeyword(name)) { paramName = name.concat("_arg"); @@ -1086,6 +1090,18 @@ public class SourceGenerator { } } + private boolean isRepeatingParam(Element paramEl) { + return Boolean.valueOf(paramEl.getAttribute("repeating")); + } + + private String addListIfRepeating(String type, boolean isRepeating, Set imports) { + if (isRepeating) { + addImport(imports, List.class.getName()); + type = "List<" + type + ">"; + } + return type; + } + private Class getParamAnnotation(String paramStyle) { Class paramAnn = PARAM_ANNOTATIONS.get(paramStyle); if (paramAnn == null) { @@ -1206,7 +1222,7 @@ public class SourceGenerator { if (XSD_SPECIFIC_TYPE_MAP.containsKey(pair[1])) { String expandedName = "{" + XmlSchemaConstants.XSD_NAMESPACE_URI + "}" + pair[1]; if (schemaTypeMap.containsKey(expandedName)) { - return checkGenericType(schemaTypeMap.get(expandedName)); + return addImportsAndGetSimpleName(imports, schemaTypeMap.get(expandedName)); } String xsdType = XSD_SPECIFIC_TYPE_MAP.get(pair[1]); @@ -1248,13 +1264,21 @@ public class SourceGenerator { } private String addImportsAndGetSimpleName(Set imports, String clsName) { + String originalName = clsName; + int typeIndex = clsName.lastIndexOf(".."); + if (typeIndex != -1) { + clsName = clsName.substring(0, typeIndex); + } addImport(imports, clsName); int index = clsName.lastIndexOf("."); if (index != -1) { clsName = clsName.substring(index + 1); } - return checkGenericType(clsName); + if (typeIndex != -1) { + clsName = clsName + "<" + originalName.substring(typeIndex + 2) + ">"; + } + return clsName; } private String checkGenericType(String clsName) { @@ -1294,9 +1318,10 @@ public class SourceGenerator { return addImportsAndGetSimpleName(imports, mediaTypesMap.get(mediaType)); } if (checkPrimitive) { - Element param = DOMUtils.getFirstChildWithName(repElement, getWadlNamespace(), "param"); - if (param != null) { - return getPrimitiveType(param, info, imports); + Element paramEl = DOMUtils.getFirstChildWithName(repElement, getWadlNamespace(), "param"); + if (paramEl != null) { + String type = getPrimitiveType(paramEl, info, imports); + type = addListIfRepeating(type, isRepeatingParam(paramEl), imports); } } } http://git-wip-us.apache.org/repos/asf/cxf/blob/d677b1fd/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 61ee5cd..a0416b8 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 @@ -98,6 +98,9 @@ public class JAXRSContainerTest extends ProcessorTestBase { context.put(WadlToolConstants.CFG_OUTPUTDIR, output.getCanonicalPath()); context.put(WadlToolConstants.CFG_WADLURL, getLocation("/wadl/test.xml")); context.put(WadlToolConstants.CFG_COMPILE, "true"); + context.put(WadlToolConstants.CFG_SCHEMA_TYPE_MAP, + "{http://www.w3.org/2001/XMLSchema}anyType=" + + "java.io.InputStream"); context.put(WadlToolConstants.CFG_INHERIT_PARAMS, "true"); container.setContext(context); http://git-wip-us.apache.org/repos/asf/cxf/blob/d677b1fd/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 6ee4988..b70b9ef 100644 --- a/tools/wadlto/jaxrs/src/test/resources/wadl/test.xml +++ b/tools/wadlto/jaxrs/src/test/resources/wadl/test.xml @@ -24,7 +24,7 @@ - +