[forge-dev] [Roaster] Don't know how to add an annotation inside another one

Antonio Goncalves antonio.mailing at gmail.com
Thu Mar 27 09:03:03 EDT 2014


@Lincoln I think I did try passing a String but it didn't work. Let me have
an extra look at it

@Matt I've added a comment to the JIRA

Antonio


2014-03-25 18:59 GMT+01:00 Matt Benson <gudnabrsam at gmail.com>:

> This is an open issue: https://issues.jboss.org/browse/FORGE-1582
>
> Matt
>
> On Tue, Mar 25, 2014 at 12:43 PM, Lincoln Baxter, III
> <lincolnbaxter at gmail.com> wrote:
> > Hey Antonio,
> >
> > I don't really know how to do this off the top of my head. My guess is
> that
> > you'll need to do what you've done for the prior elements and provide the
> > definition using a String. Will this work until we can add this
> > functionality to the API?
> >
> > ~Lincoln
> >
> >
> > On Sun, Mar 23, 2014 at 10:37 AM, Antonio Goncalves
> > <antonio.mailing at gmail.com> wrote:
> >>
> >> It's not like I have the choice. This is the way you model a constraint
> >> with Bean Validation :
> >>
> http://beanvalidation.org/1.1/spec/#constraintsdefinitionimplementation-multipleconstraints
> >>
> >>
> >> 2014-03-22 9:11 GMT+01:00 Luca Masini
> >> <luca.masini.mailing.list at gmail.com>:
> >>
> >>> Why don't you model it like "NamedQueries/NamedQuery" ?
> >>>
> >>>
> >>> 2014-03-22 7:25 GMT+01:00 Antonio Goncalves <antonio.mailing at gmail.com
> >:
> >>>>
> >>>> Hi,
> >>>>
> >>>> This is a Roaster question. I've been trying to create a Bean
> Validation
> >>>> constraint properly... in vain. What I want to achieve is the
> following
> >>>> (notice the @List annotation) :
> >>>>
> >>>> @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
> >>>> @Retention(RUNTIME)
> >>>> @Documented
> >>>> @Constraint(validatedBy = {})
> >>>> public @interface Email {
> >>>>
> >>>>   String message() default "wrong email address";
> >>>>
> >>>>   Class<?>[] groups() default {};
> >>>>
> >>>>   Class<? extends Payload>[] payload() default {};
> >>>>
> >>>>   @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
> >>>>   @Retention(RUNTIME)
> >>>>   @interface List {
> >>>>     Email[] value();
> >>>>   }
> >>>> }
> >>>>
> >>>>
> >>>> This is the code I've written. Both annotation are generated
> >>>> separately... but I don't know how to add listAnnotation inside
> >>>> emailAnnotation. Any idea ?
> >>>>
> >>>> Thanks
> >>>>
> >>>>
> >>>>
> >>>> public class Main {
> >>>>     public static void main(String[] args) {
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         // This is the inner annotation List
> >>>>         final JavaAnnotationSource listAnnotation =
> >>>> Roaster.create(JavaAnnotationSource.class);
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         listAnnotation.setName("List");
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> listAnnotation.addAnnotation(Retention.class).setEnumValue(RUNTIME);
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> listAnnotation.addAnnotation(Target.class).setEnumValue(METHOD,
> >>>> FIELD, PARAMETER, TYPE);
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         listAnnotation.addAnnotationElement("Email[] value()");
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         System.out.println(listAnnotation);
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         // This is the annotation @Email
> >>>>         final JavaAnnotationSource emailAnnotation =
> >>>> Roaster.create(JavaAnnotationSource.class);
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> emailAnnotation.setPackage("org.agoncal.proj.constraints").setName("Email");
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         emailAnnotation.addImport(Payload.class);
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         emailAnnotation.addAnnotation(Documented.class);
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> emailAnnotation.addAnnotation(Retention.class).setEnumValue(RUNTIME);
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> emailAnnotation.addAnnotation(Target.class).setEnumValue(METHOD,
> >>>> FIELD, PARAMETER, TYPE);
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> emailAnnotation.addAnnotation(Constraint.class).setLiteralValue("validatedBy",
> >>>> "{}");
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         emailAnnotation.addAnnotationElement("String message() default
> >>>> \"wrong email address\"");
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         emailAnnotation.addAnnotationElement("Class<?>[] groups()
> >>>> default {}");
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         emailAnnotation.addAnnotationElement("Class<? extends
> Payload>[]
> >>>> payload() default {}");
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>         // I was expecting to have a method like that so I could add
> >>>> annotation inside another one
> >>>>         // emailAnnotation.addAnnotationElement(emailAnnotation);
> >>>>
> >>>>         System.out.println(emailAnnotation);
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>     }
> >>>>
> >>>> }
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Antonio Goncalves
> >>>> Software architect and Java Champion
> >>>>
> >>>> Web site | Twitter | LinkedIn | Paris JUG | Devoxx France
> >>>>
> >>>> _______________________________________________
> >>>> forge-dev mailing list
> >>>> forge-dev at lists.jboss.org
> >>>> https://lists.jboss.org/mailman/listinfo/forge-dev
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> ****************************************
> >>> http://www.lucamasini.net
> >>> http://twitter.com/lmasini
> >>> http://www.linkedin.com/pub/luca-masini/7/10/2b9
> >>> ****************************************
> >>>
> >>> _______________________________________________
> >>> forge-dev mailing list
> >>> forge-dev at lists.jboss.org
> >>> https://lists.jboss.org/mailman/listinfo/forge-dev
> >>
> >>
> >>
> >>
> >> --
> >> Antonio Goncalves
> >> Software architect and Java Champion
> >>
> >> Web site | Twitter | LinkedIn | Paris JUG | Devoxx France
> >>
> >> _______________________________________________
> >> forge-dev mailing list
> >> forge-dev at lists.jboss.org
> >> https://lists.jboss.org/mailman/listinfo/forge-dev
> >
> >
> >
> >
> > --
> > Lincoln Baxter, III
> > http://ocpsoft.org
> > "Simpler is better."
> >
> > _______________________________________________
> > forge-dev mailing list
> > forge-dev at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/forge-dev
> _______________________________________________
> forge-dev mailing list
> forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev
>



-- 
Antonio Goncalves
Software architect and Java Champion

Web site <http://www.antoniogoncalves.org/> |
Twitter<http://twitter.com/agoncal>
 | LinkedIn <http://www.linkedin.com/in/agoncal> | Paris
JUG<http://www.parisjug.org/>
 | Devoxx France <http://www.devoxx.fr/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/forge-dev/attachments/20140327/454dd6b4/attachment.html 


More information about the forge-dev mailing list