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;
}
Show replies by date