rest - Resteasy Bean Validation Not Working on Remote Server -
i have problem similar 1 described here.
i using resteasy within standalone jetty application. when start application locally , call service (e.g. localhost:16880/rest/user/login) bean validation works fine, i.e. validation errors this:
[parameter] [userservice#login(arg0).appkey] [app_key may not null or empty] []
however, when deploy application remote host , call same service (e.g. remotehost:16880/rest/user/login) bean validation not invoked @ all.
i using @validaterequest
annotation service , @valid
annotation bean parameter.
my resteasy version 3.0.13.final, though have tried earlier versions well. have tried write custom validator, didn't work either.
i puzzled why validation works locally, not on remote server. suggestions highly appreciated.
since using jetty standalone server, have define resteasy validation providers define servletcontexthandler
. note in standalone server there no container scan @provider
classes , activate them, must manually.
i expect create , start server app like:
//create server listening @ port server server= new server(port); //add server handlers handlerlist handlers= new handlerlist(); inithandlers(handlers); server.sethandler(handlers); //start server server.start();
in inithandlers
must have defined resteasy support:
public void inithandlers(list<handlerlist> handlers) { //define root context handler servletcontexthandler servletcontexthandler= new servletcontexthandler(servletcontexthandler.sessions); servletcontexthandler.setcontextpath("/"); handlers.addhandler(servletcontexthandler); //define resteasy handler servletholder restservlet= new servletholder(new httpservlet30dispatcher()); //since standalone server, somewhere have define restful services , singletons restservlet.setinitparameter("javax.ws.rs.application", "com.exampleapp.myrestapplication"); restservlet.setinitparameter("resteasy.servlet.mapping.prefix", "rest"); servletcontexthandler.addservlet(restservlet, "rest/*"); }
so left add validation provider init parameter:
restservlet.setinitparameter("resteasy.providers", "org.jboss.resteasy.plugins.validation.validatorcontextresolver,org.jboss.resteasy.api.validation.resteasyviolationexceptionmapper");
on link tried find name of validator providers: https://docs.jboss.org/resteasy/docs/3.0.4.final/userguide/html/validation.html
resteasy obtains bean validation implemenation looking in available meta-inf/services/javax.ws.rs.providers files implementation of contextresolver
so not what, says where. open "resteasy-hibernatevalidator-provider-3...*.jar (from eclipse -> maven dependencies or manually unzip) , meta-inf/services/javax.ws.rs.ext.providers says:
org.jboss.resteasy.plugins.validation.hibernate.validatorcontextresolver org.jboss.resteasy.api.validation.resteasyviolationexceptionmapper
if don't have dependency, add pom file:
<dependency> <groupid>org.jboss.resteasy</groupid> <artifactid>resteasy-hibernatevalidator-provider</artifactid> <version>${resteasy.version}</version> </dependency>
one more note: @ same place described validation providers, add other providers, if happen need them (such jacksonjaxbjson, etc).
Comments
Post a Comment