<div dir="ltr">It&#39;s not like I have the choice. This is the way you model a constraint with Bean Validation : <a href="http://beanvalidation.org/1.1/spec/#constraintsdefinitionimplementation-multipleconstraints">http://beanvalidation.org/1.1/spec/#constraintsdefinitionimplementation-multipleconstraints</a></div>
<div class="gmail_extra"><br><br><div class="gmail_quote">2014-03-22 9:11 GMT+01:00 Luca Masini <span dir="ltr">&lt;<a href="mailto:luca.masini.mailing.list@gmail.com" target="_blank">luca.masini.mailing.list@gmail.com</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">Why don&#39;t you model it like &quot;NamedQueries/NamedQuery&quot; ?</div><div class="gmail_extra"><br>
<br><div class="gmail_quote">2014-03-22 7:25 GMT+01:00 Antonio Goncalves <span dir="ltr">&lt;<a href="mailto:antonio.mailing@gmail.com" target="_blank">antonio.mailing@gmail.com</a>&gt;</span>:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div class="gmail_extra">Hi,</div><div class="gmail_extra"><br></div><div class="gmail_extra">
This is a Roaster question. I&#39;ve been trying to create a Bean Validation constraint properly... in vain. What I want to achieve is the following (notice the @List annotation) :</div>


<div class="gmail_extra"><br></div><div class="gmail_extra">







<p><font face="courier new, monospace"><span>@Target</span>({<span><b><i>METHOD</i></b></span>, <span><b><i>FIELD</i></b></span>, <span><b><i>ANNOTATION_TYPE</i></b></span>, <span><b><i>CONSTRUCTOR</i></b></span>, <span><b><i>PARAMETER</i></b></span>})<br>




<span>@Retention</span>(<span><b><i>RUNTIME</i></b></span>)<br>
<span>@Documented<br></span><span>@Constraint</span>(validatedBy = {})<br>
<span><b>public </b></span>@<span><b>interface </b></span><span>Email </span>{<br>
<br>
  String message() <span><b>default </b></span><span><b>&quot;wrong email address&quot;</b></span>;<br>
<br>
  Class&lt;?&gt;[] groups() <span><b>default </b></span>{};<br>
<br>
  Class&lt;? <span><b>extends </b></span>Payload&gt;[] payload() <span><b>default </b></span>{};<br>
<br>
  <span>@Target</span>({<span><b><i>METHOD</i></b></span>, <span><b><i>FIELD</i></b></span>, <span><b><i>ANNOTATION_TYPE</i></b></span>, <span><b><i>CONSTRUCTOR</i></b></span>, <span><b><i>PARAMETER</i></b></span>})<br>

  <span>@Retention</span>(<span><b><i>RUNTIME</i></b></span>)<br>
  @<span><b>interface </b></span><span><font color="#ff0000"><b>List</b></font> </span>{<br>
    <span>Email</span>[] value();<br>
  }<br>
}<br>
</font></p><p><br></p><p>This is the code I&#39;ve written. Both annotation are generated separately... but I don&#39;t know how to add <span style="color:rgb(51,51,51);font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;font-size:11.818181991577148px;line-height:15.272726058959961px;white-space:pre-wrap">listAnnotation</span> inside <span style="color:rgb(51,51,51);font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;font-size:11.818181991577148px;line-height:15.272726058959961px;white-space:pre-wrap">emailAnnotation</span>. Any idea ?</p>



<p>Thanks</p><p><br></p><pre style="line-height:15.272726058959961px;width:743.6363525390625px;font-size:11.818181991577148px;margin-bottom:0px;font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;margin-top:0px;padding:0px">

