[hibernate-commits] Hibernate SVN: r19284 - in validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator: xml and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Apr 23 07:03:02 EDT 2010


Author: hardy.ferentschik
Date: 2010-04-23 07:03:02 -0400 (Fri, 23 Apr 2010)
New Revision: 19284

Modified:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ConfigurationImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/xml/ValidationXmlParser.java
Log:
HV-312  Made sure that streams opened by the framework gets closed as well

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ConfigurationImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ConfigurationImpl.java	2010-04-22 17:20:04 UTC (rev 19283)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ConfigurationImpl.java	2010-04-23 11:03:02 UTC (rev 19284)
@@ -17,7 +17,9 @@
 */
 package org.hibernate.validator.engine;
 
+import java.io.IOException;
 import java.io.InputStream;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -68,6 +70,8 @@
 	private ValidationBootstrapParameters validationBootstrapParameters;
 	private boolean ignoreXmlConfiguration = false;
 
+	private Set<InputStream> configurationStreams = new HashSet<InputStream>();
+
 	public ConfigurationImpl(BootstrapState state) {
 		if ( state.getValidationProviderResolver() == null ) {
 			this.providerResolver = state.getDefaultValidationProviderResolver();
@@ -122,26 +126,39 @@
 	public ValidatorFactory buildValidatorFactory() {
 		parseValidationXml();
 		ValidatorFactory factory = null;
-		if ( isSpecificProvider() ) {
-			factory = validationBootstrapParameters.provider.buildValidatorFactory( this );
-		}
-		else {
-			final Class<? extends ValidationProvider<?>> providerClass = validationBootstrapParameters.providerClass;
-			if ( providerClass != null ) {
-				for ( ValidationProvider provider : providerResolver.getValidationProviders() ) {
-					if ( providerClass.isAssignableFrom( provider.getClass() ) ) {
-						factory = provider.buildValidatorFactory( this );
-						break;
+		try {
+			if ( isSpecificProvider() ) {
+				factory = validationBootstrapParameters.provider.buildValidatorFactory( this );
+			}
+			else {
+				final Class<? extends ValidationProvider<?>> providerClass = validationBootstrapParameters.providerClass;
+				if ( providerClass != null ) {
+					for ( ValidationProvider provider : providerResolver.getValidationProviders() ) {
+						if ( providerClass.isAssignableFrom( provider.getClass() ) ) {
+							factory = provider.buildValidatorFactory( this );
+							break;
+						}
 					}
+					if ( factory == null ) {
+						throw new ValidationException( "Unable to find provider: " + providerClass );
+					}
 				}
-				if ( factory == null ) {
-					throw new ValidationException( "Unable to find provider: " + providerClass );
+				else {
+					List<ValidationProvider<?>> providers = providerResolver.getValidationProviders();
+					assert providers.size() != 0; // I run therefore I am
+					factory = providers.get( 0 ).buildValidatorFactory( this );
 				}
 			}
-			else {
-				List<ValidationProvider<?>> providers = providerResolver.getValidationProviders();
-				assert providers.size() != 0; // I run therefore I am
-				factory = providers.get( 0 ).buildValidatorFactory( this );
+		}
+		finally {
+			// close all input streams opened by this configuration
+			for ( InputStream in : configurationStreams ) {
+				try {
+					in.close();
+				}
+				catch ( IOException io ) {
+					log.warn( "Unable to close input stream." );
+				}
 			}
 		}
 
@@ -248,6 +265,7 @@
 		}
 
 		validationBootstrapParameters.mappings.addAll( xmlParameters.mappings );
+		configurationStreams.addAll( xmlParameters.mappings );
 
 		for ( Map.Entry<String, String> entry : xmlParameters.configProperties.entrySet() ) {
 			if ( validationBootstrapParameters.configProperties.get( entry.getKey() ) == null ) {

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/xml/ValidationXmlParser.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/xml/ValidationXmlParser.java	2010-04-22 17:20:04 UTC (rev 19283)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/xml/ValidationXmlParser.java	2010-04-23 11:03:02 UTC (rev 19284)
@@ -17,6 +17,7 @@
 */
 package org.hibernate.validator.xml;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.security.AccessController;
@@ -235,6 +236,13 @@
 			log.error( "Error parsing validation.xml: {}", e.getMessage() );
 			throw new ValidationException( "Unable to parse " + VALIDATION_XML_FILE );
 		}
+		finally {
+			try {
+				inputStream.close();
+			}   catch ( IOException io) {
+				log.warn( "Unable to close input stream for " + VALIDATION_XML_FILE);
+			}
+		}
 		return validationConfig;
 	}
 



More information about the hibernate-commits mailing list