Camel Junit测试直接组件

时间:2017-10-26 14:23:56

标签: java spring junit apache-camel

我在Fuse 6.3上运行了一个骆驼应用程序,它运行正常。 我试图为Camel组件编写JUnit测试用例,并且我得到错误java.lang.IncompatibleClassChangeError:找到类org.springframework.test.context.TestContext,但接口是预期的。附加maven依赖屏幕截图

我正在使用以下bom

中的依赖项版本
<dependency>
                <groupId>org.jboss.fuse.bom</groupId>
                <artifactId>jboss-fuse-parent</artifactId>
                <version>6.3.0.redhat-262</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

JUnit stacktrace:

java.lang.IncompatibleClassChangeError: Found class org.springframework.test.context.TestContext, but interface was expected
    at org.apache.camel.test.spring.CamelSpringTestContextLoaderTestExecutionListener.prepareTestInstance(CamelSpringTestContextLoaderTestExecutionListener.java:47)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

JUnit Class。

package com.company.integration;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.test.spring.CamelSpringJUnit4ClassRunner;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;

@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration(locations  = {
         "classpath:/META-INF/spring/camel-context.xml" ,
         "classpath:/META-INF/spring/policyHolderRoute.xml" ,
         "classpath:/META-INF/spring/policyRoute.xml" 
})
public class ComponentTest {

    private static final Logger LOGGER = LoggerFactory.getLogger(ComponentTest.class);

    private Exchange exchange;

    @Autowired
    private CamelContext context;

    @Autowired
    private ProducerTemplate template;

    @Produce(uri = "direct:policyHolderLoad")
    protected ProducerTemplate directPolicyHolderTemplate;

    @Produce(uri = "direct:policyLoad")
    protected ProducerTemplate directPolicyTemplate;

    @Before
    public void setUp() throws Exception {
        exchange = createExchange();
    }

    protected Exchange createExchange() {
        return new DefaultExchange(context);
    }

    @Test
    public void testDirectPolicyHolderRoute() throws Exception {

        try {
            String pathToImportPolicyHolderResponse = "componenttest/success/mock/importpolicy/response.json";
            String requestJson = "componenttest/success/input/importpolicy/request.json";
            exchange.getIn().setBody(readFile(requestJson));
            Exchange responseExchange = directPolicyHolderTemplate.send(exchange);
            Thread.sleep(2000);

        } catch (Exception e) {
            Assert.fail("Unexpected error performing XML comparison: " + e.getMessage());
            LOGGER.error(e.getMessage());
            ;

        }
    }

    protected String readFile(String fileName) throws IOException {
        StringBuilder fileContent = new StringBuilder();
        InputStream content = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
        if (content == null)
            return null;
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String s = reader.readLine();
            while (s != null) {
                fileContent.append(s);
                s = reader.readLine();
            }
        } finally {
            if (content != null)
                content.close();
        }
        return fileContent.toString();

    }

}

输出:mvn依赖:tree -Dscope = runtime

