条件运算符小于apache camel simple

l0oc07j2  于 2022-12-18  发布在  Apache
关注(0)|答案(1)|浏览(100)

我需要帮助在简单的apache camel中创建一个规则,我可以验证一个整数值是否小于或等于,但是,我无法使其工作,如下所示:
${in.header.name} ==空且${in.header.id}〈= 50
通过文档我测试了上面的功能,它不工作

bvn4nwqk

bvn4nwqk1#

您应该使用&&而不是and,您可能还希望从${in.header.name}中删除部分,并使用${header.name}

  • 使用和/或简单语言。
  • 变量

我还建议在简单语言字符串上使用Predicates和Java-DSL,因为它们比简单语言字符串更不容易出现拼写错误,而且可以使用PredicateBuilder构建相当复杂的 predicate 。

使用简单语言和 predicate 的示例测试:

package org.example;

import java.util.HashMap;

import org.apache.camel.Predicate;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.PredicateBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.Test;

public class ComparisonTest extends CamelTestSupport {
    
    @Test
    public void simpleComparisonSixIsGreater() throws Exception  {

        MockEndpoint isGreaterMockEndpoint = getMockEndpoint("mock:isGreater");
        isGreaterMockEndpoint.expectedMessageCount(1);

        HashMap<String, Object> headers = createHashmapForNameAndIdHeaders(null, 6);
        template.sendBodyAndHeaders("direct:simpleComparison", null, headers);

        isGreaterMockEndpoint.assertIsSatisfied();
    }

    @Test
    public void simpleComparisonThreeIsLowerThan() throws Exception {

        MockEndpoint isLowerMockEndpoint = getMockEndpoint("mock:isLower");
        isLowerMockEndpoint.expectedMessageCount(1);
        
        HashMap<String, Object> headers = createHashmapForNameAndIdHeaders(null, 3);
        template.sendBodyAndHeaders("direct:simpleComparison", null, headers);

        isLowerMockEndpoint.assertIsSatisfied();
    }

    @Test
    public void predicateComparisonSixIsGreater() throws Exception  {

        MockEndpoint isGreaterMockEndpoint = getMockEndpoint("mock:isGreater");
        isGreaterMockEndpoint.expectedMessageCount(1);

        HashMap<String, Object> headers = createHashmapForNameAndIdHeaders(null, 6);
        template.sendBodyAndHeaders("direct:predicateComparison", null, headers);

        isGreaterMockEndpoint.assertIsSatisfied();
    }

    @Test
    public void predicateComparisonThreeIsLowerThan() throws Exception {

        MockEndpoint isLowerMockEndpoint = getMockEndpoint("mock:isLower");
        isLowerMockEndpoint.expectedMessageCount(1);
        
        HashMap<String, Object> headers = createHashmapForNameAndIdHeaders(null, 3);
        template.sendBodyAndHeaders("direct:predicateComparison", null, headers);

        isLowerMockEndpoint.assertIsSatisfied();
    }

    @Override
    protected RoutesBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {

            @Override
            public void configure() throws Exception {
                
                // Using simple language
                from("direct:simpleComparison")
                    .routeId("simpleComparison")
                    .choice().when(simple("${header.name} == null && ${header.id} > 5"))
                        .log("Body value is greater than 5")
                        .to("mock:isGreater")
                    .otherwise()
                        .log("Body value is less than 5")
                        .to("mock:isLower")
                    .end()
                ;

                // Using predicate
                Predicate nameIsNullAndIdGreaterThanFive = PredicateBuilder.and(
                    header("name").isEqualTo(null),
                    header("id").isGreaterThan(5)
                );

                from("direct:predicateComparison")
                    .routeId("predicateComparison")
                    .choice().when(nameIsNullAndIdGreaterThanFive)
                        .log("Body value is greater than 5")
                        .to("mock:isGreater")
                    .otherwise()
                        .log("Body value is less than 5")
                        .to("mock:isLower")
                    .end();

            }
        };
    }

    private HashMap<String, Object> createHashmapForNameAndIdHeaders(String name, Integer id) {
        HashMap<String, Object> headers = new HashMap<>();
        headers.put("name", name);
        headers.put("id", id);
        return headers;
    }
}

相关问题