<div><span style="font-weight:bold">public</span> <span style="font-weight:bold">class</span> <span style="color:rgb(68,85,136);font-weight:bold">Main</span> <span style="font-weight:bold">{</span></div>
<div>    <span style="font-weight:bold">public</span> <span style="font-weight:bold">static</span> <span style="color:rgb(68,85,136);font-weight:bold">void</span> <span style="color:rgb(153,0,0);font-weight:bold">main</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">String</span><span style="font-weight:bold">[]</span> <span style="color:rgb(51,51,51)">args</span><span style="font-weight:bold">)</span> <span style="font-weight:bold">{</span></div>



<div> </div><div>        <span style="color:rgb(153,153,136);font-style:italic">// This is the inner annotation List</span></div><div>
        <span style="font-weight:bold">final</span> <span style="color:rgb(51,51,51)">JavaAnnotationSource</span> <span style="color:rgb(51,51,51)">listAnnotation</span> <span style="font-weight:bold">=</span> <span style="color:rgb(51,51,51)">Roaster</span><span style="font-weight:bold">.</span><span style="color:teal">create</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">JavaAnnotationSource</span><span style="font-weight:bold">.</span><span style="color:teal">class</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">listAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">setName</span><span style="font-weight:bold">(</span><span style="color:rgb(221,17,68)">&quot;List&quot;</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">listAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addAnnotation</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">Retention</span><span style="font-weight:bold">.</span><span style="color:teal">class</span><span style="font-weight:bold">).</span><span style="color:teal">setEnumValue</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">RUNTIME</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">listAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addAnnotation</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">Target</span><span style="font-weight:bold">.</span><span style="color:teal">class</span><span style="font-weight:bold">).</span><span style="color:teal">setEnumValue</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">METHOD</span><span style="font-weight:bold">,</span> <span style="color:rgb(51,51,51)">FIELD</span><span style="font-weight:bold">,</span> <span style="color:rgb(51,51,51)">PARAMETER</span><span style="font-weight:bold">,</span> <span style="color:rgb(51,51,51)">TYPE</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">listAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addAnnotationElement</span><span style="font-weight:bold">(</span><span style="color:rgb(221,17,68)">&quot;Email[] value()&quot;</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">System</span><span style="font-weight:bold">.</span><span style="color:teal">out</span><span style="font-weight:bold">.</span><span style="color:teal">println</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">listAnnotation</span><span style="font-weight:bold">);</span></div>



