2017-05-07 119 views
0

我是Spring Integration的新手。我沒有使用maven,並且我的integration-spring.xml位於src/resources/integration-spring.xml中,我所有的jar都有v4.0.5 +。運行我的JUnit測試用例時,我遇到了異常。java.lang.NoClassDefFoundError:org/springframework/messaging/converter/MessageConverter

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(); 
    } 
} 

} 
+0

hmm沒有類def錯誤可能表明您正在加載兩個不同版本的'MessageConverter'類,或者您沒有正確調用JUNIT測試(是否將* jar添加爲外部資源?)。如果你可以切換到maven,而不是手工製作lib目錄 – AntJavaDev

+0

我也添加了我的Test類。 @AntJavaDev –

回答

0

你真的應該用maven或gradle這個來管理你的項目的依賴;手動完成它太痛苦 - 尤其是關於讓所有版本正確。

NoClassDefFoundError: org/springframework/messaging/converter/MessageConverter

org.springframework.messaging包從核心Spring框架的spring-messaging jar文件提供。它包含Spring Integration(和其他Spring項目)使用的一般消息抽象。

既然你是 「新」 的框架(S),你真的應該使用最新版本:

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

取決於

org.springframework:spring-messaging:4.3.8.RELEASE 

默認。

v4.0.5+

必須確保來自同一個項目中的所有jar文件(Spring集成或Spring框架)有他們各自相同的版本(spring-beansspring-messaging等必須匹配和spring-integration-*都必須是同一版本)。