2016-11-23 138 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

相關問題