<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I am done with my work on the exception model.<div>Check the chapter copied in this email and the spec in general (including javaDoc changes) at&nbsp;</div><div><a href="http://hibernate.org/~emmanuel/validation/">http://hibernate.org/~emmanuel/validation/</a></div><div><br></div><div><span class="Apple-style-span" style="font-family: -webkit-sans-serif; font-size: 14px; "><div class="titlepage" style="font-family: sans-serif; font-size: 14px; "><div style="font-family: sans-serif; font-size: 14px; "><div style="font-family: sans-serif; font-size: 14px; "><h2 class="title" style="font-family: sans-serif; color: rgb(0, 51, 153); font-size: 140%; margin-top: 10px; padding-top: 5px; font-weight: bold; ">Chapter&nbsp;8.&nbsp;Exception model</h2></div></div><div style="font-family: sans-serif; font-size: 14px; "></div></div><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">Illegal arguments passed to the Bean Validation APIs generally lead to a&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">IllegalArgumentException</tt>&nbsp;(see JavaDoc for specific details). Other exceptions raised by Bean Validation are or inherits from the runtime exception&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">javax.validation.ValidationException</tt>. Exception cases are described in their respective sections but include (non exhaustive list):</p><div class="itemizedlist" style="font-family: sans-serif; font-size: 14px; "><ul type="disc" style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">invalid constraint definitions (missing mandatory elements, illegal composition cycle, illegal parameter overriding, etc)</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">invalid constraint declarations (<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintValidator</tt>&nbsp;implementation matching failure, etc)</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">invalid group definition (circularity)</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">invalid&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">Default</tt>&nbsp;group redefinition for classes (missing class group etc)</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">error when retrieving, initializing, executing&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintValidator</tt>s</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">error when parsing the XML configuration or mappings</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">multiple XML configuration files found</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">missing expected provider or no default provider found</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">missing no-arg constructors on extension implementations described in the XML configuration file</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">same entity described more than once across the XML mapping files</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">same property or field described more than once for a given entity in the XML mapping files</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">class, field or getter declared in XML mapping files but not found</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">illegal XML constraint definition</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">illegal XML constraint declaration</p></li><li style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); "><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">exception raised either at initialization time or execution time by any of the extension interfaces</p></li></ul></div><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">Each of these error cases lead to a&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ValidationException</tt>&nbsp;or a subclass of&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ValidationException</tt>&nbsp;(see following subsections).</p><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">Every (runtime) exception raised either at initialization time or execution time by any of the extension interfaces (<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintValidator</tt>,&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintValidatorFactory</tt>,&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">MessageInterpolator</tt>,<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">TraversableResolver</tt>,&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ValidationProviderResolver</tt>) is wrapped in a&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ValidationException</tt>.</p><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">If a constraint definition or constraint declaration is invalid for a given class, the metadata API should raise the according exception.</p><div class="section" lang="en" style="font-family: sans-serif; font-size: 14px; "><div class="titlepage" style="font-family: sans-serif; font-size: 14px; "><div style="font-family: sans-serif; font-size: 14px; "><div style="font-family: sans-serif; font-size: 14px; "><h2 class="title" style="clear: both; font-family: sans-serif; color: rgb(0, 51, 153); font-size: 140%; margin-top: 10px; padding-top: 5px; font-weight: bold; "><a name="d0e5467" style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 204); "></a>8.1.&nbsp;Error report:&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintViolationException</tt></h2></div></div><div style="font-family: sans-serif; font-size: 14px; "></div></div><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">Some frameworks or applications need to convey the results of a validation. It is an exception case if the validation returns constraint violation and a Java exception is raised.</p><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">Bean Validation provides a reference exception for such cases. Frameworks and applications are encouraged to use&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintViolationException</tt>&nbsp;as opposed to a custom exception to increase consistency of the Java platform. The exception can be raised directly or wrapped into the framework or application specific mother exception.</p><pre class="programlisting" style="font-size: 100%; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(204, 204, 204); border-right-color: rgb(204, 204, 204); border-bottom-color: rgb(204, 204, 204); border-left-color: rgb(204, 204, 204); background-color: rgb(244, 244, 244); font-family: monospace; width: auto; ">/**
 * Report the result of constraint violations
 *
 * @author Emmanuel Bernard
 */
public class ConstraintViolationException extends ValidationException {

        /**
         * Creates a constraint violation report
         *
         * @param message error message
         * @param constraintViolations Set of ConstraintViolation
         */
        public ConstraintViolationException(String message, Set&lt;ConstraintViolation> constraintViolations) {
                [...]
        }

        /**
         * Creates a constraint violation report
         *
         * @param constraintViolations Set of ConstraintViolation
         */
        public ConstraintViolationException(Set&lt;ConstraintViolation> constraintViolations) {
                [...]
        }

