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
