测试Apache Camel Junit的所有进程和路由 [英] Test All Process and Routes of Apache Camel Junit

查看:25
本文介绍了测试Apache Camel Junit的所有进程和路由的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试验证路由的所有进程,但是在它开始中断之后开始工作正常.请为此提供一些有用的参考或示例.提前致谢.

I am trying to validate all the processes of route but start is working fine after that it started to break.Please give me some useful reference or sample for this.Thanks in advance.

test.txt:

F1:L1
F2:L2
F3:L3

Customer.java

    private String firstName;
    private String lastName;
    // getters and setters
    @Override
    public String toString(){
        return firstName +":::" + lastName;
    }
}

JUnit 和路由:

    public class FileTest7 extends CamelTestSupport {

        @EndpointInject(uri = "direct:teststart")
        private Endpoint start;

        @EndpointInject(uri = "mock:direct:process1")
        private MockEndpoint mockProcess1;

        @EndpointInject(uri = "mock:direct:process2")
        private MockEndpoint mockProcess2;

        @EndpointInject(uri = "mock:direct:process3")
        private MockEndpoint mockProcess3;

        @EndpointInject(uri = "mock:direct:write2File")
        private MockEndpoint mockWrite2File;

        @EndpointInject(uri = "mock:end")
        private MockEndpoint mockEnd;

        @Override
        public boolean isUseAdviceWith() {
            return true;
        }

        @Override
        protected RouteBuilder createRouteBuilder() throws Exception {
            return new RouteBuilder() {
                @Override
                public void configure() throws Exception {
                    from("file:/var/file.log&noop=true").routeId("MY_ROUTE").to("direct:process1");

                    from("direct:process1").routeId("process1").process(exchange -> {
                        File file = exchange.getIn().getBody(File.class);
                        FileInputStream fis = new FileInputStream(file);
                        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                        List<Customer> customers = new ArrayList<>();

                        String line = null;
                        while ((line = br.readLine()) != null) {
                            String[] names = line.split(",");
                            customers.add(new Customer(names[0], names[1]));
                        }
                        br.close();
                        exchange.getOut().setBody(customers);
                    }).to("direct:process2");

                    from("direct:process2").routeId("process2").split(simple("${body}")).to("direct:process3");

                    from("direct:process3").routeId("process3").process(exchange -> {
                        Customer customer = exchange.getIn().getBody(Customer.class);
                        String content = "Content:" + customer.toString();
                        exchange.getIn().setBody(content);
                    }).to("direct:write2File");

                    //Below updated
from("direct:write2File").routeId("write2File").to("file:/src/test/resources?fileName=test_out.log&fileExist=Append");

                }
            };
        }

        @Override
        protected void doPostSetup() throws Exception {
            context.getRouteDefinition("MY_ROUTE").adviceWith(context, new AdviceWithRouteBuilder() {
                @Override
                public void configure() throws Exception {
                    replaceFromWith("direct:teststart");
                    weaveAddLast().to("mock:end");
                }
            });
            context.start();//updated
        }

        @Test
        public void testUnmarshal() throws Exception {

            template.sendBody("direct:teststart", new File("src/test/resources/test.txt"));


            List<Customer> customers = mockProcess1.getExchanges().get(0).getIn().getBody(List.class);
            System.out.println("customers:"+customers.size());

            Customer customer1 = mockProcess2.getExchanges().get(0).getIn().getBody(Customer.class);
            System.out.println("customer1:"+customers.toString());


            String customer = mockProcess3.getExchanges().get(0).getIn().getBody(String.class);
            System.out.println("customer:"+customer);

            String customerString = mockWrite2File.getExchanges().get(0).getIn().getBody(String.class);
            System.out.println("Customer String:"+customerString);

            String customerFinal =  mockEnd.getExchanges().get(0).getIn().getBody(String.class);
            System.out.println("Customer String:"+customerFinal);


            assertMockEndpointsSatisfied();
        }

    }

例外:已更新

引起:java.lang.ArrayIndexOutOfBoundsException: 1在 com.tgt.frs.collections.trm.ceds.routes.FileTest7$1.lambda$0(FileTest7.java:61)在 org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)在 org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:541)在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)在 org.apache.camel.processor.Pipeline.process(Pipeline.java:120)在 org.apache.camel.processor.Pipeline.process(Pipeline.java:83)在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)在 org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)在 org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)

Caused by: java.lang.ArrayIndexOutOfBoundsException: 1 at com.tgt.frs.collections.trm.ceds.routes.FileTest7$1.lambda$0(FileTest7.java:61) at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:541) at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198) at org.apache.camel.processor.Pipeline.process(Pipeline.java:120) at org.apache.camel.processor.Pipeline.process(Pipeline.java:83) at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198) at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62) at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)

推荐答案

CamelContext 不会由测试框架自动启动,因为您正在使用 AdviceWith,以允许您在路线开始之前向路线添加建议.添加建议后,在 doPostSetup 的末尾添加对 startCamelContext() 的调用.

The CamelContext is not automatically started by the test framework because you are using AdviceWith, to allow you to add advice to routes before they start. Add a call to startCamelContext() at the end of doPostSetup after you've added the advice.

此外,append 似乎不是 file 组件的有效属性,因此您需要删除 append=true.

Also, append doesn't appear to be a valid property of the file component so you'll need to remove append=true.

这篇关于测试Apache Camel Junit的所有进程和路由的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