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 <[email protected]>
Authored: Wed Oct 17 16:30:16 2018 -0500
Committer: Matt Benson <[email protected]>
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

Reply via email to