You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dw...@apache.org on 2009/04/29 22:24:44 UTC
svn commit: r769911 -
/geronimo/specs/trunk/geronimo-validation_1.0_spec/src/main/java/javax/validation/Validation.java
Author: dwoods
Date: Wed Apr 29 20:24:44 2009
New Revision: 769911
URL: http://svn.apache.org/viewvc?rev=769911&view=rev
Log:
GERONIMO-4619 Add implementation of getValidationProviders()
Modified:
geronimo/specs/trunk/geronimo-validation_1.0_spec/src/main/java/javax/validation/Validation.java
Modified: geronimo/specs/trunk/geronimo-validation_1.0_spec/src/main/java/javax/validation/Validation.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-validation_1.0_spec/src/main/java/javax/validation/Validation.java?rev=769911&r1=769910&r2=769911&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-validation_1.0_spec/src/main/java/javax/validation/Validation.java (original)
+++ geronimo/specs/trunk/geronimo-validation_1.0_spec/src/main/java/javax/validation/Validation.java Wed Apr 29 20:24:44 2009
@@ -16,6 +16,13 @@
*/
package javax.validation;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
import java.util.List;
import javax.validation.bootstrap.GenericBootstrap;
@@ -62,15 +69,71 @@
private static class DefaultValidationProviderResolver implements
ValidationProviderResolver {
+ private static final String SPI_CFG =
+ "META-INF/services/javax.validation.spi.ValidationProvider";
+
/*
* (non-Javadoc)
*
* @see
* javax.validation.ValidationProviderResolver#getValidationProviders()
*/
- // FIXME JSR-303 - Needs to be implemented
public List<ValidationProvider> getValidationProviders() {
- throw new ValidationException("TODO - Not implemented yet");
+ List<ValidationProvider> providers = new ArrayList<ValidationProvider>();
+ try {
+ // get our classloader
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if ( cl == null )
+ cl = DefaultValidationProviderResolver.class.getClassLoader();
+ // find all service provider cfgs
+ Enumeration<URL> cfgs = cl.getResources(SPI_CFG);
+ while (cfgs.hasMoreElements()) {
+ URL url = cfgs.nextElement();
+ BufferedReader br = null;
+ try {
+ br = new BufferedReader(new InputStreamReader(
+ url.openStream()), 256);
+ String line = br.readLine();
+ // cfgs may contain multiple providers and/or comments
+ while (line != null) {
+ line = line.trim();
+ if (!line.startsWith("#")) {
+ try {
+ // try loading the specified class
+ final Class<?> provider = cl.loadClass(line);
+ // create an instance to return
+ providers.add((ValidationProvider)provider.newInstance());
+ } catch (ClassNotFoundException e) {
+ throw new ValidationException(
+ "Failed to load provider " + line +
+ " configured in file " + url, e);
+ } catch (InstantiationException e) {
+ throw new ValidationException(
+ "Failed to instantiate provider " + line +
+ " configured in file " + url, e);
+ } catch (IllegalAccessException e) {
+ throw new ValidationException(
+ "Failed to load provider " + line +
+ " configured in file " + url, e);
+ }
+ }
+ line = br.readLine();
+ }
+ br.close();
+ } catch (IOException e) {
+ throw new ValidationException(
+ "Error trying to read " + url, e);
+ } finally {
+ if (br != null)
+ br.close();
+ }
+ }
+ } catch (IOException e) {
+ throw new ValidationException(
+ "Error trying to read a " + SPI_CFG, e);
+ }
+ // caller must handle the case of no providers found
+ return providers;
}
}
@@ -96,8 +159,7 @@
.createGenericConfiguration(this);
} catch (Exception e) {
throw new ValidationException(
- "Could not create configuration. Nested exception = " +
- e.getMessage());
+ "Could not create configuration.", e);
}
}