[jboss-jira] [JBoss JIRA] (WFLY-11956) @PostConstruct on @ApplicationScoped bean called too late in case @Valid is annotated on a business method

Ronald Sigal (Jira) issues at jboss.org
Tue Apr 23 12:45:01 EDT 2019


    [ https://issues.jboss.org/browse/WFLY-11956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13725638#comment-13725638 ] 

Ronald Sigal commented on WFLY-11956:
-------------------------------------

re: "Like I said earlier, you can move the validation to the postConstruct() instead of inject() method in all cases as that method did get invoked even if I commented out the @PostConstruct method on the bean itself."

[~manovotn], that's very interesting. I'm wondering, though, if that's a Weld-specific behavior. The javadoc doesn't seem to guarantee that postConstruct() will be called.

re: "Did I get that right?"

[~christian.zambrano], I think that's correct, or nearly so. I would express it like this: "The fact that getHelloGreeting() is a getter means that the associated property must be validated if there are any validating annotations on the method, in which case getHelloGreeting() must be called. The @Valid annotation is one such validating annotation."

re: "Your proposal of delaying the behavior described above until the PostConstruct is called, while better it can still lead to problems as the postConstruct may not have initialized everything is needed for the method to be called ..."

[~christian.zambrano], I don't understand. My understanding is that postConstruct() would be called after all CDI injections are performed. Calling the @PostConstruct annotated method would be the last chance to perform additional initialization, so doing the verification after that would seem to be OK. What am I missing?

re: "so having a way to turn this behavior off would be ideal for these cases."

[~christian.zambrano], sorry, which behavior are you referring to?

> @PostConstruct on @ApplicationScoped bean called too late in case @Valid is annotated on a business method
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: WFLY-11956
>                 URL: https://issues.jboss.org/browse/WFLY-11956
>             Project: WildFly
>          Issue Type: Bug
>          Components: Bean Validation, REST
>    Affects Versions: 16.0.0.Final
>            Reporter: Joerg Baesner
>            Assignee: Ronald Sigal
>            Priority: Major
>         Attachments: logging.txt, playground.zip
>
>
> Having a bean class with {{@ApplicationScoped}}, which has a {{@PostConstruct}} and is implementing  the following _Interface_:
> {code}
> @Path("/validated")
> public interface ValidatedJaxRsInterface {
>     
>     @GET
>     @Valid
>     @Produces(MediaType.APPLICATION_JSON)
>     GreetingModel getHelloGreeting();
> }
> {code}
> will result in calling the {{getHelloGreeting}} method of the implementation class twice *_before_* the {{@PostConstruct}} is getting executed.
> This can be reproduced with the attached reproducer application...



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the jboss-jira mailing list