【问题标题】:java.lang.NoClassDefFoundError: org/springframework/messaging/converter/MessageConverterjava.lang.NoClassDefFoundError: org/springframework/messaging/converter/MessageConverter
【发布时间】:2017-05-07 06:56:05
【问题描述】:

我是 Spring Integration 的新手。我没有使用 maven,我的 integration-spring.xml 位于 src/resources/integration-spring.xml 内,我所有的 jar 都具有 v4.0.5+。运行 JUnit 测试用例时出现异常。

java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:101)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:331)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:213)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:290)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [resources/integration-spring.xml]; nested exception is java.lang.NoClassDefFoundError: org/springframework/messaging/converter/MessageConverter
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:414)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)

集成-spring.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd">

<int:gateway service-interface="com.fil.MyService" id="myGateway"
    default-request-channel="in" />

<int:service-activator input-channel="in" method="someMethod"
    ref="exampleHandler" />

<bean id="exampleHandler" class="com.fil.MyServiceImpl" />

Test.java

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import com.fil.MyService;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/resources/integration-spring.xml" })
public class MyServiceTest {

@Autowired
private MyService service; 

@Test
public void test() {
    try{
        service.single("hELLO ");
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

}

【问题讨论】:

  • hmm no class def 错误可能表明您正在加载 MessageConverter 类的两个不同版本,或者您没有正确调用 JUNIT 测试(您是否将 *jars 添加为外部资源?)。如果您可以切换到 maven ,而不是手动制作 lib dir
  • 我也添加了我的测试类。 @AntJavaDev

标签: spring spring-integration


【解决方案1】:

当您使用不兼容的 spring boot 和 spring 库时,可能会出现此问题。 我的情况是,我必须将 Spring Boot 更新到当前版本。

【讨论】:

    【解决方案2】:

    你真的应该使用 maven 或 gradle 来管理你的项目的依赖;手动操作太痛苦了——尤其是在获得所有版本的正确性方面。

    NoClassDefFoundError: org/springframework/messaging/converter/MessageConverter

    org.springframework.messaging 包由核心 Spring Framework 中的spring-messaging jar 文件提供。它包含 Spring Integration(和其他 Spring 项目)使用的通用消息传递抽象。

    由于您是框架的“新手”,因此您确实应该使用最新版本:

    org.springframework.integration:spring-integration-core:4.3.9.RELEASE
    

    取决于

    org.springframework:spring-messaging:4.3.8.RELEASE
    

    默认情况下。

    v4.0.5+

    必须确保来自同一项目(Spring Integration 或 Spring Framework)的所有 jar 具有相同的各自版本(spring-beansspring-messaging 等必须匹配,spring-integration-* 必须都是相同的版本)。

    【讨论】:

      猜你喜欢
      • 2020-08-09
      • 1970-01-01
      • 2013-04-06
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      相关资源
      最近更新 更多