[
https://issues.apache.org/jira/browse/BVAL-174?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16925400#comment-16925400
]
Romain Manni-Bucau commented on BVAL-174:
-----------------------------------------
Hmm, it does not change anything for end users at all. Qualifiers are there for
that. Bean validation does not help at all, even makes it more complicated and
intricate in terms of spec overlapping. It also has a big drawback, falling in
bean validation/jaxrs integration so status code and payload would be wrong or
would need to be customizable. The bean validation error handling is also
broken (no more bean path for example, so form integration is unusable).
The trade off complexity/feature is way too high IMHO compared to a pure CDI
solution (which can integrate to jaxrs for not cdi beans endpoints if desired
but it is out of scope of microprofile).
> 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)