Re: JAX-RS and @ValidateOnExecution


Gunnar Morling
 

2017-06-20 13:43 GMT+02:00 Pavel Bucek <pavel.bucek@...>:
Hi Gunnar,

thanks for your response!

please see inline.


On 20/06/2017 13:31, Gunnar Morling via Groups.Io wrote:

2017-06-20 9:34 GMT+02:00 Pavel Bucek <pavel.bucek@...>:

Do we have BeanValidation expert here? ;) Gunnar?

I believe the implementation should skip the method validation when

@ValidateOnExecution(type = ExecutableType.NONE)

is on the method / class.
That's right. So if Jersey still is executing the validation in this
case, it seems to be a bug.

But what about when

@ValidateOnExecution(type = ExecutableType.CONSTRUCTORS)

is on the resource method?
Using this on a method (as opposed to a constructor) equals to
disabling validation as the method isn't a constructor. That setting
doesn't make too much sense on a method, rather one would use
@ValidateOnExecution(type = ExecutableType.CONSTRUCTORS) on a the
class-level or within validation.xml.

So (and allow me to ask a dumb question, I just need to be extra clear on
this) if @ValidateOnExecution(CONSTRUCTORS) is declared on class level, it
enables validation ONLY for constructor and everything else shouldn't be
validated?
Yes, right. The @VOE given on the class-level could be overridden by
@VOE on a specific method, though. Check out the JavaDocs of @VOE for
the exact overriding rules.


And by constructor I mean constructor of the annotated type, not
constructors of types which are instantiated during other class processing
(invoking a resource method).
Yes, exactly, it only applies to this type itself, not any other types
referenced by it.


Thanks and regards,
Pavel


Seems like Jersey (and sorry for bringing implementation details here,
but I
believe it is relevant) was using @ValidateOnExecution only for deciding
whether to validate return value of that method. When I fixed it, other
tests are not passing and I'm not sure what should be the correct
behavior
in that case.
It definitely should validate both parameter and return value
constraints, or neither, based on the @ValidateOnExecution setting.
But there's no setting for having only method return values validated
but not their parameters.

Thanks and regards,
Pavel



On 20/06/2017 07:48, Pavel Bucek wrote:

Hi Christian,

seems to be a Jersey bug.

Regards,
Pavel


On 19/06/2017 20:39, Christian Kaltepoth wrote:

Hey everyone,

I've a question regarding JAX-RS and @ValidateOnExecution. Please have a
look at the following code:

@GET
@Path("/foobar")
@ValidateOnExecution(type = ExecutableType.NONE)
public String method( @QueryParam("q") @NotNull String query ) {
return "Resource method was invoked!";
}

What is the expected outcome for a request which doesn't contain any
query
parameter and therefore violates the @NotNull constraint?

From my understanding the use of @ValidateOnExecution disables
validation
and therefore the resource method must be called even if there is no
query
parameter in the request URL. That's how RESTEasy handles this case.

But Jersey seems to completely ignore the @ValidateOnExecution annotation
in
this example. Therefore Jersey validates the query parameter and returns
"400 Bad Request" without invoking the resource method.

Any thoughts on this?

Christian


--
Christian Kaltepoth
Blog: http://blog.kaltepoth.de/
Twitter: http://twitter.com/chkal
GitHub: https://github.com/chkal





Join jaxrs-spec@javaee.groups.io to automatically receive all group messages.