我想创建一个模块,它将过滤来自输入通道的消息,并将它们转换为输出中的其他内容。我知道我可以将它分成两个模块(我更喜欢脚本上的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)
答案 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);
}
注意频道配置。