Red Hat Fuse 7.2单元测试产生令人困惑的RuntimeException-即“从bundle中等待BlueprintContainer”

问题描述 投票:-1回答:1

问题:

下面提供的单元测试失败,并显示以下消息:

java.lang.RuntimeException: Gave up waiting for BlueprintContainer from bundle "RouteXmlTest"

例外是模糊的,并没有说明如何对这种情况进行单元测试的有说服力的文档或示例。

因此,需要帮助:-)

下面,我列出了我失败尝试中使用的代码,到目前为止,即使用“CamelBlueprintTestSupport.java”扩展测试文件。

请注意,部署到Red Hat Fuse 7.2容器时,应用程序(下面提供的代码)也会成功运行。

任何指导/解决方案赞赏。

谢谢!

这是单元测试类......

的src /主/测试/ AAA / bbb.ccc.jar / RouteXmlTest.java

package aaa.bbb.ccc.jar;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;

import org.apache.camel.Consume;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.blueprint.CamelBlueprintTestSupport;
//import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;

public class RouteXmlTest extends CamelBlueprintTestSupport {  //CamelTestSupport {

    protected Object[] expectedBodies = {}; // empty to start

    @Produce(uri = "file:work/cbr/input")
    protected ProducerTemplate inputEndpoint;

    @Consume(uri = "jms:queue:myFromQueueA")
    protected MockEndpoint myFromQueueA;

    @Consume(uri = "jms:queue:myToQueueB")
    protected MockEndpoint myToQueueB;

    @Consume(uri = "jms:queue:myToQueueC")
    protected MockEndpoint myToQueueC;

    @Consume(uri = "jms:queue:myToQueueD")
    protected MockEndpoint myToQueueD;

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new CamelRoute();
    }

    @Override
    public String isMockEndpoints() {
        return "*";
    }

    @Test
    public void testCamelRoute() throws Exception {
        // Define some input data based on the files we have to test against
        String value1 = getFileContents("src/test/resources/data/order1.xml");
        String value2 = getFileContents("src/test/resources/data/order2.xml");
        String value3 = getFileContents("src/test/resources/data/order3.xml");
        String value4 = getFileContents("src/test/resources/data/order4.xml");
        String value5 = getFileContents("src/test/resources/data/order5.xml");

        expectedBodies = new Object[]{value1, value2, value3, value4, value5};

        // Define some expectations
        getMockEndpoint("mock:jms:queue:myToQueueB").expectedMinimumMessageCount(5);
        getMockEndpoint("mock:jms:queue:myToQueueC").expectedMinimumMessageCount(5);
        getMockEndpoint("mock:jms:queue:myToQueueD").expectedMinimumMessageCount(5);

        // Send some messages to input endpoints
        for (Object expectedBody : expectedBodies) {
            inputEndpoint.sendBody(expectedBody);
        }

        // Validate our expectations
        assertMockEndpointsSatisfied();
    }

    @Override
    protected String getBlueprintDescriptor() {
        return "OSGI-INF/blueprint/camel-route.xml";
    }

    private String getFileContents(String path) throws Exception {
        Path filePath = new File(path).toPath();
        return new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8);
    }
}

这是camel-route.xml ...

SRC /主/资源/ OSGI-INF /蓝图/骆驼航线

<?xml version="1.0" encoding="UTF-8"?>
<blueprint  xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 
                                https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd              
                                http://camel.apache.org/schema/blueprint 
                                http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">

    <reference id="transactionManager" interface="org.springframework.transaction.PlatformTransactionManager"/>  

    <bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
        <property name="connectionFactory">
            <reference interface="javax.jms.ConnectionFactory" />
        </property>
        <property name="transactionManager" ref="transactionManager"/>
    </bean>    

    <bean class="aaa.bbb.ccc.jar.CamelRoute" id="myRouteBuilder"/>

    <camelContext id="cbr-example-context" xmlns="http://camel.apache.org/schema/blueprint">
        <routeBuilder ref="myRouteBuilder"/>
    </camelContext>
</blueprint>

以下是尝试单元测试时收到的异常...

