From 98cd7f9bbf6d497ffaef3973e3a535ab2e648595 Mon Sep 17 00:00:00 2001 From: Romain Manni-Bucau Date: Fri, 30 Apr 2021 10:22:15 +0200 Subject: [PATCH] adding bean validation 3 naming handling for descriptors --- .../apache/bval/jsr/metadata/XmlBuilder.java | 2 +- .../apache/bval/jsr/xml/SchemaManager.java | 18 +- .../bval/jsr/xml/ValidationMappingParser.java | 2 + .../apache/bval/jsr/xml/ValidationParser.java | 2 + .../main/xsd/validation-configuration-3.0.xsd | 108 ++++++ .../src/main/xsd/validation-mapping-3.0.xsd | 321 ++++++++++++++++++ 6 files changed, 444 insertions(+), 9 deletions(-) create mode 100644 bval-jsr/src/main/xsd/validation-configuration-3.0.xsd create mode 100644 bval-jsr/src/main/xsd/validation-mapping-3.0.xsd diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java index 42ce4399..51ae6737 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java @@ -82,7 +82,7 @@ public class XmlBuilder { //@formatter:off public enum Version { - v10("1.0"), v11("1.1"), v20("2.0"); + v10("1.0"), v11("1.1"), v20("2.0"), v30("3.0"); //@formatter:on static Version of(ConstraintMappingsType constraintMappings) { diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/xml/SchemaManager.java b/bval-jsr/src/main/java/org/apache/bval/jsr/xml/SchemaManager.java index 606dd7cd..fb0e9765 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/xml/SchemaManager.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/xml/SchemaManager.java @@ -21,6 +21,8 @@ import java.net.URL; import java.util.Collections; import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.SortedMap; @@ -59,7 +61,7 @@ */ public class SchemaManager { public static class Builder { - private final SortedMap> data = new TreeMap<>(); + private final Map> data = new LinkedHashMap<>(); public Builder add(String version, String ns, String resource) { data.put(new Key(version, ns), new Lazy<>(() -> SchemaManager.loadSchema(resource))); @@ -67,7 +69,7 @@ public Builder add(String version, String ns, String resource) { } public SchemaManager build() { - return new SchemaManager(new TreeMap<>(data)); + return new SchemaManager(data); } } @@ -132,7 +134,7 @@ public void setContentHandler(ContentHandler handler) { @Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { if (getContentHandler() == ch) { - final String version = Objects.toString(atts.getValue("version"), data.firstKey().getVersion()); + final String version = Objects.toString(atts.getValue("version"), data.keySet().iterator().next().getVersion()); final Key schemaKey = new Key(version, uri); Exceptions.raiseUnless(data.containsKey(schemaKey), ValidationException::new, "Unknown validation schema %s", schemaKey); @@ -181,7 +183,7 @@ private class SchemaRewriter extends XMLFilterImpl { @Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { final Key schemaKey = - new Key(Objects.toString(atts.getValue("version"), data.firstKey().getVersion()), uri); + new Key(Objects.toString(atts.getValue("version"), data.keySet().iterator().next().getVersion()), uri); if (!target.equals(schemaKey) && data.containsKey(schemaKey)) { uri = target.ns; @@ -244,13 +246,13 @@ private static Class getObjectFactory(Class type) throws ClassNotFoundExce } private final Key target; - private final SortedMap> data; + private final Map> data; private final String description; - private SchemaManager(SortedMap> data) { + private SchemaManager(Map> data) { super(); - this.data = Collections.unmodifiableSortedMap(data); - this.target = data.lastKey(); + this.data = Collections.unmodifiableMap(data); + this.target = data.keySet().stream().skip(data.size() - 1).findFirst().orElseThrow(IllegalStateException::new); this.description = target.ns.substring(target.ns.lastIndexOf('/') + 1); } diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationMappingParser.java b/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationMappingParser.java index 298c22dd..c9067c4d 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationMappingParser.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationMappingParser.java @@ -57,6 +57,8 @@ public class ValidationMappingParser implements MetadataSource { "META-INF/validation-mapping-1.0.xsd") .add(XmlBuilder.Version.v11.getId(), "http://jboss.org/xml/ns/javax/validation/mapping", "META-INF/validation-mapping-1.1.xsd") + .add(XmlBuilder.Version.v30.getId(), "https://jakarta.ee/xml/ns/validation/mapping", + "META-INF/validation-mapping-3.0.xsd") .add(XmlBuilder.Version.v20.getId(), "http://xmlns.jcp.org/xml/ns/validation/mapping", "META-INF/validation-mapping-2.0.xsd") .build(); diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationParser.java b/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationParser.java index 70afc4e7..b5615f36 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationParser.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationParser.java @@ -62,6 +62,8 @@ public class ValidationParser { "META-INF/validation-configuration-1.0.xsd") .add(XmlBuilder.Version.v11.getId(), "http://jboss.org/xml/ns/javax/validation/configuration", "META-INF/validation-configuration-1.1.xsd") + .add(XmlBuilder.Version.v30.getId(), "https://jakarta.ee/xml/ns/validation/configuration", + "META-INF/validation-configuration-3.0.xsd") .add(XmlBuilder.Version.v20.getId(), "http://xmlns.jcp.org/xml/ns/validation/configuration", "META-INF/validation-configuration-2.0.xsd") .build(); diff --git a/bval-jsr/src/main/xsd/validation-configuration-3.0.xsd b/bval-jsr/src/main/xsd/validation-configuration-3.0.xsd new file mode 100644 index 00000000..54833a0a --- /dev/null +++ b/bval-jsr/src/main/xsd/validation-configuration-3.0.xsd @@ -0,0 +1,108 @@ + + + + + + + [...] + + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bval-jsr/src/main/xsd/validation-mapping-3.0.xsd b/bval-jsr/src/main/xsd/validation-mapping-3.0.xsd new file mode 100644 index 00000000..86bfa941 --- /dev/null +++ b/bval-jsr/src/main/xsd/validation-mapping-3.0.xsd @@ -0,0 +1,321 @@ + + + + + + + ... + + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +