<div dir="ltr">Anyone with thoughts/feedback on this?<div><br></div><div>Thanks,</div><div><br></div><div style>--Gunnar</div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/1/7 Gunnar Morling <span dir="ltr">&lt;<a href="mailto:gunnar@hibernate.org" target="_blank">gunnar@hibernate.org</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi all,<div><br></div><div>As per the latest spec draft, a constraint must be either a cross-parameter *or* a generic constraint, but not both at the same time, as otherwise it would be ambiguous whether a constraint on a method refers to the method parameters or return value.</div>

<div><br></div><div>Most of the time this does not really pose a limitation, but some constraints actually might be both, cross-parameter *and* generic, depending on the specific context. Examples are @ScriptAssert in Hibernate Validator or generic constraints such as this:</div>

<br>@EqualPasswords<br>public void register(String userName, String password, String confirmedPassword) {<br>}<br><br>@EqualPasswords<br>public class ResetPasswordRequest {<div>    String userName;<br>    String password;<br>

    String confirmedPassword;<br>}<div><br></div><div>Based on a recent BVAL issue [1], I&#39;m proposing to introduce a special constraint annotation attribute, &quot;validationAppliesTo&quot;, allowing to specify the required behavior at the usage site:</div>

<div><br></div><div>@EqualPasswords(validationAppliesTo=PARAMETERS)<br>public void register(String username, String password, String confirmPassword) {<br>}<br><div><br></div><div>@EqualPasswords(validationAppliesTo=ANNOTATED_ELEMENT)<br>

public class ResetPasswordRequest {<br>    String password;<br>    String confirmedPassword;<br>}<br></div><div><br></div>
<div>The following rules would apply:</div><div><br></div><div>* If a constraint is annotated with @Constraint and @CrossParameterConstraint, it must define a member &quot;validationAppliesTo&quot;. The default value should be ANNOTATED_ELEMENT.</div>

<div>* If a constraint is annotated with only one of @Constraint/@CrossParameterConstraint, defining a &quot;validationAppliesTo&quot; member doesn&#39;t have any special effect</div><div>* Specifying validationAppliesTo=PARAMETERS anywhere except a method causes ConstraintDeclarationException</div>

<div><br></div><div>Any thoughts?</div><div><br></div><div>--Gunnar</div>
<div><br></div><div>[1] <a href="https://hibernate.onjira.com/browse/BVAL-340" target="_blank">https://hibernate.onjira.com/browse/BVAL-340</a><br></div></div><div><br></div></div></div>
</blockquote></div><br></div></div>