【问题标题】:Getting java.lang.NoClassDefFoundError: org/springframework/transaction/interceptor/TransactionInterceptor获取 java.lang.NoClassDefFoundError: org/springframework/transaction/interceptor/TransactionInterceptor
【发布时间】:2017-06-23 11:45:41
【问题描述】:

我正在尝试使用 spring 4、hiberate 4 来开发一个 rest 应用程序并出现 BeanDefinitionStoreException 的以下错误。

我已将类从 hibernate3 更改为 hibernate4,尽管我遇到了以下异常

org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected 

从 ServletContext 资源解析 XML 文档异常 [/WEB-INF/rest- servlet.xml];嵌套异常是 java.lang.NoClassDefFoundError: org/springframework/transaction/interceptor/TransactionInterceptor org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:413) org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335) org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303) org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216) org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187) org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129) org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:540) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454) org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:643) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:606) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:657) org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:525) org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:466) org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) javax.servlet.GenericServlet.init(GenericServlet.java:158) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(未知来源) java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(未知来源)

库文件

我的 Dispatcher-servlet 文件:

我浏览了一些帖子来解决 org.xml.sax.SAXParseException, 我在 beans:beans 中包含了 beans,甚至在 xsi:schemaLocation 中也提到了

    <?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc 
                http://www.springframework.org/schema/mvc/spring-mvc.xsd
                http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-        
beans-4.0.xsd
                http://www.springframework.org/schema/context 
                http://www.springframework.org/schema/context/spring-
context.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx-
4.0.xsd ">

<annotation-driven/>

<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <beans:property name="messageConverters">
        <beans:list>
            <beans:ref bean="jsonMessageConverter"/>
        </beans:list>
    </beans:property>
</beans:bean>

<beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</beans:bean> 

<context:component-scan base-package="net.javaonline.spring.restful" />

<tx:annotation-driven transaction-manager="hibernateTransactionManager" /> 



<beans:bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <beans:property name="driverClassName" value="org.postgresql.Driver" />
    <beans:property name="url" value="jdbc:postgresql://localhost:5433/SCM1" />
    <beans:property name="username" value="postgres" />
    <beans:property name="password" value="postgres123"/>
</beans:bean> 

 <beans:bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.annotation.AnnotationSessionFactoryBean">
    <beans:property name="dataSource" ref="dataSource" />
    <beans:property name="hibernateProperties">
        <beans:props>
            <beans:prop key="hibernate.dialect">
                org.hibernate.dialect.PostgreSQLDialect
            </beans:prop>
            <beans:prop key="hibernate.validator.apply_to_ddl">false</beans:prop>
            <beans:prop key="hibernate.validator.autoregister_listeners"> false</beans:prop> 
              <beans:prop key="hibernate.show_sql"> false   </beans:prop> 

        </beans:props>
    </beans:property>
 </beans:bean>

 <beans:bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" >
     <beans:property name="sessionFactory" ref="sessionFactory" />
 </beans:bean>
 </beans:beans>




<pre> Here following are the library files<pre>
 lib/commons-collections-3.2.1.jar
 lib/commons-logging-1.1.1.jar
 lib/dom4j-1.6.1.jar
 lib/hibernate-commons-annotations-4.0.1.Final.jar
 lib/hibernate-core-4.0.1.Final.jar
 lib/hibernate-jpa-2.0-api-1.0.1.Final.jar
 lib/jackson-annotations-2.5.4.jar
 lib/jackson-core-2.2.0.jar
 lib/jackson-databind-2.1.4.jar
 lib/javassist-3.15.0-GA.jar
 lib/jboss-logging-3.1.0.CR2.jar
 lib/jboss-transaction-api_1.1_spec-1.0.0.Final.jar
 lib/jstl-1.2.jar
 lib/spring-aop-4.0.0.RELEASE.jar
 lib/spring-aspects-4.0.0.RELEASE.jar
 lib/spring-beans-4.0.0.RELEASE.jar
 lib/spring-context-4.0.0.RELEASE.jar
 lib/spring-core-4.0.0.RELEASE.jar
 lib/spring-expression-4.0.0.RELEASE.jar
 lib/spring-framework-bom-4.0.0.RELEASE.jar
 lib/spring-jdbc-2.0.6.jar
 spring-orm-4.0.0.RELEASE.jar
 lib/spring-tx-4.0.0.RELEASE.jar
 lib/spring-web-4.0.0.RELEASE.jar
 lib/spring-webmvc-4.0.0.RELEASE.jar 

【问题讨论】:

  • 错误很明显:java.lang.NoClassDefFoundError。您缺少 TransactionInterceptor 的依赖项。
  • @alfcope 我在 lib 里有 spring-tx-4.0.0.RELEASE.jar,还不够吗?
  • 请显示您的 pom 和您的配置,以及您创建事务管理器的方式。
  • @alfcope,我编辑了我的帖子,包括配置和库文件。我是新手,请不要犹豫。非常感谢您的回复

标签: spring hibernate rest transactions


【解决方案1】:

您使用的是 Hibernate 4,但在创建 bean 时您尝试使用 hibernate3 类。

在您的 xml 配置中,将任何引用从 hibernate3 更改为 hibernate4。例如在创建工厂和事务管理器时。

<beans:bean id="sessionFactory"
  class="org.springframework.orm.hibernate4.annotation.
  AnnotationSessionFactoryBean">
....
</beans:bean>

    <beans:bean id="hibernateTransactionManager" 
 class="org.springframework.orm.hibernate4.
 HibernateTransactionManager" >
     <beans:property name="sessionFactory" ref="sessionFactory" />
 </beans:bean>

向库 aopalliance.jar 添加依赖项

<dependency>
    <groupId>aopalliance</groupId>
    <artifactId>aopalliance</artifactId>
    <version>1.0</version>
</dependency>

【讨论】:

  • 我已经根据你的建议更改了我的代码,但是这次我得到了这个 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 17 in XML document from ServletContext resource [/WEB-INF /rest-servlet.xml] 无效;嵌套异常是 org.xml.sax.SAXParseException: cvc-elt.1: 找不到元素“beans:beans”的声明。但作为我的配置文件,我已经提到了 bean
  • 请更新您的问题并添加您的 rest-servlet.xml。
  • 为什么beans-4.0.xsd 换行了?我认为你在那里有一个不可见的角色。尝试将 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 全部放在同一行上。
  • 这解决了 org.xml.sax.SAXParseException 异常,但我得到 java.lang.NoClassDefFoundError: org/springframework/transaction/interceptor/TransactionInterceptor 异常,即使我已经添加了所有的 jars。跨度>
  • 向 aopalliance.jar 添加依赖。我已经更新了我的答案。
猜你喜欢
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多