处理器模块内部的Spring XD过滤

时间:2016-05-05 09:54:06

标签: java spring spring-integration spring-xd

我想创建一个模块,它将过滤来自输入通道的消息,并将它们转换为输出中的其他内容。我知道我可以将它分成两个模块(我更喜欢脚本上的Java代码),如:

inout

但我想在一个模块中执行此操作。如果我将过滤逻辑移动到transfomer模块并且我在非可接受的有效负载上返回空值,我开始获得spring-xd运行时异常。对此有什么正确的解决方法?

- 编辑 -

配置:

@Filter(inputChannel = "input", outputChannel = "output")
public boolean accept(final Message<?> message) {
    final MyObject payload = (MyObject) message.getPayload();
    return payload.getName().equals("test");
}


@Transformer(inputChannel = "input", outputChannel = "output")
public OtherObject transform(final MyObject data) {
    return convert(data);
}

过滤器:

@Configuration
@EnableIntegration
public class ModuleConfiguration {

@Bean
public MessageChannel input() {
    return new DirectChannel();
}

@Bean
public MessageChannel output() {
    return new DirectChannel();
}

@Bean
public MessageChannel myChannel() {
    return new DirectChannel();
}

@Bean
public MyFilter filter() {
    return new MyFilter();
}

@Bean
public MyTransformer transformer() {
    return new MyTransformer();
}
}

变压器:

@Filter(inputChannel = "input", outputChannel = "myChannel")
public boolean accept(final Message<?> message) 

例外:

@Transformer(inputChannel = "myChannel", outputChannel = "output")
public OtherObject transform(final MyObject payload)

1 个答案:

答案 0 :(得分:2)

正如您所发现的,变形金刚必须返回一些东西。

请参考Spring Integration documentation(每个XD处理器模块都是一个带有输入和输出通道的小型Spring Integration应用程序 - 源只有一个输出,接收器只有一个输入。)

现在你有这种方式,input上有两个消费者 - 消息将被循环分发给他们。

您需要将两个组件连接到一个消息流(通过第三个消息通道)......

@Filter(inputChannel = "input", outputChannel = "transformerChannel")
public boolean accept(final Message<?> message) {
    final MyObject payload = (MyObject) message.getPayload();
    return payload.getName().equals("test");
}


@Transformer(inputChannel = "transformerChannel", outputChannel = "output")
public OtherObject transform(final MyObject data) {
    return convert(data);
}

注意频道配置。