2012-02-29 4 views
12

Когда я запускаю свой тест junit, я могу получить правильный результат, и данные могут быть сохранены в базе данных.java.lang.NoSuchMethodError org.springframework.core.annotation.AnnotationUtils.getAnnotation

Когда я развертываю свой проект в tomcat, у меня есть это исключение.

моя весенняя версия 3.1.1, а версия tomcat - 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) 

это не работает):

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

Дайте нам зависимость: дерево, а также у вас есть lib, зарегистрированный на вашем томе cat/jdk (lib/ext и т. д.) и проверьте свой системный путь к классам, у вас нет неправильной версии весны. –

+0

Связанный вопрос/решение: http://stackoverflow.com/questions/9164001/spring-transaction-manager-annotionat -style-runtime-error-in-glassfish3 –

ответ

15

Правильная подпись

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

но что-то пытается вызвать

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

Второй метод был введен с spring 3.2.0 (по крайней мере, я не нашел в API, Шифрование до весны 3.0) весна 3.1 (спасибо Sebastien), поэтому вы, скорее всего, использовали весну 3.1 или новее для создания своего приложения и версию до 3.1 на tomcat. Исследуйте в этом направлении.

+1

Это весной 3.1, и я согласен, что должны быть разные версии весны, используемые, поскольку класс, кажется, найден. –

0

Вы не правильно развернуты пружине библиотеки к экземпляру Tomcat.

+0

Я использую maven для развертывания моего проекта (пакет tomcat: redeploy). Можете ли вы сказать мне, как это сделать? Спасибо – Felix

+2

Запустите mvn dependencies: перечислите и проверьте, есть ли у вас конфликты версий весны, так как Andreas_D предположил, что у вас может быть выше. Правильно ли зависит объем ваших весенних зависимостей, а не случайно установлен на 'provided'? – mcfinnigan

+0

Возможно также, что у вас есть несколько доступных библиотек весны, и это происходит неправильно. – Pau

0

Вы бы лучше пройти полный стек с причинами, это помогло бы (не сильно в этом случае, но это всегда лучше)

Поскольку вы получаете NoSuchMethodError, кажется, класс AnnotationUtils найден, но метод getAnnotation не может быть найден. Итак, во время выполнения я думаю, что неправильная версия класса может быть использована.

Вы должны проверить свою папку webapp, какая версия весны развернута, и проверить, что версия имеет метод getAnnotation.

Вы можете проверить там: https://fisheye.springsource.org/browse/spring-framework/org.springframework.core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java

Обратите внимание, что кажется, классы были реорганизованы на главной ветви (вы используете что ???)

Вы должны также выполнить МВН зависимость: дерево и проверьте версии пружины здесь, посмотрите, нет ли здесь здесь разных версий пружин, и если это так, используйте исключение зависимостей или тег управления зависимостями maven, чтобы точно указать, какую версию вы хотите использовать.

Смежные вопросы