Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration 如何在Spring集成路由器中使用SpEL读取有效负载和头内容_Spring Integration_Spring Integration Dsl_Spring Integration Http - Fatal编程技术网

Spring integration 如何在Spring集成路由器中使用SpEL读取有效负载和头内容

Spring integration 如何在Spring集成路由器中使用SpEL读取有效负载和头内容,spring-integration,spring-integration-dsl,spring-integration-http,Spring Integration,Spring Integration Dsl,Spring Integration Http,我的项目中的技术 作为Spring集成项目REST API和入站http网关(接收XML输入并生成XML输出)的一部分,我正在编写以下组件: 一个服务激活器,根据其XSD对传入XML执行基本验证。 如果验证成功,将使用名为isError的布尔实例变量/属性将POJO构建器模式Java对象设置为true。 如果验证未成功,POJO a builder模式Java对象将使用名为isError的布尔实例变量/属性构建为false。 构建POJO后,它被包装成消息并发送到输出通道。 有一个路由器组件,它

我的项目中的技术

作为Spring集成项目REST API和入站http网关(接收XML输入并生成XML输出)的一部分,我正在编写以下组件:

一个服务激活器,根据其XSD对传入XML执行基本验证。 如果验证成功,将使用名为isError的布尔实例变量/属性将POJO构建器模式Java对象设置为true。 如果验证未成功,POJO a builder模式Java对象将使用名为isError的布尔实例变量/属性构建为false。 构建POJO后,它被包装成消息并发送到输出通道。 有一个路由器组件,它从outout通道获取消息,并根据payload/POJO中isError属性的值决定目标路由/通道。 POJO类的草稿实际上,POJO将具有更多属性,但对于我们的示例,请保持简短:

public class Composite {
    private Boolean isError;

    private Composite(CompositeBuilder compositeBuilder) {
            this.isError = miCompositeBuilder.isError;
        }

    public boolean isError() {
            return isError;
        }

    //Builder
    public static class CompositeBuilder {
        private Boolean isError;

        public CompositeBuilder(Boolean isError) {
            this.isError = isError;
        }      

        public Composite build() {
            return new Composite(this);
        }
    }
}
XML格式的验证程序服务激活器组件:

<!-- SERVICE ACTIVATOR FOR REQUEST VALIDATION -->
    <int:service-activator ref="myService"
                           method="validateMYRequest"
                           input-channel="myGatewayRequests"
                           output-channel="compositesPostRequestValidation" />
<!-- ROUTER POST-REQUEST VALIDATION -->
    <int:router input-channel="compositesPostRequestValidation" expression="payload.isError">
        <int:mapping value="true" channel="upstreamResponses"/>
        <int:mapping value="false" channel="downstreamValidatedRequests"/>
    </int:router>
XML格式的路由器组件:

<!-- SERVICE ACTIVATOR FOR REQUEST VALIDATION -->
    <int:service-activator ref="myService"
                           method="validateMYRequest"
                           input-channel="myGatewayRequests"
                           output-channel="compositesPostRequestValidation" />
<!-- ROUTER POST-REQUEST VALIDATION -->
    <int:router input-channel="compositesPostRequestValidation" expression="payload.isError">
        <int:mapping value="true" channel="upstreamResponses"/>
        <int:mapping value="false" channel="downstreamValidatedRequests"/>
    </int:router>
最后来问我的问题,在这个路由器里

问题1 SpEL表达式payload.isError似乎有问题,因为我在调用路由器时遇到了一个异常,如下所示:

org.springframework.expression.spel.SpelEvaluationException:EL1008E:在类型为“com.amb.restSample.core.model.Composite”的对象上找不到属性或字段“isError”-可能不是公共的或无效的? 位于org.springframework.expression.spel.ast.PropertyOrFieldReference.readPropertyPropertyYorfieldReference.java:217~[spring-expression-5.1.5.RELEASE.jar:5.1.5.RELEASE] ...

您能告诉我如何访问复合POJO中的布尔isError属性吗?这是假设发送到路由器的消息是消息

问题2 如果我希望在将isError属性发送到路由器之前将其作为消息头字符串,而不是将其作为复合POJO中的布尔属性使用,那么是否有表达式来访问它? 看起来工资是复合的,不是复合的

在任何情况下,SpEL都使用JavaBean约定;所以isError是布尔属性错误的getter。所以只要MIComposite公开payload.error,它就应该工作。或者您可以使用payload.isError


如果它在标题中,则表达式将是headers['myHeader']。

你好,Gary,我的错,我编辑了日志以反映实际错误。也就是说,我会尝试你的建议,并让你知道。提前谢谢!