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/07/11 08:44:00 UTC

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

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

Thomas Andraschko edited comment on BVAL-174 at 7/11/19 8:43 AM:
-----------------------------------------------------------------

I would mark it as resolved.

Statement from the mailing list:

Our first idea was to just remove the constraint, if there is no matching validator for the validated return type (void in your case).
This worked fine and fixed your example as the constraint was ignored.
The problem however is, that the TCK forces us to not remove the constraint.
So our "solution" is now to validate the constraint when constructing ReturnD and throw a exception, to indicate that there is no validator available and the constraint on the method doesn't make any sense.


was (Author: tandraschko):
Statement from the mailing list:

Our first idea was to just remove the constraint, if there is no matching validator for the validated return type (void in your case).
This worked fine and fixed your example as the constraint was ignored.
The problem however is, that the TCK forces us to not remove the constraint.
So our "solution" is now to validate the constraint when constructing ReturnD and throw a exception, to indicate that there is no validator available and the constraint on the method doesn't make any sense.

> 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.14#76016)