        /**
         * Set of constraint violations reported during a validation
         *
         * @return Set of CosntraintViolation
         */
        public Set&lt;ConstraintViolation> getConstraintViolations() {
                [...]
        }
}</pre><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">The&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintViolationException</tt>&nbsp;carries a set of&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintViolation</tt>.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in; font-family: sans-serif; font-size: 14px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; background-color: rgb(255, 255, 204); "><h3 class="title" style="font-family: sans-serif; color: rgb(0, 51, 153); font-size: 120%; margin-top: 10px; padding-top: 5px; font-weight: bold; ">Note</h3><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">Bean Validation never raises this exception itself. Other frameworks like Java Persistence 2 do.</p></div></div><div class="section" lang="en" style="font-family: sans-serif; font-size: 14px; "><div class="titlepage" style="font-family: sans-serif; font-size: 14px; "><div style="font-family: sans-serif; font-size: 14px; "><div style="font-family: sans-serif; font-size: 14px; "><h2 class="title" style="clear: both; font-family: sans-serif; color: rgb(0, 51, 153); font-size: 140%; margin-top: 10px; padding-top: 5px; font-weight: bold; "><a name="d0e5492" style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 204); "></a>8.2.&nbsp;Constraint definition:&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintDefinitionException</tt></h2></div></div><div style="font-family: sans-serif; font-size: 14px; "></div></div><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">If a constraint definition does not respect the Bean Validation rules or is inconsistent, a&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintDefinitionException</tt>&nbsp;is raised.</p><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">This exception can be raised during validation or when the metadata model for the class hosting this constraint is requested.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in; font-family: sans-serif; font-size: 14px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; background-color: rgb(255, 255, 204); "><h3 class="title" style="font-family: sans-serif; color: rgb(0, 51, 153); font-size: 120%; margin-top: 10px; padding-top: 5px; font-weight: bold; ">Note</h3><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">These exception cases can be determined at compile time by a tool such as an annotation processor.</p></div></div><div class="section" lang="en" style="font-family: sans-serif; font-size: 14px; "><div class="titlepage" style="font-family: sans-serif; font-size: 14px; "><div style="font-family: sans-serif; font-size: 14px; "><div style="font-family: sans-serif; font-size: 14px; "><h2 class="title" style="clear: both; font-family: sans-serif; color: rgb(0, 51, 153); font-size: 140%; margin-top: 10px; padding-top: 5px; font-weight: bold; "><a name="d0e5507" style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 204); "></a>8.3.&nbsp;Constraint declaration:&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintDeclarationException</tt>&nbsp;and&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">UnexpectedTypeException</tt></h2></div></div><div style="font-family: sans-serif; font-size: 14px; "></div></div><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">When a constraint declaration is illegal,&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintDeclarationException</tt>&nbsp;is raised.</p><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">When the return type of a property cannot be processed for a given constraint, an&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">UnexpectedTypeException</tt>&nbsp;is raised. This problem typically arise when either no&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintValidator</tt>&nbsp;or too many&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">ConstraintValidator</tt>s match the return type (see&nbsp;<a href="http://hibernate.org/~emmanuel/validation/#typevalidatorresolution" title="3.5.3.&nbsp;ConstraintValidator resolution algorithm" style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 204); ">Section&nbsp;3.5.3, “ConstraintValidator resolution algorithm”</a>).</p><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">This exception can be raised during validation or when the metadata model for the class hosting this constraint is requested.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in; font-family: sans-serif; font-size: 14px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; background-color: rgb(255, 255, 204); "><h3 class="title" style="font-family: sans-serif; color: rgb(0, 51, 153); font-size: 120%; margin-top: 10px; padding-top: 5px; font-weight: bold; ">Note</h3><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">These exception cases can be determined at compile time by a tool such as an annotation processor.</p></div></div><div class="section" lang="en" style="font-family: sans-serif; font-size: 14px; "><div class="titlepage" style="font-family: sans-serif; font-size: 14px; "><div style="font-family: sans-serif; font-size: 14px; "><div style="font-family: sans-serif; font-size: 14px; "><h2 class="title" style="clear: both; font-family: sans-serif; color: rgb(0, 51, 153); font-size: 140%; margin-top: 10px; padding-top: 5px; font-weight: bold; "><a name="d0e5538" style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 204); "></a>8.4.&nbsp;Group definition:&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">GroupDefinitionException</tt></h2></div></div><div style="font-family: sans-serif; font-size: 14px; "></div></div><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">When a group definition is illegal,&nbsp;<tt class="classname" style="font-size: 100%; color: rgb(17, 17, 17); font-family: monospace; ">GroupDefinitionException</tt>&nbsp;is raised. This typically arises when a cyclic group dependency is discovered.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in; font-family: sans-serif; font-size: 14px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; background-color: rgb(255, 255, 204); "><h3 class="title" style="font-family: sans-serif; color: rgb(0, 51, 153); font-size: 120%; margin-top: 10px; padding-top: 5px; font-weight: bold; ">Note</h3><p style="font-family: sans-serif; font-size: 14px; color: rgb(0, 0, 0); ">These exception cases can generally be determined at compile time by a tool such as an annotation processor.</p></div></div></span></div></div></body></html>