You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@bval.apache.org by "Thomas Andraschko (JIRA)" <ji...@apache.org> on 2019/05/24 14:10:00 UTC

[jira] [Updated] (BVAL-174) Return Parameter Validation Ignore void methods

     [ https://issues.apache.org/jira/browse/BVAL-174?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Thomas Andraschko updated BVAL-174:
-----------------------------------
    Attachment: BVAL-174.patch

> 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: 10m
>  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
(v7.6.3#76005)