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, A> constraint, ExecutableElement executable) {
+ public static ConfiguredConstraint forReturnValue(ConstraintDef, A> constraint, ExecutableElement executable) {
return new ConfiguredConstraint(
constraint, ConstraintLocation.forReturnValue( executable ), executable.getElementType()
);
}
+ public static ConfiguredConstraint forCrossParameter(ConstraintDef, A> constraint, ExecutableElement executable) {
+ return new ConfiguredConstraint(
+ constraint, ConstraintLocation.forCrossParameter( executable ), executable.getElementType()
+ );
+ }
+
public ConstraintDef, A> 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
+ }
}
}