I'm trying to refactor existing xml of Spring Integration to the new 4.0.0. annotations.
<!-- the service activator is bound to the tcp input gateways error channel -->
<ip:tcp-inbound-gateway error-channel="errorChannel" />
<int:service-activator input-channel="errorChannel" ref="myService" />
But how can I bind the service activator to the error channel as it was in xml?
@Configuration
@EnableIntegration
public class Config {
    @Bean
    public TcpInboundGateway gate() {
        TcpInboundGateway gateway = new TcpInboundGateway();
        //??? how can I bind the service activator class as it was in xml?
        gateway.setErrorChannel(MessageChannel);
        return gateway;
    }
}
@Service
public class MyService {
    @ServiceActivator(inputChannel = "errorChannel")
    public String send(String data) {
        //business logic
    }
}
                Well, since I am an author of those new Java and Annotation config features I can help you.
But you should be ready that it isn't so easy to do. To get rid of xml at all you might go with our another new stuff - Java DSL.
I geass we will have several steps to make it worked.
gateway.setErrorChannel(MessageChannel); and @ServiceActivator(inputChannel = "errorChannel"). You must declare errorChannel as a bean:
@Bean
public MessageChannel errorChannel() {
   return new DirectChannel();
}
And use it from that TCP Gateway:
gateway.setErrorChannel(this.errorChannel());
Or, if you rely on the default errorChannel from Framework, you should @Autowired it to that Config.
Next step. I don't see @ComponentScan. That means that your @ServiceActivator might not be visible for Application context.
You should provide more options for TcpInboundGateway anyway: connectionFactory, requestChannel, replyChannel etc. Everything must be Spring beans.
For a start it is enough. Hope it is clear and makes sense at all for you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With