You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2018/10/17 22:18:15 UTC
[2/6] bval git commit: one size does not fit all: dedicated utility
methods to get classloader preferring TCCL or per-class as appropriate
(typically, user customizations are found in TCCL if at all;
core functionality prefers its own classes' loaders).
one size does not fit all: dedicated utility methods to get classloader preferring TCCL or per-class as appropriate (typically, user customizations are found in TCCL if at all; core functionality prefers its own classes' loaders). Aims to address multiple OSGI-related issues.
Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/796a2ca4
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/796a2ca4
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/796a2ca4
Branch: refs/heads/master
Commit: 796a2ca4474e29f28e6e047cafe4d4485ee8880d
Parents: e285ca0
Author: Matt Benson <mb...@apache.org>
Authored: Wed Oct 17 16:30:16 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Wed Oct 17 16:30:52 2018 -0500
----------------------------------------------------------------------
.../org/apache/bval/jsr/ConfigurationImpl.java | 19 ++++---
.../org/apache/bval/jsr/ConstraintDefaults.java | 9 +++-
.../bval/jsr/DefaultMessageInterpolator.java | 12 +----
.../apache/bval/jsr/metadata/XmlBuilder.java | 2 +-
.../resolver/DefaultTraversableResolver.java | 2 +-
.../bval/jsr/xml/AnnotationProxyBuilder.java | 2 +-
.../org/apache/bval/jsr/xml/SchemaManager.java | 2 +-
.../bval/jsr/xml/ValidationMappingParser.java | 6 +--
.../apache/bval/jsr/xml/ValidationParser.java | 57 ++++++++++----------
.../java/org/apache/bval/jsr/xml/XmlUtils.java | 2 +-
.../apache/bval/util/reflection/Reflection.java | 38 ++++++++-----
.../bval/jsr/xml/ValidationParserTest.java | 24 +++++----
12 files changed, 94 insertions(+), 81 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java b/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java
index aac4824..4638722 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java
@@ -52,6 +52,7 @@ import org.apache.bval.jsr.xml.ValidationParser;
import org.apache.bval.util.CloseableAble;
import org.apache.bval.util.Exceptions;
import org.apache.bval.util.Lazy;
+import org.apache.bval.util.reflection.Reflection;
import org.apache.commons.weaver.privilizer.Privileged;
/**
@@ -156,6 +157,7 @@ public class ConfigurationImpl implements ApacheValidatorConfiguration, Configur
private boolean ignoreXmlConfiguration = false;
private ParticipantFactory participantFactory;
+ private ValidationParser validationParser;
/**
* Create a new ConfigurationImpl instance.
@@ -411,20 +413,17 @@ public class ConfigurationImpl implements ApacheValidatorConfiguration, Configur
private BootstrapConfiguration createBootstrapConfiguration() {
try {
if (!ignoreXmlConfiguration) {
- loader = Thread.currentThread().getContextClassLoader();
- if (loader == null) {
- loader = ValidationParser.class.getClassLoader();
- }
+ loader = Reflection.loaderFromThreadOrClass(ValidationParser.class);
+ validationParser = new ValidationParser(loader);
final BootstrapConfiguration xmlBootstrap =
- ValidationParser.processValidationConfig(getProperties().get(Properties.VALIDATION_XML_PATH), this);
+ validationParser.processValidationConfig(getProperties().get(Properties.VALIDATION_XML_PATH), this);
if (xmlBootstrap != null) {
return xmlBootstrap;
}
}
- loader = Thread.currentThread().getContextClassLoader();
- if (loader == null) {
- loader = ApacheValidatorFactory.class.getClassLoader();
- }
+ validationParser =
+ new ValidationParser(loader = Reflection.loaderFromThreadOrClass(ApacheValidatorFactory.class));
+
return BootstrapConfigurationImpl.DEFAULT;
} finally {
participantFactory = new ParticipantFactory(loader);
@@ -438,7 +437,7 @@ public class ConfigurationImpl implements ApacheValidatorConfiguration, Configur
this.providerClass = loadClass(bootstrapConfig.getDefaultProviderClassName());
}
bootstrapConfig.getProperties().forEach(this::addProperty);
- bootstrapConfig.getConstraintMappingResourcePaths().stream().map(ValidationParser::open)
+ bootstrapConfig.getConstraintMappingResourcePaths().stream().map(validationParser::open)
.forEach(this::addMapping);
if (!beforeCdi) {
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java b/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java
index 9ea93e7..e5184c3 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java
@@ -62,7 +62,9 @@ public class ConstraintDefaults extends ClassLoadingValidatorMappingProvider {
final ClassLoader classloader = getClassLoader();
try (final InputStream stream = classloader.getResourceAsStream(resource)) {
if (stream == null) {
- log.log(Level.WARNING, String.format("Cannot find %s", resource));
+ if (log.isLoggable(Level.WARNING)) {
+ log.log(Level.WARNING, String.format("Cannot find %s", resource));
+ }
} else {
result.load(stream);
}
@@ -87,4 +89,9 @@ public class ConstraintDefaults extends ClassLoadingValidatorMappingProvider {
e -> log.log(Level.SEVERE, "exception loading default constraint validators", e))
.collect(Collectors.toList()));
}
+
+ @Override
+ protected ClassLoader getClassLoader() {
+ return Reflection.loaderFromClassOrThread(ConstraintDefaults.class);
+ }
}
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java b/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java
index 32cd23a..15e7add 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java
@@ -198,16 +198,8 @@ public class DefaultMessageInterpolator implements MessageInterpolator {
* @return the resource bundle or <code>null</code> if none is found.
*/
private ResourceBundle getFileBasedResourceBundle(Locale locale) {
- ResourceBundle rb;
- final ClassLoader classLoader = Reflection.getClassLoader(DefaultMessageInterpolator.class);
- if (classLoader == null) {
- // 2011-03-27 jw: No privileged action required.
- // A class can always access the classloader of itself and of subclasses.
- rb = loadBundle(getClass().getClassLoader(), locale,
- USER_VALIDATION_MESSAGES + " not found by validator classloader");
- } else {
- rb = loadBundle(classLoader, locale, USER_VALIDATION_MESSAGES + " not found by thread local classloader");
- }
+ final ClassLoader classLoader = Reflection.loaderFromThreadOrClass(DefaultMessageInterpolator.class);
+ ResourceBundle rb = loadBundle(classLoader, locale, USER_VALIDATION_MESSAGES);
if (LOG_FINEST) {
if (rb == null) {
log.log(Level.FINEST, String.format("%s not found. Delegating to %s", USER_VALIDATION_MESSAGES,
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java
----------------------------------------------------------------------
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 b96f194..be23e7c 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
@@ -519,7 +519,7 @@ public class XmlBuilder {
@SuppressWarnings("unchecked")
private <T> Class<T> loadClass(final String fqn) {
- ClassLoader loader = Reflection.getClassLoader(XmlBuilder.class);
+ ClassLoader loader = Reflection.loaderFromThreadOrClass(XmlBuilder.class);
if (loader == null) {
loader = getClass().getClassLoader();
}
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java b/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java
index d09299a..5b790c5 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java
@@ -72,7 +72,7 @@ public class DefaultTraversableResolver implements TraversableResolver, CachingR
/** Tries to load detect and load JPA. */
@SuppressWarnings("unchecked")
private void initJpa() {
- final ClassLoader classLoader = Reflection.getClassLoader(DefaultTraversableResolver.class);
+ final ClassLoader classLoader = Reflection.loaderFromClassOrThread(DefaultTraversableResolver.class);
try {
Reflection.toClass(PERSISTENCE_UTIL_CLASSNAME, classLoader);
if (LOG_FINEST) {
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/jsr/xml/AnnotationProxyBuilder.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/xml/AnnotationProxyBuilder.java b/bval-jsr/src/main/java/org/apache/bval/jsr/xml/AnnotationProxyBuilder.java
index de8dd9a..194b7f5 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/xml/AnnotationProxyBuilder.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/xml/AnnotationProxyBuilder.java
@@ -214,7 +214,7 @@ public final class AnnotationProxyBuilder<A extends Annotation> {
* @return {@link Annotation}
*/
public A createAnnotation() {
- final ClassLoader classLoader = Reflection.getClassLoader(getType());
+ final ClassLoader classLoader = Reflection.loaderFromClassOrThread(getType());
@SuppressWarnings("unchecked")
final Class<A> proxyClass = (Class<A>) Proxy.getProxyClass(classLoader, getType());
return doCreateAnnotation(proxyClass, new AnnotationProxy(this));
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/jsr/xml/SchemaManager.java
----------------------------------------------------------------------
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 9e984bd..56819fb 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
@@ -229,7 +229,7 @@ public class SchemaManager {
}
static Schema loadSchema(String resource) {
- final URL schemaUrl = Reflection.getClassLoader(XmlUtils.class).getResource(resource);
+ final URL schemaUrl = Reflection.loaderFromClassOrThread(XmlUtils.class).getResource(resource);
try {
return SCHEMA_FACTORY.newSchema(schemaUrl);
} catch (SAXException e) {
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationMappingParser.java
----------------------------------------------------------------------
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 651ff9f..59cef76 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
@@ -146,12 +146,8 @@ public class ValidationMappingParser implements MetadataSource {
}
private Class<?> loadClass(final String className) {
- ClassLoader loader = Reflection.getClassLoader(ValidationMappingParser.class);
- if (loader == null) {
- loader = getClass().getClassLoader();
- }
try {
- return Reflection.toClass(className, loader);
+ return Reflection.toClass(className, Reflection.loaderFromClassOrThread(ValidationMappingParser.class));
} catch (ClassNotFoundException ex) {
throw Exceptions.create(ValidationException::new, ex, "Unable to load class: %s", className);
}
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationParser.java
----------------------------------------------------------------------
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 e37253c..70afc4e 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
@@ -41,6 +41,7 @@ import org.apache.bval.jsr.BootstrapConfigurationImpl;
import org.apache.bval.jsr.ConfigurationImpl;
import org.apache.bval.jsr.metadata.XmlBuilder;
import org.apache.bval.util.Exceptions;
+import org.apache.bval.util.Validate;
import org.apache.bval.util.reflection.Reflection;
import org.apache.commons.weaver.privilizer.Privileged;
import org.apache.commons.weaver.privilizer.Privilizing;
@@ -65,11 +66,22 @@ public class ValidationParser {
"META-INF/validation-configuration-2.0.xsd")
.build();
- public static String getValidationXmlFile(String file) {
+ private static String getValidationXmlFile(String file) {
return file == null ? DEFAULT_VALIDATION_XML_FILE : file;
}
- public static BootstrapConfiguration processValidationConfig(final String file,
+ private static Map<String, String> toMap(final List<PropertyType> property) {
+ return property == null || property.isEmpty() ? Collections.emptyMap()
+ : property.stream().collect(Collectors.toMap(PropertyType::getName, PropertyType::getValue));
+ }
+
+ private final ClassLoader loader;
+
+ public ValidationParser(ClassLoader loader) {
+ this.loader = Validate.notNull(loader, null);
+ }
+
+ public BootstrapConfiguration processValidationConfig(final String file,
final ConfigurationImpl targetConfig) {
final ValidationConfigType xmlConfig = parseXmlConfig(file);
if (xmlConfig == null) {
@@ -99,28 +111,7 @@ public class ValidationParser {
xmlConfig.getClockProvider(), new HashSet<>(xmlConfig.getValueExtractor()));
}
- private static Map<String, String> toMap(final List<PropertyType> property) {
- return property == null || property.isEmpty() ? Collections.emptyMap()
- : property.stream().collect(Collectors.toMap(PropertyType::getName, PropertyType::getValue));
- }
-
- @Privileged
- private static ValidationConfigType parseXmlConfig(final String validationXmlFile) {
- try (InputStream inputStream = getInputStream(getValidationXmlFile(validationXmlFile))) {
- if (inputStream == null) {
- log.log(Level.FINEST,
- String.format("No %s found. Using annotation based configuration only.", validationXmlFile));
- return null;
- }
- log.log(Level.FINEST, String.format("%s found.", validationXmlFile));
-
- return SCHEMA_MANAGER.unmarshal(new InputSource(inputStream), ValidationConfigType.class);
- } catch (Exception e) {
- throw Exceptions.create(ValidationException::new, e, "Unable to parse %s", validationXmlFile);
- }
- }
-
- public static InputStream open(String mappingFileName) {
+ public InputStream open(String mappingFileName) {
if (mappingFileName.charAt(0) == '/') {
// Classloader needs a path without a starting /
mappingFileName = mappingFileName.substring(1);
@@ -136,14 +127,26 @@ public class ValidationParser {
}
}
- static InputStream getInputStream(final String path) throws IOException {
- final ClassLoader loader = Reflection.getClassLoader(ValidationParser.class);
+ InputStream getInputStream(final String path) throws IOException {
final List<URL> urls = Collections.list(loader.getResources(path));
Exceptions.raiseIf(urls.stream().distinct().count() > 1, ValidationException::new,
"More than one %s is found in the classpath", path);
return urls.isEmpty() ? null : urls.get(0).openStream();
}
- private ValidationParser() {
+ @Privileged
+ private ValidationConfigType parseXmlConfig(final String validationXmlFile) {
+ try (InputStream inputStream = getInputStream(getValidationXmlFile(validationXmlFile))) {
+ if (inputStream == null) {
+ log.log(Level.FINEST,
+ String.format("No %s found. Using annotation based configuration only.", validationXmlFile));
+ return null;
+ }
+ log.log(Level.FINEST, String.format("%s found.", validationXmlFile));
+
+ return SCHEMA_MANAGER.unmarshal(new InputSource(inputStream), ValidationConfigType.class);
+ } catch (Exception e) {
+ throw Exceptions.create(ValidationException::new, e, "Unable to parse %s", validationXmlFile);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/jsr/xml/XmlUtils.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/xml/XmlUtils.java b/bval-jsr/src/main/java/org/apache/bval/jsr/xml/XmlUtils.java
index 2826174..a517845 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/xml/XmlUtils.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/xml/XmlUtils.java
@@ -43,7 +43,7 @@ class XmlUtils {
private static final SchemaFactory SCHEMA_FACTORY = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
static Schema loadSchema(String resource) {
- final URL schemaUrl = Reflection.getClassLoader(XmlUtils.class).getResource(resource);
+ final URL schemaUrl = Reflection.loaderFromClassOrThread(XmlUtils.class).getResource(resource);
try {
return SCHEMA_FACTORY.newSchema(schemaUrl);
} catch (SAXException e) {
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/main/java/org/apache/bval/util/reflection/Reflection.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/util/reflection/Reflection.java b/bval-jsr/src/main/java/org/apache/bval/util/reflection/Reflection.java
index abb2f7c..ae03ba3 100644
--- a/bval-jsr/src/main/java/org/apache/bval/util/reflection/Reflection.java
+++ b/bval-jsr/src/main/java/org/apache/bval/util/reflection/Reflection.java
@@ -35,6 +35,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
+import org.apache.bval.util.Validate;
import org.apache.commons.weaver.privilizer.Privilizing;
/**
@@ -219,18 +220,32 @@ public class Reflection {
}
/**
- * Get a usable {@link ClassLoader}: that of {@code clazz} if {@link Thread#getContextClassLoader()} returns {@code null}.
+ * Get a {@link ClassLoader} preferring that of {@code clazz} over
+ * {@link Thread#getContextClassLoader()} of current {@link Thread}.
+ *
* @param clazz
* @return {@link ClassLoader}
*/
- public static ClassLoader getClassLoader(final Class<?> clazz) {
- final ClassLoader cl = Thread.currentThread().getContextClassLoader();
- return cl == null ? clazz.getClassLoader() : cl;
+ public static ClassLoader loaderFromClassOrThread(final Class<?> clazz) {
+ return Optional.of(clazz).map(Class::getClassLoader)
+ .orElseGet(() -> Thread.currentThread().getContextClassLoader());
+ }
+
+ /**
+ * Get a {@link ClassLoader} preferring
+ * {@link Thread#getContextClassLoader()} of current {@link Thread} over
+ * that of {@code fallbackClass}.
+ *
+ * @param fallbackClass
+ * @return {@link ClassLoader}
+ */
+ public static ClassLoader loaderFromThreadOrClass(final Class<?> fallbackClass) {
+ return Optional.of(Thread.currentThread()).map(Thread::getContextClassLoader)
+ .orElseGet(() -> Validate.notNull(fallbackClass).getClassLoader());
}
public static Class<?> toClass(String className) throws ClassNotFoundException {
- ClassLoader cl = getClassLoader(Reflection.class);
- return toClass(className, cl);
+ return toClass(className, loaderFromClassOrThread(Reflection.class));
}
/**
@@ -251,10 +266,9 @@ public class Reflection {
*
* @throws RuntimeException on load error
*/
- public static Class<?> toClass(String className, boolean resolve, ClassLoader loader) throws ClassNotFoundException {
- if (className == null) {
- throw new NullPointerException("className == null");
- }
+ public static Class<?> toClass(String className, boolean resolve, ClassLoader loader)
+ throws ClassNotFoundException {
+ Validate.notNull(className, "className was null");
// array handling
int dims = 0;
@@ -276,7 +290,6 @@ public class Reflection {
}
}
}
-
if (dims > 0) {
StringBuilder buf = new StringBuilder(className.length() + dims + 2);
for (int i = 0; i < dims; i++) {
@@ -291,7 +304,6 @@ public class Reflection {
}
className = buf.toString();
}
-
if (loader == null) {
loader = Thread.currentThread().getContextClassLoader();
}
@@ -417,7 +429,7 @@ public class Reflection {
try {
return cls.getConstructor().newInstance();
} catch (final Exception ex) {
- throw new RuntimeException("Cannot instantiate : " + cls, ex);
+ throw new IllegalArgumentException("Cannot instantiate : " + cls, ex);
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/796a2ca4/bval-jsr/src/test/java/org/apache/bval/jsr/xml/ValidationParserTest.java
----------------------------------------------------------------------
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 a2a6faa..c87de80 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
@@ -43,29 +43,33 @@ import org.apache.bval.jsr.ConfigurationImpl;
import org.apache.bval.jsr.example.XmlEntitySampleBean;
import org.apache.bval.jsr.resolver.SimpleTraversableResolver;
import org.apache.bval.util.reflection.Reflection;
+import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
/**
* ValidationParser Tester.
- *
- * @author <Authors name>
- * @version 1.0
- * @since <pre>11/25/2009</pre>
*/
public class ValidationParserTest implements ApacheValidatorConfiguration.Properties {
@Rule
public ExpectedException thrown = ExpectedException.none();
+ private ValidationParser validationParser;
+
+ @Before
+ public void setup() {
+ validationParser = new ValidationParser(Reflection.loaderFromThreadOrClass(ValidationParserTest.class));
+ }
+
@Test
public void testGetInputStream() throws IOException {
- assertNotNull(ValidationParser.getInputStream("sample-validation.xml"));
+ assertNotNull(validationParser.getInputStream("sample-validation.xml"));
// make sure there are duplicate resources on the classpath before the next checks:
final Enumeration<URL> resources =
- Reflection.getClassLoader(ValidationParser.class).getResources("META-INF/MANIFEST.MF");
+ Reflection.loaderFromClassOrThread(ValidationParser.class).getResources("META-INF/MANIFEST.MF");
assumeTrue(resources.hasMoreElements());
resources.nextElement();
@@ -76,25 +80,25 @@ public class ValidationParserTest implements ApacheValidatorConfiguration.Proper
public void testGetNonUniqueInputStream() throws IOException {
thrown.expect(ValidationException.class);
thrown.expectMessage("More than ");
- ValidationParser.getInputStream("META-INF/MANIFEST.MF"); // this is available in multiple jars hopefully
+ validationParser.getInputStream("META-INF/MANIFEST.MF"); // this is available in multiple jars hopefully
}
@Test
public void testParse() {
ConfigurationImpl config = new ConfigurationImpl(null, new ApacheValidationProvider());
- ValidationParser.processValidationConfig("sample-validation.xml", config);
+ validationParser.processValidationConfig("sample-validation.xml", config);
}
@Test
public void testParseV11() {
ConfigurationImpl config = new ConfigurationImpl(null, new ApacheValidationProvider());
- ValidationParser.processValidationConfig("sample-validation11.xml", config);
+ validationParser.processValidationConfig("sample-validation11.xml", config);
}
@Test
public void testParseV20() {
ConfigurationImpl config = new ConfigurationImpl(null, new ApacheValidationProvider());
- ValidationParser.processValidationConfig("sample-validation2.xml", config);
+ validationParser.processValidationConfig("sample-validation2.xml", config);
}
@Test