Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 98CBE200B73 for ; Mon, 29 Aug 2016 22:30:39 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 97201160AB8; Mon, 29 Aug 2016 20:30:39 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id B4325160A89 for ; Mon, 29 Aug 2016 22:30:38 +0200 (CEST) Received: (qmail 47729 invoked by uid 500); 29 Aug 2016 20:30:37 -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 47720 invoked by uid 99); 29 Aug 2016 20:30:37 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 29 Aug 2016 20:30:37 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 6FDB9DFF58; Mon, 29 Aug 2016 20:30:37 +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: cxf git commit: [CXF-7032] Adding a -beanValidation option, test to be enhanced Date: Mon, 29 Aug 2016 20:30:37 +0000 (UTC) archived-at: Mon, 29 Aug 2016 20:30:39 -0000 Repository: cxf Updated Branches: refs/heads/3.0.x-fixes 914115fbd -> a2b365d6a [CXF-7032] Adding a -beanValidation option, test to be enhanced Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/a2b365d6 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/a2b365d6 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/a2b365d6 Branch: refs/heads/3.0.x-fixes Commit: a2b365d6a6f8ed67727ea2e10864b684b872beca Parents: 914115f Author: Sergey Beryozkin Authored: Mon Aug 29 21:27:48 2016 +0100 Committer: Sergey Beryozkin Committed: Mon Aug 29 21:30:22 2016 +0100 ---------------------------------------------------------------------- .../cxf/tools/wadlto/WadlToolConstants.java | 1 + .../cxf/tools/wadlto/jaxrs/JAXRSContainer.java | 1 + .../cxf/tools/wadlto/jaxrs/SourceGenerator.java | 50 +++++++++++++++++--- .../cxf/tools/wadlto/jaxrs/jaxrs-toolspec.xml | 8 ++++ .../tools/wadlto/jaxrs/JAXRSContainerTest.java | 22 +++++++++ .../wadl/resourceSameTargetNsSchemas.xml | 1 + 6 files changed, 77 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/a2b365d6/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/WadlToolConstants.java ---------------------------------------------------------------------- diff --git a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/WadlToolConstants.java b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/WadlToolConstants.java index 673f7a5..50611a4 100644 --- a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/WadlToolConstants.java +++ b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/WadlToolConstants.java @@ -43,6 +43,7 @@ public final class WadlToolConstants { public static final String CFG_SCHEMA_TYPE_MAP = "schemaTypeMap"; public static final String CFG_MEDIA_TYPE_MAP = "mediaTypeMap"; public static final String CFG_MULTIPLE_XML_REPS = "supportMultipleXmlReps"; + public static final String CFG_BEAN_VALIDATION = "beanValidation"; public static final String CFG_CATALOG = ToolConstants.CFG_CATALOG; public static final String CFG_BINDING = ToolConstants.CFG_BINDING; http://git-wip-us.apache.org/repos/asf/cxf/blob/a2b365d6/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 687e533..166adbf 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 @@ -133,6 +133,7 @@ public class JAXRSContainer extends AbstractCXFToolContainer { } sg.setSupportMultipleXmlReps(context.optionSet(WadlToolConstants.CFG_MULTIPLE_XML_REPS)); + sg.setSupportBeanValidation(context.optionSet(WadlToolConstants.CFG_BEAN_VALIDATION)); sg.setCreateJavaDocs(context.optionSet(WadlToolConstants.CFG_CREATE_JAVA_DOCS)); // set the base path sg.setWadlPath(wadlURL); http://git-wip-us.apache.org/repos/asf/cxf/blob/a2b365d6/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 e25eda7..2cf5aab 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 @@ -133,6 +133,8 @@ public class SourceGenerator { private static final Map> HTTP_METHOD_ANNOTATIONS; private static final Map> PARAM_ANNOTATIONS; private static final String PLAIN_PARAM_STYLE = "plain"; + private static final String BEAN_VALID_SIMPLE_NAME = "Valid"; + private static final String BEAN_VALID_FULL_NAME = "javax.validation." + BEAN_VALID_SIMPLE_NAME; private static final Set RESOURCE_LEVEL_PARAMS; private static final Map AUTOBOXED_PRIMITIVES_MAP; private static final Map XSD_SPECIFIC_TYPE_MAP; @@ -218,6 +220,7 @@ public class SourceGenerator { private Map mediaTypesMap = Collections.emptyMap(); private Bus bus; private boolean supportMultipleRepsWithElements; + private boolean supportBeanValidation; private boolean validateWadl; private SchemaCollection schemaCollection = new SchemaCollection(); private String encoding; @@ -662,7 +665,7 @@ public class SourceGenerator { } } } - + private void addImport(Set imports, String clsName) { if (imports == null || clsName.startsWith("java.lang") || !clsName.contains(".")) { return; @@ -760,8 +763,14 @@ public class SourceGenerator { writeCustomHttpMethod(info, classPackage, methodName, sbMethodCode, imports); } writeFormatAnnotations(requestReps, sbMethodCode, imports, true, null); - writeFormatAnnotations(getWadlElements(getOKResponse(responseEls), "representation"), + List responseReps = getWadlElements(getOKResponse(responseEls), "representation"); + writeFormatAnnotations(responseReps, sbMethodCode, imports, false, requestRepWithElement); + if (supportBeanValidation && !responseRequired + && isRepWithElementAvailable(responseReps, info.getGrammarInfo())) { + addImport(imports, BEAN_VALID_FULL_NAME); + sbMethodCode.append("@").append(BEAN_VALID_SIMPLE_NAME).append(getLineSep()).append(TAB); + } } if (!isRoot && !"/".equals(currentPath)) { writeAnnotation(sbMethodCode, imports, Path.class, currentPath, true, true); @@ -1013,6 +1022,18 @@ public class SourceGenerator { return duplicatesCount > 0; } + private boolean isRepWithElementAvailable(List repElements, + GrammarInfo gInfo) { + for (Element el : repElements) { + String value = el.getAttribute("element"); + if (value.length() > 0 + && (value.contains(":") || gInfo.isSchemaWithoutTargetNamespace())) { + return true; + } + } + return false; + } + private List getParameters(Element resourceEl, List inheritedParams, boolean isSubresourceMethod) { List inParamElements = new LinkedList(); @@ -1232,6 +1253,7 @@ public class SourceGenerator { } } + boolean writeAnnotations = writeAnnotations(info.isInterfaceGenerated()); for (int i = 0; i < inParamEls.size(); i++) { Element paramEl = inParamEls.get(i); @@ -1250,7 +1272,7 @@ public class SourceGenerator { enumCreated = true; } } - if (writeAnnotations(info.isInterfaceGenerated())) { + if (writeAnnotations) { String required = paramEl.getAttribute("required"); if (Multipart.class.equals(paramAnn) && "false".equals(required)) { writeAnnotation(sbCode, imports, paramAnn, null, false, false); @@ -1294,10 +1316,15 @@ public class SourceGenerator { } String elementParamType = null; String elementParamName = null; + boolean writeBeanValidation = false; if (!form) { if (!jaxpRequired) { elementParamType = getElementRefName(repElement, info, imports, false); if (elementParamType != null) { + if (writeAnnotations && supportBeanValidation + && isRepWithElementAvailable(Collections.singletonList(repElement), info.getGrammarInfo())) { + writeBeanValidation = true; + } int lastIndex = elementParamType.lastIndexOf('.'); if (lastIndex != -1) { elementParamType = elementParamType.substring(lastIndex + 1); @@ -1328,6 +1355,11 @@ public class SourceGenerator { if (inParamEls.size() > 0) { sbCode.append(", "); } + if (writeBeanValidation) { + addImport(imports, BEAN_VALID_FULL_NAME); + sbCode.append("@").append(BEAN_VALID_SIMPLE_NAME).append(" "); + } + sbCode.append(elementParamType).append(" ").append(elementParamName); } if (sbMethodDocs != null && repElement != null) { @@ -1337,10 +1369,12 @@ public class SourceGenerator { if (inParamEls.size() > 0 || elementParamType != null) { sbCode.append(", "); } - addImport(imports, Suspended.class.getName()); + if (writeAnnotations) { + addImport(imports, Suspended.class.getName()); + sbCode.append("@").append(Suspended.class.getSimpleName()).append(" "); + } addImport(imports, AsyncResponse.class.getName()); - sbCode.append("@").append(Suspended.class.getSimpleName()).append(" ") - .append(AsyncResponse.class.getSimpleName()).append(" ").append("async"); + sbCode.append(AsyncResponse.class.getSimpleName()).append(" ").append("async"); } } @@ -1998,6 +2032,10 @@ public class SourceGenerator { this.createJavaDocs = createJavaDocs; } + public void setSupportBeanValidation(boolean supportBeanValidation) { + this.supportBeanValidation = supportBeanValidation; + } + private static class GrammarInfo { private Map nsMap = new HashMap(); private Map elementTypeMap = new HashMap(); http://git-wip-us.apache.org/repos/asf/cxf/blob/a2b365d6/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 5a27e42..6bec5ba 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 @@ -240,6 +240,14 @@ Examples: encoding +