Skip to content

Commit

Permalink
HV-744 Wrapping exceptions from message interpolators into Validation…
Browse files Browse the repository at this point in the history
…Exception
  • Loading branch information
gunnarmorling committed Mar 8, 2013
1 parent 9bf75e0 commit 1ad238f
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 6 deletions.
Expand Up @@ -31,6 +31,7 @@
import javax.validation.ParameterNameProvider;
import javax.validation.Path;
import javax.validation.TraversableResolver;
import javax.validation.ValidationException;
import javax.validation.metadata.ConstraintDescriptor;

import org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorContextImpl;
Expand All @@ -40,6 +41,8 @@
import org.hibernate.validator.internal.metadata.BeanMetaDataManager;
import org.hibernate.validator.internal.metadata.raw.ExecutableElement;
import org.hibernate.validator.internal.util.IdentitySet;
import org.hibernate.validator.internal.util.logging.Log;
import org.hibernate.validator.internal.util.logging.LoggerFactory;

import static org.hibernate.validator.internal.util.CollectionHelper.newArrayList;
import static org.hibernate.validator.internal.util.CollectionHelper.newHashMap;
Expand All @@ -57,6 +60,8 @@
*/
public class ValidationContext<T> {

private static final Log log = LoggerFactory.make();

/**
* Access to the cached bean meta data
*/
Expand Down Expand Up @@ -415,13 +420,10 @@ public String toString() {

public ConstraintViolation<T> createConstraintViolation(ValueContext<?, ?> localContext, MessageAndPath messageAndPath, ConstraintDescriptor<?> descriptor) {
String messageTemplate = messageAndPath.getMessage();
String interpolatedMessage = messageInterpolator.interpolate(
String interpolatedMessage = interpolate(
messageTemplate,
new MessageInterpolatorContext(
descriptor,
localContext.getCurrentValidatedValue(),
getRootBeanClass()
)
localContext.getCurrentValidatedValue(),
descriptor
);
Path path = messageAndPath.getPath();

Expand Down Expand Up @@ -468,6 +470,27 @@ else if ( executableReturnValue != null ) {
}
}

private String interpolate(String messageTemplate, Object validatedValue, ConstraintDescriptor<?> descriptor) {
MessageInterpolatorContext context = new MessageInterpolatorContext(
descriptor,
validatedValue,
getRootBeanClass()
);

try {
return messageInterpolator.interpolate(
messageTemplate,
context
);
}
catch ( ValidationException ve ) {
throw ve;
}
catch ( Exception e ) {
throw log.getExceptionOcurredDuringMessageInterpolationException( e );
}
}

private boolean isAlreadyValidatedForPath(Object value, PathImpl path) {
Set<PathImpl> pathSet = processedPaths.get( value );
if ( pathSet == null ) {
Expand Down
Expand Up @@ -536,4 +536,7 @@ public interface Log extends BasicLogger {
@LogMessage(level = WARN)
@Message(id = 148, value = "An exception ocurred during evaluation of EL expression '%s'")
void evaluatingExpressionLanguageExpressionCausedException(String expression, @Cause Exception e);

@Message(id = 149, value = "An exception occured during message interpolation")
ValidationException getExceptionOcurredDuringMessageInterpolationException(@Cause Exception e);
}

0 comments on commit 1ad238f

Please sign in to comment.