diff --git a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ConfiguredConstraint.java b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ConfiguredConstraint.java index 6de15cf46d..7b60f8894c 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ConfiguredConstraint.java +++ b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ConfiguredConstraint.java @@ -59,12 +59,18 @@ public static ConfiguredConstraint forParameter(Constr ); } - public static ConfiguredConstraint forExecutable(ConstraintDef constraint, ExecutableElement executable) { + public static ConfiguredConstraint forReturnValue(ConstraintDef constraint, ExecutableElement executable) { return new ConfiguredConstraint( constraint, ConstraintLocation.forReturnValue( executable ), executable.getElementType() ); } + public static ConfiguredConstraint forCrossParameter(ConstraintDef constraint, ExecutableElement executable) { + return new ConfiguredConstraint( + constraint, ConstraintLocation.forCrossParameter( executable ), executable.getElementType() + ); + } + public ConstraintDef getConstraint() { return constraint; } diff --git a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/CrossParameterConstraintMappingContextImpl.java b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/CrossParameterConstraintMappingContextImpl.java index 1151df70c2..8f1c8d340a 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/CrossParameterConstraintMappingContextImpl.java +++ b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/CrossParameterConstraintMappingContextImpl.java @@ -32,7 +32,7 @@ final class CrossParameterConstraintMappingContextImpl @Override public CrossParameterConstraintMappingContext constraint(ConstraintDef definition) { - super.addConstraint( ConfiguredConstraint.forExecutable( definition, executableContext.getExecutable() ) ); + super.addConstraint( ConfiguredConstraint.forCrossParameter( definition, executableContext.getExecutable() ) ); return this; } diff --git a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/PropertyConstraintMappingContextImpl.java b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/PropertyConstraintMappingContextImpl.java index 52d4acc88d..36c50acfb2 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/PropertyConstraintMappingContextImpl.java +++ b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/PropertyConstraintMappingContextImpl.java @@ -62,7 +62,7 @@ public PropertyConstraintMappingContext constraint(ConstraintDef definitio } else { super.addConstraint( - ConfiguredConstraint.forExecutable( + ConfiguredConstraint.forReturnValue( definition, ExecutableElement.forMethod( (Method) member ) ) ); diff --git a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ReturnValueConstraintMappingContextImpl.java b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ReturnValueConstraintMappingContextImpl.java index e903c2d30c..f71d85babb 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ReturnValueConstraintMappingContextImpl.java +++ b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ReturnValueConstraintMappingContextImpl.java @@ -39,7 +39,7 @@ protected ReturnValueConstraintMappingContext getThis() { @Override public ReturnValueConstraintMappingContext constraint(ConstraintDef definition) { - super.addConstraint( ConfiguredConstraint.forExecutable( definition, executableContext.getExecutable() ) ); + super.addConstraint( ConfiguredConstraint.forReturnValue( definition, executableContext.getExecutable() ) ); return this; } diff --git a/engine/src/test/java/org/hibernate/validator/test/cfg/MethodConstraintMappingTest.java b/engine/src/test/java/org/hibernate/validator/test/cfg/MethodConstraintMappingTest.java index 5d44c5eac7..3fd0f7e069 100644 --- a/engine/src/test/java/org/hibernate/validator/test/cfg/MethodConstraintMappingTest.java +++ b/engine/src/test/java/org/hibernate/validator/test/cfg/MethodConstraintMappingTest.java @@ -666,6 +666,38 @@ public void crossParameterConstraint() { } } + @Test + @TestForIssue(jiraKey = "HV-1220") + public void crossParameterConstraintOnMethodReturningVoid() { + ConstraintMapping mapping = config.createConstraintMapping(); + mapping.type( GreetingService.class ) + .method( "sayNothing", String.class ) + .crossParameter() + .constraint( + new GenericConstraintDef( + GenericAndCrossParameterConstraint.class + ) + ); + config.addMapping( mapping ); + + try { + GreetingService service = getValidatingProxy( + wrappedObject, + config.buildValidatorFactory().getValidator() + ); + service.sayNothing( "" ); + + fail( "Expected exception wasn't thrown." ); + } + catch (ConstraintViolationException e) { + + assertCorrectConstraintViolationMessages( + e, "default message" + ); + assertCorrectPropertyPaths( e, "sayNothing." ); + } + } + private interface TestGroup { } @@ -708,6 +740,8 @@ public interface GreetingService { User getUser(); + void sayNothing(String string1); + } public class GreetingServiceImpl implements GreetingService { @@ -747,5 +781,10 @@ public Message getHello() { public User getUser() { return new User( null ); } + + @Override + public void sayNothing(String string1) { + // Nothing to do + } } }