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

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

David Blevins created BVAL-174:
----------------------------------

             Summary: 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
             Fix For: 2.0.3


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)