2012-02-29 32 views
12

khi tôi chạy thử nghiệm junit của mình tôi có thể nhận được kết quả đúng và dữ liệu có thể được lưu trữ vào cơ sở dữ liệu.java.lang.NoSuchMethodError org.springframework.core.annotation.AnnotationUtils.getAnnotation

khi tôi triển khai dự án của mình vào tomcat, tôi có ngoại lệ này.

phiên bản mùa xuân của tôi là 3.1.1 và phiên bản tomcat là 6.0.

2012-02-29-16:40:54,968 ERROR - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.getAnnotation(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;)Ljava/lang/annotation/Annotation; 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:563) 
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1399) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761) 
    at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1500) 
    at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:670) 
    at org.apache.catalina.manager.ManagerServlet.doPut(ManagerServlet.java:435) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:640) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:619) 

nó không hoạt động):

pom.xml:

<properties> 
     <spring.version>3.1.1.RELEASE</spring.version> 
     <hibernate.version>3.6.9.Final</hibernate.version> 
     <jdbc.driver.groupId>mysql</jdbc.driver.groupId> 
     <jdbc.driver.artifactId>mysql-connector-java</jdbc.driver.artifactId> 
     <jdbc.driver.version>5.1.13</jdbc.driver.version> 
    </properties> 

    <dependencies> 

     <!-- Spring 3 dependencies --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 


     <!-- spring tx --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>1.6.12</version> 
     </dependency> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjweaver</artifactId> 
      <version>1.6.12</version> 
     </dependency> 
     <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib-nodep</artifactId> 
      <version>2.2.2</version> 
     </dependency> 
     <!-- asm --> 
     <dependency> 
      <groupId>asm</groupId> 
      <artifactId>asm</artifactId> 
      <version>3.3.1</version> 
     </dependency> 
     <!-- SPRING end --> 

     <!-- jstl --> 
     <dependency> 
      <groupId>jstl</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.1.2</version> 
     </dependency> 

     <dependency> 
      <groupId>taglibs</groupId> 
      <artifactId>standard</artifactId> 
      <version>1.1.2</version> 
     </dependency> 


     <!-- LOGGING begin --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <optional>true</optional> 
      <version>1.6.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <optional>true</optional> 
      <version>1.6.4</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <optional>true</optional> 
      <version>1.2.15</version> 
     </dependency> 
     <!-- LOGGING end --> 





     <!-- PERSISTENCE begin --> 
     <!-- hibernate --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-ehcache</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.15.0-GA</version> 
     </dependency> 
     <!-- PERSISTENCE end --> 

     <!-- dbcp connection pool --> 
     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.4</version> 
     </dependency> 


     <!-- spring orm --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 


     <!-- jdbc driver --> 
     <dependency> 
      <groupId>${jdbc.driver.groupId}</groupId> 
      <artifactId>${jdbc.driver.artifactId}</artifactId> 
      <version>${jdbc.driver.version}</version> 
      <scope>runtime</scope> 
     </dependency> 


    </dependencies> 
+0

Cung cấp cho chúng tôi sự phụ thuộc: cây và cũng có bạn có bất kỳ lib đăng ký trên tom của bạn cat/jdk (lib/ext etc) và kiểm tra đường dẫn lớp hệ thống của bạn mà bạn không có bất kỳ phiên bản sai nào của câu hỏi/giải pháp liên quan đến mùa xuân –

+0

: http://stackoverflow.com/questions/9164001/spring-transaction-manager-annotionat -style-runtime-error-in-glassfish3 –

Trả lời

15

Chữ ký đúng là

public static <A extends Annotation> A getAnnotation(Method method, 
               Class<A> annotationType) 

nhưng một cái gì đó cố gắng gọi

public static <A extends Annotation> A getAnnotation(AnnotatedElement element, 
               Class<A> annotationType) 

Phương pháp thứ hai được giới thiệu với spring 3.2.0 (ít nhất là tôi đã không tìm thấy trong các API tối đa mùa xuân 3,0) mùa xuân 3.1 (nhờ Sebastien) vì vậy bạn có thể đã sử dụng mùa xuân 3.1 trở lên để xây dựng ứng dụng của mình và phiên bản trước 3.1 trên tomcat. Điều tra theo hướng đó.

+1

vào mùa xuân 3.1 và tôi đồng ý có các phiên bản mùa xuân khác nhau được sử dụng vì lớp học dường như được tìm thấy. –

0

Bạn chưa triển khai một cách chính xác các thư viện mùa xuân để bạn thể hiện của Tomcat.

+0

Tôi sử dụng maven để triển khai dự án của mình (gói tomcat: redeploy) .Bạn có thể cho tôi biết cách thực hiện không? cảm ơn – Felix

+2

chạy phụ thuộc mvn: liệt kê và kiểm tra xem bạn có phiên bản xung đột của mùa xuân không, như Andreas_D đã đề xuất bạn có thể có ở trên. Phạm vi phụ thuộc mùa xuân của bạn có đúng không, và không vô tình được đặt thành 'được cung cấp'? – mcfinnigan

+0

Cũng có thể bạn có nhiều hơn một thư viện mùa xuân và nó đang dùng sai. – Pau

0

Bạn nên qua toàn bộ stack với những nguyên nhân, nó sẽ giúp (không nhiều trong trường hợp này nhưng nó luôn luôn tốt hơn)

Kể từ khi bạn nhận được một NoSuchMethodError, có vẻ như lớp AnnotationUtils được tìm thấy, nhưng có thể không tìm thấy phương thức getAnnotation. Vì vậy, tại thời gian chạy tôi nghĩ rằng phiên bản sai của lớp có thể được sử dụng.

Bạn nên kiểm tra thư mục webapp phiên bản của mùa xuân nào được triển khai và kiểm tra phiên bản đó có phương thức "getAnnotation" hay không.

Bạn có thể kiểm tra có: https://fisheye.springsource.org/browse/spring-framework/org.springframework.core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java

Chú ý rằng có vẻ như các lớp học đã được tổ chức lại trên cành chủ (bạn đang sử dụng mà ???)

Bạn cũng nên thực hiện một sự phụ thuộc mvn: cây và kiểm tra các phiên bản mùa xuân ở đây, xem liệu bạn có không có nhiều phiên bản mùa xuân khác nhau ở đây hay không và sử dụng loại trừ phụ thuộc hoặc thẻ quản lý phụ thuộc của maven để chỉ định chính xác phiên bản bạn muốn sử dụng

Các vấn đề liên quan