This is an automated email from the ASF dual-hosted git repository.
jlmonteiro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bval.git
The following commit(s) were added to refs/heads/master by this push:
new 46f8f0a BVAL-216 Fix XML Filter to override XML namespace during
descriptors parsing
46f8f0a is described below
commit 46f8f0a6b5ccf0d228f38d275428bae13ff2ef73
Author: Jean-Louis Monteiro <[email protected]>
AuthorDate: Wed Apr 6 21:49:38 2022 +0200
BVAL-216 Fix XML Filter to override XML namespace during descriptors parsing
---
.../org/apache/bval/jsr/xml/SchemaManager.java | 23 ++++++++++++-----
.../apache/bval/jsr/xml/ValidationParserTest.java | 22 +++++++++++++---
bval-jsr/src/test/resources/sample-validation3.xml | 30 ++++++++++++++++++++++
3 files changed, 65 insertions(+), 10 deletions(-)
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 fb0e976..268ad1a 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
@@ -25,8 +25,6 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
-import java.util.SortedMap;
-import java.util.TreeMap;
import java.util.function.Function;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -178,24 +176,35 @@ public class SchemaManager {
}
private class SchemaRewriter extends XMLFilterImpl {
+
private boolean root = true;
+ private Key rootSchemaKey = null;
@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.keySet().iterator().next().getVersion()), uri);
- if (!target.equals(schemaKey) && data.containsKey(schemaKey)) {
+ // if no version attribute is available, we pick up the first
known version (aka 1.1 most likely)
+ // not sure if that is either possible and correct
+ if (root) {
+ rootSchemaKey = new Key(
+ Objects.toString(atts.getValue("version"),
data.keySet().iterator().next().getVersion()),
+ uri);
+ }
+
+ // no matter what we see now, if the namespace from the root
element is different, we override the namespace
+ // the root version attribute gets also overridden for the root
element only
+ if (!target.equals(rootSchemaKey)) {
uri = target.ns;
if (root) {
- atts = rewrite(atts);
+ atts = rewriteVersion(atts);
root = false;
}
}
+
super.startElement(uri, localName, qName, atts);
}
- private Attributes rewrite(Attributes atts) {
+ private Attributes rewriteVersion(Attributes atts) {
final AttributesImpl result;
if (atts instanceof AttributesImpl) {
result = (AttributesImpl) atts;
diff --git
a/bval-jsr/src/test/java/org/apache/bval/jsr/xml/ValidationParserTest.java
b/bval-jsr/src/test/java/org/apache/bval/jsr/xml/ValidationParserTest.java
index c87de80..ae05400 100644
--- a/bval-jsr/src/test/java/org/apache/bval/jsr/xml/ValidationParserTest.java
+++ b/bval-jsr/src/test/java/org/apache/bval/jsr/xml/ValidationParserTest.java
@@ -31,6 +31,7 @@ import java.net.URL;
import java.util.Enumeration;
import java.util.Set;
+import javax.validation.BootstrapConfiguration;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidationException;
@@ -86,19 +87,34 @@ public class ValidationParserTest implements
ApacheValidatorConfiguration.Proper
@Test
public void testParse() {
ConfigurationImpl config = new ConfigurationImpl(null, new
ApacheValidationProvider());
- validationParser.processValidationConfig("sample-validation.xml",
config);
+ final BootstrapConfiguration configuration =
+ validationParser.processValidationConfig("sample-validation.xml",
config);
+ assertEquals("org.apache.bval.jsr.xml.TestMessageInterpolator",
configuration.getMessageInterpolatorClassName());
}
@Test
public void testParseV11() {
ConfigurationImpl config = new ConfigurationImpl(null, new
ApacheValidationProvider());
- validationParser.processValidationConfig("sample-validation11.xml",
config);
+ final BootstrapConfiguration configuration =
+
validationParser.processValidationConfig("sample-validation11.xml", config);
+ assertEquals("org.apache.bval.jsr.xml.TestMessageInterpolator",
configuration.getMessageInterpolatorClassName());
+
}
@Test
public void testParseV20() {
ConfigurationImpl config = new ConfigurationImpl(null, new
ApacheValidationProvider());
- validationParser.processValidationConfig("sample-validation2.xml",
config);
+ final BootstrapConfiguration configuration =
+ validationParser.processValidationConfig("sample-validation2.xml",
config);
+ assertEquals("org.apache.bval.jsr.xml.TestMessageInterpolator",
configuration.getMessageInterpolatorClassName());
+ }
+
+ @Test
+ public void testParseV30() {
+ ConfigurationImpl config = new ConfigurationImpl(null, new
ApacheValidationProvider());
+ final BootstrapConfiguration configuration =
+ validationParser.processValidationConfig("sample-validation3.xml",
config);
+ assertEquals("org.apache.bval.jsr.xml.TestMessageInterpolator",
configuration.getMessageInterpolatorClassName());
}
@Test
diff --git a/bval-jsr/src/test/resources/sample-validation3.xml
b/bval-jsr/src/test/resources/sample-validation3.xml
new file mode 100644
index 0000000..3168023
--- /dev/null
+++ b/bval-jsr/src/test/resources/sample-validation3.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<validation-config
+ xmlns="https://jakarta.ee/xml/ns/validation/configuration"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="https://jakarta.ee/xml/ns/validation/configuration
validation-configuration-3.0.xsd"
+ version="3.0">
+
+
<default-provider>org.apache.bval.jsr.ApacheValidationProvider</default-provider>
+
<message-interpolator>org.apache.bval.jsr.xml.TestMessageInterpolator</message-interpolator>
+
<traversable-resolver>org.apache.bval.jsr.resolver.SimpleTraversableResolver</traversable-resolver>
+
<constraint-validator-factory>org.apache.bval.jsr.xml.TestConstraintValidatorFactory</constraint-validator-factory>
+ <constraint-mapping>sample-constraints.xml</constraint-mapping>
+ <property name="test-prop">test-prop-value</property>
+</validation-config>