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

Popular posts from this blog

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

android - How to create dynamically Fragment pager adapter -

1111. appearing after print sequence - php -