0 Replies Latest reply on Aug 20, 2015 7:45 AM by melbin

    Jboss EAP 6.2 java.lang.NoSuchMethodError: javax.validation.Configuration.getBootstrapConfiguration()Ljavax/validation/BootstrapConfiguration;

    melbin

      Hi 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>