bval-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Romain Manni-Bucau (Jira)" <j...@apache.org>
Subject [jira] [Commented] (BVAL-174) Return Parameter Validation Ignore void methods
Date Mon, 09 Sep 2019 05:25:00 GMT

    [ https://issues.apache.org/jira/browse/BVAL-174?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16925364#comment-16925364
] 

Romain Manni-Bucau commented on BVAL-174:
-----------------------------------------

To give back the credit the change happent between spec v1.0#appendix-C and spec v2.0, was
not from me ;).

I kind of agree on the experiment side but fail to see value in bean validation when you have
CDI - and when you have not, context does not mean anything we can rely upon in a generic
impl.

> Return Parameter Validation Ignore void methods
> -----------------------------------------------
>
>                 Key: BVAL-174
>                 URL: https://issues.apache.org/jira/browse/BVAL-174
>             Project: BVal
>          Issue Type: Improvement
>    Affects Versions: 2.0.0
>            Reporter: David Blevins
>            Priority: Major
>             Fix For: 2.0.3
>
>         Attachments: BVAL-174.patch
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> Given the following annotation:
> {code:java}
> import javax.validation.ConstraintValidator;
> import javax.validation.ConstraintValidatorContext;
> import javax.validation.Payload;
> import java.lang.annotation.Documented;
> import java.lang.annotation.Retention;
> import java.lang.annotation.Target;
> import java.util.Set;
> import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
> import static java.lang.annotation.ElementType.METHOD;
> import static java.lang.annotation.RetentionPolicy.RUNTIME;
> @Documented
> @javax.validation.Constraint(validatedBy = {Audience.Constraint.class})
> @Target({METHOD, ANNOTATION_TYPE})
> @Retention(RUNTIME)
> public @interface Audience {
>     String value();
>     Class<?>[] groups() default {};
>     String message() default "The 'aud' claim must contain '{value}'";
>     Class<? extends Payload>[] payload() default {};
>     class Constraint implements ConstraintValidator<Audience, JsonWebToken> {
>         private Audience audience;
>         @Override
>         public void initialize(final Audience constraint) {
>             this.audience = constraint;
>         }
>         @Override
>         public boolean isValid(final JsonWebToken value, final ConstraintValidatorContext
context) {
>             final Set<String> audience = value.getAudience();
>             return audience != null && audience.contains(this.audience.value());
>         }
>     }
> }
> {code}
> BVal wil successfully avoid throwing errors when placed on a method like the following:
> {code:java}
>     @GET
>     @Path("foo")
>     @Audience("movies")
>     @RolesAllowed({"manager", "user"})
>     public Movie getMovie() {
>         return new Movie(1, "The Matrix", "Lana Wachowski");
>     }
> {code}
> However on a method that returns void an exception will be throwing stating BVal cannot
find a ConstraintValidator for return type void.
> {code:java}
>     @POST
>     @Audience("movies")
>     @RolesAllowed("manager")
>     public void addMovie(Movie newMovie) {
>         store.put(newMovie.getId(), newMovie);
>     }
> {code}
> If the BValInterceptor is updated to ignore checking return values of void methods, it
appears to pass the Bean Validation TCK and solves the issue.



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Mime
View raw message