<div> </div><div>        <span style="color:rgb(153,153,136);font-style:italic">// This is the annotation @Email</span></div><div>
        <span style="font-weight:bold">final</span> <span style="color:rgb(51,51,51)">JavaAnnotationSource</span> <span style="color:rgb(51,51,51)">emailAnnotation</span> <span style="font-weight:bold">=</span> <span style="color:rgb(51,51,51)">Roaster</span><span style="font-weight:bold">.</span><span style="color:teal">create</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">JavaAnnotationSource</span><span style="font-weight:bold">.</span><span style="color:teal">class</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">emailAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">setPackage</span><span style="font-weight:bold">(</span><span style="color:rgb(221,17,68)">&quot;org.agoncal.proj.constraints&quot;</span><span style="font-weight:bold">).</span><span style="color:teal">setName</span><span style="font-weight:bold">(</span><span style="color:rgb(221,17,68)">&quot;Email&quot;</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">emailAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addImport</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">Payload</span><span style="font-weight:bold">.</span><span style="color:teal">class</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">emailAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addAnnotation</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">Documented</span><span style="font-weight:bold">.</span><span style="color:teal">class</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">emailAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addAnnotation</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">Retention</span><span style="font-weight:bold">.</span><span style="color:teal">class</span><span style="font-weight:bold">).</span><span style="color:teal">setEnumValue</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">RUNTIME</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">emailAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addAnnotation</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">Target</span><span style="font-weight:bold">.</span><span style="color:teal">class</span><span style="font-weight:bold">).</span><span style="color:teal">setEnumValue</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">METHOD</span><span style="font-weight:bold">,</span> <span style="color:rgb(51,51,51)">FIELD</span><span style="font-weight:bold">,</span> <span style="color:rgb(51,51,51)">PARAMETER</span><span style="font-weight:bold">,</span> <span style="color:rgb(51,51,51)">TYPE</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">emailAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addAnnotation</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">Constraint</span><span style="font-weight:bold">.</span><span style="color:teal">class</span><span style="font-weight:bold">).</span><span style="color:teal">setLiteralValue</span><span style="font-weight:bold">(</span><span style="color:rgb(221,17,68)">&quot;validatedBy&quot;</span><span style="font-weight:bold">,</span> <span style="color:rgb(221,17,68)">&quot;{}&quot;</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">emailAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addAnnotationElement</span><span style="font-weight:bold">(</span><span style="color:rgb(221,17,68)">&quot;String message() default \&quot;wrong email address\&quot;&quot;</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">emailAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addAnnotationElement</span><span style="font-weight:bold">(</span><span style="color:rgb(221,17,68)">&quot;Class&lt;?&gt;[] groups() default {}&quot;</span><span style="font-weight:bold">);</span></div>



<div>        <span style="color:rgb(51,51,51)">emailAnnotation</span><span style="font-weight:bold">.</span><span style="color:teal">addAnnotationElement</span><span style="font-weight:bold">(</span><span style="color:rgb(221,17,68)">&quot;Class&lt;? extends Payload&gt;[] payload() default {}&quot;</span><span style="font-weight:bold">);</span></div>



<div>        </div><div>        <span style="color:rgb(153,153,136);font-style:italic">// I was expecting to have a method like that so I could add annotation inside another one</span></div>
<div>        <span style="color:rgb(153,153,136);font-style:italic">// emailAnnotation.addAnnotationElement(emailAnnotation);</span></div><div>        </div>
<div>        <span style="color:rgb(51,51,51)">System</span><span style="font-weight:bold">.</span><span style="color:teal">out</span><span style="font-weight:bold">.</span><span style="color:teal">println</span><span style="font-weight:bold">(</span><span style="color:rgb(51,51,51)">emailAnnotation</span><span style="font-weight:bold">);</span></div>



<div> </div><div>    <span style="font-weight:bold">}</span></div><div> </div><div>
<span style="font-weight:bold">}</span></div></pre><span><font color="#888888"><p><br></p><br><div><br></div>-- <br>Antonio Goncalves <br>Software architect and Java Champion<br><br><a href="http://www.antoniogoncalves.org/" target="_blank">Web site</a> | <a href="http://twitter.com/agoncal" target="_blank">Twitter</a> | <a href="http://www.linkedin.com/in/agoncal" target="_blank">LinkedIn</a> | <a href="http://www.parisjug.org/" target="_blank">Paris JUG</a> | <a href="http://www.devoxx.fr/" target="_blank">Devoxx France</a>
</font></span></div></div>
<br></div></div>_______________________________________________<br>
forge-dev mailing list<br>
<a href="mailto:forge-dev@lists.jboss.org" target="_blank">forge-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/forge-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/forge-dev</a><span class="HOEnZb"><font color="#888888"><br></font></span></blockquote></div><span class="HOEnZb"><font color="#888888"><br>
<br clear="all"><div><br></div>-- <br>****************************************<br>

<a href="http://www.lucamasini.net" target="_blank">http://www.lucamasini.net</a><br><a href="http://twitter.com/lmasini" target="_blank">http://twitter.com/lmasini</a><br><a href="http://www.linkedin.com/pub/luca-masini/7/10/2b9" target="_blank">http://www.linkedin.com/pub/luca-masini/7/10/2b9</a><br>


****************************************
</font></span></div>
<br>_______________________________________________<br>
forge-dev mailing list<br>
<a href="mailto:forge-dev@lists.jboss.org">forge-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/forge-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/forge-dev</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Antonio Goncalves <br>Software architect and Java Champion<br>
<br><a href="http://www.antoniogoncalves.org/" target="_blank">Web site</a> | <a href="http://twitter.com/agoncal" target="_blank">Twitter</a> | <a href="http://www.linkedin.com/in/agoncal" target="_blank">LinkedIn</a> | <a href="http://www.parisjug.org/" target="_blank">Paris JUG</a> | <a href="http://www.devoxx.fr/" target="_blank">Devoxx France</a>
</div>