2016-11-23 95 views
0

我有一个带有泽西REST服务的spring引导应用程序。当我在独立码头部署我的war文件,它抛出一个异常,如下图所示Spring Boot引发Jersey REST服务抛出异常java.lang.NoSuchMethodError:

java.lang.NoSuchMethodError: javax.validation.Configuration.getBootstrapConfiguration()Ljavax/validation/BootstrapConfiguration; 
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.getTraversableResolver(ValidationBinder.java:322) 
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.getDefaultValidatorContext(ValidationBinder.java:303) 
at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.getDefaultValidator(ValidationBinder.java:282) 
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:195) 
at org.jvnet.hk2.internal.FactoryCreator.create(FactoryCreator.java:153) 
at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471) 
at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:70) 
at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2020) 
at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:766) 
at org.jvnet.hk2.internal.ServiceLocatorImpl.getUnqualifiedService(ServiceLocatorImpl.java:773) 
at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:111) 
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:587) 
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184) 
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350) 
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347) 
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:347) 
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:392) 
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177) 
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369) 
at javax.servlet.GenericServlet.init(GenericServlet.java:244) 
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:640) 
at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:419) 
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:875) 
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:349) 
at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1404) 
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1366) 
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:778) 
at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262) 
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:520) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:41) 
at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:188) 
at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:499) 
at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:147) 
at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180) 
at org.eclipse.jetty.deploy.providers.WebAppProvider.fileAdded(WebAppProvider.java:452) 
at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64) 
at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:610) 
at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:529) 
at org.eclipse.jetty.util.Scanner.scan(Scanner.java:392) 
at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:150) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:561) 
at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:236) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131) 
at org.eclipse.jetty.server.Server.start(Server.java:411) 
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:113) 
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) 
at org.eclipse.jetty.server.Server.doStart(Server.java:378) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1516) 
at java.security.AccessController.doPrivileged(Native Method) 
at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1441) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.eclipse.jetty.start.Main.invokeMain(Main.java:214) 
at org.eclipse.jetty.start.Main.start(Main.java:457) 
at org.eclipse.jetty.start.Main.main(Main.java:75) 

这里是我的pom.xml文件

<parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.1.RELEASE</version> 
    </parent> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.hibernate</groupId> 
        <artifactId>hibernate-entitymanager</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-juli</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-jdbc</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jersey</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

     <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> 
      <scope>provided</scope> </dependency> --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <!-- if your container implements Servlet API older than 3.0, use "jersey-container-servlet-core" --> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.23.2</version> 
     </dependency> 
     <!-- JPA Provider --> 
     <dependency> 
      <groupId>org.apache.openjpa</groupId> 
      <artifactId>openjpa-persistence</artifactId> 
      <version>2.4.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.openjpa</groupId> 
      <artifactId>openjpa-maven-plugin</artifactId> 
      <version>2.4.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.openjpa</groupId> 
      <artifactId>openjpa-all</artifactId> 
      <version>2.4.1</version> 
     </dependency> 

试图了解其中该javax.validation是从哪里来的,正如我在战争档案中看到validation-api-1.1.0-final.jarhibernate-validator-5.2.4-final.jar这两个罐子。

Hibernate-validator validation-api

回答

0

不知道这是理想的,但我通过

    <exclusion> 
        <groupId>org.glassfish.jersey.ext</groupId> 
        <artifactId>jersey-bean-validation</artifactId> 
       </exclusion> 

从我的spring-boot-starter-jersey

2

所以你需要码头1.1版(或更新版本)的javax验证的API,你已经知道了。其他一些库实际上是将传递依赖关系附加到validation-api的不同(较旧)版本。您的Hibernate-Validator版本(5.2.4)使用Validator-Api 1.1.0(see here)。

由于您使用的是Maven,因此最好使用Maven Dependency Plugin来查看完整的依赖关系树并手动跟踪它。

+0

依赖性解决这个问题,我不理解,以保持其中的一个。我可以看到spring-boot-starter-web和spring-boot-starter-jersey带来了那些冲突的罐子。 – yogsma

+0

你可以编辑你的问题,并把Maven的依赖插件的完整输出?你可以使用http://pastebin.com/,如果它太放在SO上。 –

+0

对不起,我正在使用eclipse ...我怎么能得到这在日食? – yogsma