Jboss EAP 6.2 java.lang.NoSuchMethodError: javax.validation.Configuration.getBootstrapConfiguration()Ljavax/validation/BootstrapConfiguration;
melbin Aug 20, 2015 7:45 AMHi all,
We have lot of existing rest services developed using jersey and deployed in JBoss EAP 6.2.
Now we are trying to incorporate Bean Validation Support (https://jersey.java.net/documentation/latest/bean-validation.html).
Unfortunately we are getting following exception from server.
Exceptions from server
------------------------------------
12:28:41,701 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.0.Final-redhat-2
12:28:42,028 INFO [org.jboss.msc] (main) JBoss MSC version 1.0.4.GA-redhat-1
12:28:42,185 INFO [org.jboss.as] (MSC service thread 1-8) JBAS015899: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) starting
12:28:43,598 INFO [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) JBAS015003: Found Jersey2Validation.war in deployment directory. To trigger deployment create a file called Jersey2Validation.war.dodeploy
12:28:43,623 INFO [org.xnio] (MSC service thread 1-4) XNIO Version 3.0.7.GA-redhat-1
12:28:43,625 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http)
12:28:43,631 INFO [org.xnio.nio] (MSC service thread 1-4) XNIO NIO Implementation Version 3.0.7.GA-redhat-1
12:28:43,640 INFO [org.jboss.remoting] (MSC service thread 1-4) JBoss Remoting version 3.2.18.GA-redhat-1
12:28:43,682 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 29) JBAS010280: Activating Infinispan subsystem.
12:28:43,733 INFO [org.jboss.as.jsf] (ServerService Thread Pool -- 35) JBAS012605: Activated the following JSF Implementations: [main, 1.2]
12:28:43,765 INFO [org.jboss.as.security] (ServerService Thread Pool -- 42) JBAS013171: Activating Security Subsystem
12:28:43,765 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 37) JBAS011800: Activating Naming Subsystem
12:28:43,789 INFO [org.jboss.as.security] (MSC service thread 1-5) JBAS013170: Current PicketBox version=4.0.19.SP2-redhat-1
12:28:43,808 INFO [org.jboss.as.webservices] (ServerService Thread Pool -- 46) JBAS015537: Activating WebServices Extension
12:28:43,824 INFO [org.jboss.as.connector.logging] (MSC service thread 1-3) JBAS010408: Starting JCA Subsystem (IronJacamar 1.0.23.Final-redhat-1)
12:28:43,829 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 25) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)
12:28:43,917 INFO [org.jboss.as.naming] (MSC service thread 1-7) JBAS011802: Starting Naming Service
12:28:43,920 INFO [org.jboss.as.mail.extension] (MSC service thread 1-1) JBAS015400: Bound mail session [java:jboss/mail/Default]
12:28:44,412 INFO [org.apache.coyote.http11] (MSC service thread 1-5) JBWEB003001: Coyote HTTP/1.1 initializing on : http-localhost/127.0.0.1:8080
12:28:44,435 INFO [org.apache.coyote.http11] (MSC service thread 1-5) JBWEB003000: Coyote HTTP/1.1 starting on: http-localhost/127.0.0.1:8080
12:28:44,788 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-1) JBAS015012: Started FileSystemDeploymentService for directory /home/ss/jboss-eap-6.2/standalone/deployments
12:28:44,792 INFO [org.jboss.as.remoting] (MSC service thread 1-5) JBAS017100: Listening on 127.0.0.1:9999
12:28:44,794 INFO [org.jboss.as.remoting] (MSC service thread 1-3) JBAS017100: Listening on 127.0.0.1:4447
12:28:44,820 INFO [org.jboss.ws.common.management] (MSC service thread 1-8) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.3.Final-redhat-1
12:28:44,825 INFO [org.jboss.as.server.deployment] (MSC service thread 1-7) JBAS015876: Starting deployment of "Jersey2Validation.war" (runtime-name: "Jersey2Validation.war")
12:28:44,902 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-6) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
12:28:48,512 INFO [org.jboss.web] (ServerService Thread Pool -- 54) JBAS018210: Register web context: /Jersey2Validation
12:28:49,528 INFO [org.hibernate.validator.internal.util.Version] (ServerService Thread Pool -- 54) HV000001: Hibernate Validator 4.3.1.Final-redhat-1
12:28:49,583 WARNING [org.glassfish.jersey.internal.Errors] (ServerService Thread Pool -- 54) The following warnings have been detected: WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 1
java.lang.NoSuchMethodError: javax.validation.Configuration.getBootstrapConfiguration()Ljavax/validation/BootstrapConfiguration;
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.getTraversableResolver(ValidationBinder.java:316)
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.getDefaultValidatorContext(ValidationBinder.java:297)
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.provide(ValidationBinder.java:225)
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.provide(ValidationBinder.java:189)
at org.jvnet.hk2.internal.FactoryCreator.create(FactoryCreator.java:152)
at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:470)
at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:69)
at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2065)
at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:761)
at org.jvnet.hk2.internal.ServiceLocatorImpl.getUnqualifiedService(ServiceLocatorImpl.java:768)
at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:110)
at org.glassfish.jersey.server.model.ResourceMethodInvoker$Builder.build(ResourceMethodInvoker.java:153)
at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.createInflector(RuntimeModelBuilder.java:128)
at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.createMethodRouter(RuntimeModelBuilder.java:115)
at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.createResourceMethodRouters(RuntimeModelBuilder.java:309)
at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.buildModel(RuntimeModelBuilder.java:173)
at org.glassfish.jersey.server.internal.routing.Routing$Builder.buildStage(Routing.java:196)
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:586)
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:183)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:349)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:346)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:346)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:339)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:362)
at javax.servlet.GenericServlet.init(GenericServlet.java:242)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1194)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1100)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3591)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3798)
at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:156)
at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:60)
at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:93)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
12:28:49,603 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/Jersey2Validation]] (ServerService Thread Pool -- 54) JBWEB000289: Servlet jersey threw load() exception: java.lang.NoSuchMethodError: javax.validation.Configuration.getBootstrapConfiguration()Ljavax/validation/BootstrapConfiguration;
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.getTraversableResolver(ValidationBinder.java:316) [jersey-bean-validation-2.19.jar:]
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.getDefaultValidatorContext(ValidationBinder.java:297) [jersey-bean-validation-2.19.jar:]
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.provide(ValidationBinder.java:225) [jersey-bean-validation-2.19.jar:]
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.provide(ValidationBinder.java:189) [jersey-bean-validation-2.19.jar:]
at org.jvnet.hk2.internal.FactoryCreator.create(FactoryCreator.java:152) [hk2-locator-2.4.0-b25.jar:]
at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:470) [hk2-locator-2.4.0-b25.jar:]
at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:69) [hk2-locator-2.4.0-b25.jar:]
at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2065) [hk2-locator-2.4.0-b25.jar:]
at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:761) [hk2-locator-2.4.0-b25.jar:]
at org.jvnet.hk2.internal.ServiceLocatorImpl.getUnqualifiedService(ServiceLocatorImpl.java:768) [hk2-locator-2.4.0-b25.jar:]
at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:110) [hk2-locator-2.4.0-b25.jar:]
at org.glassfish.jersey.server.model.ResourceMethodInvoker$Builder.build(ResourceMethodInvoker.java:153) [jersey-server-2.19.jar:]
at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.createInflector(RuntimeModelBuilder.java:128) [jersey-server-2.19.jar:]
at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.createMethodRouter(RuntimeModelBuilder.java:115) [jersey-server-2.19.jar:]
at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.createResourceMethodRouters(RuntimeModelBuilder.java:309) [jersey-server-2.19.jar:]
at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.buildModel(RuntimeModelBuilder.java:173) [jersey-server-2.19.jar:]
at org.glassfish.jersey.server.internal.routing.Routing$Builder.buildStage(Routing.java:196) [jersey-server-2.19.jar:]
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:586) [jersey-server-2.19.jar:]
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:183) [jersey-server-2.19.jar:]
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:349) [jersey-server-2.19.jar:]
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:346) [jersey-server-2.19.jar:]
at org.glassfish.jersey.internal.Errors.process(Errors.java:315) [jersey-common-2.19.jar:]
at org.glassfish.jersey.internal.Errors.process(Errors.java:297) [jersey-common-2.19.jar:]
at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255) [jersey-common-2.19.jar:]
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:346) [jersey-server-2.19.jar:]
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:339) [jersey-container-servlet-core-2.19.jar:]
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170) [jersey-container-servlet-core-2.19.jar:]
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:362) [jersey-container-servlet-core-2.19.jar:]
at javax.servlet.GenericServlet.init(GenericServlet.java:242) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-1.jar:1.0.2.Final-redhat-1]
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1194) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1100) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3591) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3798) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:156) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:60) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:93) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_79]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_79]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_79]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_79]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
12:28:49,669 INFO [org.jboss.as.server] (ServerService Thread Pool -- 26) JBAS018559: Deployed "Jersey2Validation.war" (runtime-name : "Jersey2Validation.war")
12:28:49,902 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management
12:28:49,903 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
12:28:49,903 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) started in 8848ms - Started 175 of 235 services (59 services are passive or on-demand)
If any solution for this problem, any idea to pinpoint the solution is highly appreciated
Jersey service snippets and used libraries are following
libraries used
----------------------
aopalliance-repackaged-2.4.0-b25.jar
classmate-0.8.0.jar
hibernate-validator-5.1.2.Final.jar
hk2-api-2.4.0-b25.jar
hk2-locator-2.4.0-b25.jar
hk2-utils-2.4.0-b25.jar
javassist-3.18.1-GA.jar
javax.annotation-api-1.2.jar
javax.el-2.2.4.jar
javax.el-api-2.2.4.jar
javax.inject-2.4.0-b25.jar
javax.json-1.0.4.jar
javax.ws.rs-api-2.0.1.jar
jboss-logging-3.1.1.GA.jar
jersey-bean-validation-2.19.jar
jersey-client-2.19.jar
jersey-common-2.19.jar
jersey-container-servlet-core-2.19.jar
jersey-entity-filtering-2.19.jar
jersey-guava-2.19.jar
jersey-media-jaxb-2.19.jar
jersey-media-moxy-2.19.jar
jersey-server-2.19.jar
org.eclipse.persistence.asm-2.6.0.jar
org.eclipse.persistence.core-2.6.0.jar
org.eclipse.persistence.moxy-2.6.0.jar
osgi-resource-locator-1.0.1.jar
validation-api-1.1.0.Final.jar
1) Controller
--------------------
package com.student.controller;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.config.StudentID;
@Path("Services")
public class StudentController {
@GET
@Path("/helloStudent")
@Produces(MediaType.APPLICATION_JSON)
public String helloStudent() {
return "Hello Student";
}
@GET
@Path("{id}")
@StudentID
public String getStudentID( @PathParam("id") final Long id) {
if (id == 10) {
System.out.println("inside 10");
return "10";
} else {
System.out.println("inside null");
return null;
}
}
}
2) Validator
-------------------
package com.config;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = StudentID.StudentIDValidator.class)
public @interface StudentID {
String message() default "StudentID does not exist";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
public class StudentIDValidator implements ConstraintValidator<StudentID, String> {
@Override
public void initialize(final StudentID studentID) {
}
@Override
public boolean isValid(final String studentID, ConstraintValidatorContext ctx) {
return studentID != null;
}
}
}
3) ResourceConfig
------------------------------
package com.config;
import javax.ws.rs.container.ResourceContext;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.ContextResolver;
import org.eclipse.persistence.jaxb.BeanValidationMode;
import org.eclipse.persistence.jaxb.MarshallerProperties;
import org.glassfish.jersey.moxy.json.MoxyJsonConfig;
import org.glassfish.jersey.moxy.json.MoxyJsonFeature;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.validation.ValidationConfig;
import org.glassfish.jersey.server.validation.internal.InjectingConstraintValidatorFactory;
import com.student.controller.StudentController;
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
// Resources.
register(StudentController.class);
// Validation.
register(ValidationConfigurationContextResolver.class);
// Providers - JSON.
register(MoxyJsonFeature.class);
register(new MoxyJsonConfig().setFormattedOutput(true)
// Turn off BV otherwise the entities on server would be validated by MOXy as well.
.property(MarshallerProperties.BEAN_VALIDATION_MODE, BeanValidationMode.NONE)
.resolver());
}
public static class ValidationConfigurationContextResolver implements ContextResolver<ValidationConfig> {
@Context
private ResourceContext resourceContext;
@Override
public ValidationConfig getContext(final Class<?> type) {
return new ValidationConfig()
.constraintValidatorFactory(resourceContext.getResource(InjectingConstraintValidatorFactory.class));
}
}
}
4) jboss-deployment-structure.xml
-------------------------------------------------------
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclude-subsystems>
<subsystem name="resteasy" />
</exclude-subsystems>
<exclusions>
<module name="javaee.api" />
<module name="javax.ws.rs.api" />
<module name="org.jboss.resteasy.resteasy-jaxrs" />
</exclusions>
</deployment>
</jboss-deployment-structure>
5) web.xml
------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.providers</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.resources</param-name>
<param-value>false</param-value>
</context-param>
<display-name>Jersey2Example</display-name>
<servlet>
<servlet-name>jersey</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.config.ApplicationConfig</param-value>
</init-param>
<init-param>
<param-name>jersey.config.beanValidation.enableOutputValidationErrorEntity.server</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>