-
-
-
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running aaa.bbb.ccc.jar.RouteXmlTest
[                          main] CamelBlueprintHelper           INFO  Using Blueprint XML file: /C:/tools/rfhpoc/target/classes/OSGI-INF/blueprint/camel-route.xml
[                      Thread-0] RawBuilder                     INFO  Copy thread finished.
[                      Thread-1] RawBuilder                     INFO  Copy thread finished.
[                          main] Activator                      INFO  Camel activator starting
[                          main] Activator                      INFO  Camel activator started
[         Blueprint Extender: 1] BlueprintContainerImpl         INFO  Bundle RouteXmlTest/1.0.0 is waiting for namespace handlers [http://camel.apache.org/schema/blueprint]
[         Blueprint Extender: 1] BlueprintContainerImpl         INFO  Bundle RouteXmlTest/1.0.0 is waiting for dependencies [(objectClass=javax.jms.ConnectionFactory), (objectClass=org.springframework.transaction.PlatformTransactionManager)]
[                          main] RouteXmlTest                   INFO  ********************************************************************************
[                          main] RouteXmlTest                   INFO  Testing done: testCamelRoute(aaa.bbb.ccc.jar.RouteXmlTest)
[                          main] RouteXmlTest                   INFO  Took: 32.815 seconds (32815 millis)
[                          main] RouteXmlTest                   INFO  ********************************************************************************
[                          main] CamelBlueprintHelper           INFO  Deleting work directory target/bundles/1549574455436
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 33.338 s <<< FAILURE! - in aaa.bbb.ccc.jar.RouteXmlTest
testCamelRoute(aaa.bbb.ccc.jar.RouteXmlTest)  Time elapsed: 32.952 s  <<< ERROR!
java.lang.RuntimeException: Gave up waiting for BlueprintContainer from bundle "RouteXmlTest"


Results:

Errors: 
  RouteXmlTest>CamelBlueprintTestSupport.setUp:241->CamelBlueprintTestSupport.createBundleContext:175 » Runtime

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 01:13 min
Finished at: 2019-02-07T16:21:28-05:00
------------------------------------------------------------------------
-
-
-

以下其他相关文件

pom.hml

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>aaa.bbb.ccc</groupId>
    <artifactId>rfhpoc</artifactId>
    <version>1.0</version>
    <packaging>bundle</packaging>
    <name>rfhpoc</name>
    <description>rfhpoc - show dsl routing from queue to multiple queues ("spray")</description>
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.test.skip>false</maven.test.skip>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.redhat-fuse</groupId>
                <artifactId>fuse-karaf-bom</artifactId>
                <version>7.1.0.fuse-710019-redhat-00002</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>artemis-core-client</artifactId>
        </dependency> 
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>artemis-jms-client</artifactId>
        </dependency>  
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
        </dependency>     
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-blueprint</artifactId>
            <scope>provided</scope> <!--***-->
        </dependency>                    
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12.0.redhat-003</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test-blueprint</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <defaultGoal>install</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>3.2.0</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>rfhpoc</Bundle-SymbolicName>
                        <Bundle-Name>rfhpoc</Bundle-Name>
                    </instructions>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

的src /主/爪哇/ aaa.bbb.ccc.jar / CamelRoute.java

package aaa.bbb.ccc.jar;

import org.apache.camel.builder.RouteBuilder;

public class CamelRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        System.getProperties().list(System.out);

        from("file:work/cbr/input")
                .log("from ${file:name}")
                .to("jms:queue:myFromQueueA");

        from("jms:queue:myFromQueueA")
                //.transacted()
                .log("from jms:queue:myFromQueueA")
                .to("jms:queue:myToQueueB")
                .to("jms:queue:myToQueueC")
                .to("jms:queue:myToQueueD");                
    }   
}

环境

red hat fuse 7.2
java 8
active mq 7.2.3
apache maven 3.5.3
java osgi activemq jbossfuse blueprint-osgi
1个回答
0
投票

我在CamelBlueprintTestSupport测试中面临类似的错误。通过使用下面的代码将交易行为添加到我的blueprint.xml文件后,出现了错误。

<reference id="osgiPlatformTransactionManager" interface="org.springframework.transaction.PlatformTransactionManager" />

<bean id="XA_TX_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager" ref="osgiPlatformTransactionManager"/>
</bean>

<route id="transactedRoute">
   <from uri="direct:transactedRoute" />
   ...
   <transacted ref="XA_TX_REQUIRED"/>
   ...
</route>
© www.soinside.com 2019 - 2024. All rights reserved.