[INFO] com.company.esb.online.in:Online:war:0.0.1-SNAPSHOT
[INFO] +- org.apache.camel:camel-jolt:jar:2.17.0.redhat-630262:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.3:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.3:compile
[INFO] |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.6.3:compile
[INFO] |  +- com.bazaarvoice.jolt:jolt-core:jar:0.0.20:compile
[INFO] |  +- com.bazaarvoice.jolt:json-utils:jar:0.0.20:compile
[INFO] |  +- com.sun.xml.bind:jaxb-core:jar:2.2.11:compile
[INFO] |  \- com.sun.xml.bind:jaxb-impl:jar:2.2.11.redhat-2:compile
[INFO] +- org.apache.camel:camel-jackson:jar:2.17.0.redhat-630262:compile
[INFO] |  \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.6.3:compile
[INFO] +- org.apache.camel:camel-jms:jar:2.17.0.redhat-630262:compile
[INFO] |  +- org.springframework:spring-jms:jar:3.2.16.RELEASE:compile
[INFO] |  +- org.springframework:spring-context:jar:3.2.16.RELEASE:compile
[INFO] |  +- org.springframework:spring-tx:jar:3.2.16.RELEASE:compile
[INFO] |  \- org.springframework:spring-beans:jar:3.2.16.RELEASE:compile
[INFO] +- org.apache.camel:camel-cxf:jar:2.17.0.redhat-630262:compile
[INFO] |  +- org.apache.camel:camel-cxf-transport:jar:2.17.0.redhat-630262:compile
[INFO] |  |  \- javax.servlet:javax.servlet-api:jar:3.1.0.redhat-1:compile
[INFO] |  +- org.apache.cxf:cxf-rt-frontend-jaxrs:jar:3.1.5.redhat-630262:compile
[INFO] |  |  +- org.apache.cxf:cxf-core:jar:3.1.5.redhat-630262:compile
[INFO] |  |  |  +- org.codehaus.woodstox:woodstox-core-asl:jar:4.4.1:compile
[INFO] |  |  |  |  \- org.codehaus.woodstox:stax2-api:jar:3.1.4:compile
[INFO] |  |  |  \- org.apache.ws.xmlschema:xmlschema-core:jar:2.2.1.redhat-1:compile
[INFO] |  |  +- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile
[INFO] |  |  +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO] |  |  \- org.apache.cxf:cxf-rt-transports-http:jar:3.1.5.redhat-630262:compile
[INFO] |  +- org.apache.cxf:cxf-rt-frontend-jaxws:jar:3.1.5.redhat-630262:compile
[INFO] |  |  +- xml-resolver:xml-resolver:jar:1.2.0.redhat-10:compile
[INFO] |  |  +- org.ow2.asm:asm:jar:5.0.4:compile
[INFO] |  |  +- org.apache.cxf:cxf-rt-bindings-xml:jar:3.1.5.redhat-630262:compile
[INFO] |  |  +- org.apache.cxf:cxf-rt-frontend-simple:jar:3.1.5.redhat-630262:compile
[INFO] |  |  \- org.apache.cxf:cxf-rt-ws-addr:jar:3.1.5.redhat-630262:compile
[INFO] |  |     \- org.apache.cxf:cxf-rt-ws-policy:jar:3.1.5.redhat-630262:compile
[INFO] |  |        \- org.apache.neethi:neethi:jar:3.0.3.redhat-1:compile
[INFO] |  +- org.apache.cxf:cxf-rt-rs-security-oauth:jar:3.1.5.redhat-630262:compile
[INFO] |  |  +- org.apache.cxf:cxf-rt-rs-client:jar:3.1.5.redhat-630262:compile
[INFO] |  |  \- net.oauth.core:oauth-provider:jar:20100527:compile
[INFO] |  |     \- net.oauth.core:oauth:jar:20100527:compile
[INFO] |  +- org.springframework:spring-core:jar:3.2.16.RELEASE:compile
[INFO] |  |  \- commons-logging:commons-logging:jar:1.2:compile
[INFO] |  \- org.apache.cxf:cxf-rt-bindings-soap:jar:3.1.5.redhat-630262:compile
[INFO] |     +- org.apache.cxf:cxf-rt-wsdl:jar:3.1.5.redhat-630262:compile
[INFO] |     |  \- wsdl4j:wsdl4j:jar:1.6.3.redhat-1:compile
[INFO] |     \- org.apache.cxf:cxf-rt-databinding-jaxb:jar:3.1.5.redhat-630262:compile
[INFO] +- org.apache.camel:camel-jsonpath:jar:2.17.0.redhat-630262:compile
[INFO] |  +- com.jayway.jsonpath:json-path:jar:2.1.0:compile
[INFO] |  \- net.minidev:json-smart:jar:2.2.1:compile
[INFO] |     \- net.minidev:accessors-smart:jar:1.1:compile
[INFO] +- org.apache.camel:camel-core:jar:2.17.0.redhat-630262:compile
[INFO] +- org.apache.camel:camel-spring:jar:2.17.0.redhat-630262:compile
[INFO] |  +- org.springframework:spring-aop:jar:3.2.16.RELEASE:compile
[INFO] |  |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  \- org.springframework:spring-expression:jar:3.2.16.RELEASE:compile
[INFO] +- xmlunit:xmlunit:jar:1.6:compile
[INFO] +- javax.inject:javax.inject:jar:1.0.0.redhat-6:compile
[INFO] +- javax.enterprise:cdi-api:jar:1.2.0.redhat-2:compile
[INFO] |  +- javax.el:javax.el-api:jar:3.0.0:compile
[INFO] |  \- javax.interceptor:javax.interceptor-api:jar:1.2:compile
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.7.redhat-2:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.7.7.redhat-2:compile
[INFO] +- log4j:log4j:jar:1.2.17.redhat-1:compile
[INFO] \- org.springframework:spring-web:jar:3.2.16.RELEASE:compile
[INFO] ------------------------------------------------------------------------

我做了一些分析,发现用于camel 2.17.0.redhat-630262的默认spring版本是camel parent pom xml中的3.2.16.RELEASE。

<!-- default springframework version used in Fuse 6.2.1 and 6.3 -->
    <spring-version>${spring32-version}</spring-version>
    <!-- we don't have to declare versions for SMX spring bundles -->
    <spring32-version>3.2.16.RELEASE</spring32-version>
    <spring40-version>4.0.9.RELEASE</spring40-version>
    <spring41-version>4.1.9.RELEASE</spring41-version>
    <spring42-version>4.2.5.RELEASE</spring42-version>

我在使用JDK 1.8的EAP上运行保险丝6.3,我应该将spring框架升级到4.x以解决此问题吗?

0 个答案:

没有答案