spring integration - Multiple @ServiceActivator methods with the same inputChannel and different signature -
i'm trying implement annotation driven event bus (e.g. guava event bus) using spring integration. have publishsubscribechannel publish events , idea use methods annotated @serviceactivator event handlers. each method can have different signature based on event (payload) need handle.
what noticed when event published, all instances of serviceactivatinghandler created serviceactivatorannotationpostprocessor called , exception each method has signature not match payload. e.g.
caused by: org.springframework.expression.spel.spelevaluationexception: el1004e:(pos 8): method call: method handle(model.api.serviceavailableevent) cannot found on service.eai.testserviceactivatorimpl2 type
is there way define @serviceactivator method specific payload types?
that's correct, subscribers publishsubscribechannel
accept same message. , if there no chance convert incoming payload expected method argument type, exception.
if filter unexpected types, have use @filter
before @serviceactivator
. in other words same now, make flow(s) bit complex front filters subscribers publishsubscribechannel
.
you can rely on existing payloadtypeselector
:
@bean @filter(inputchannel = "publishsubscribechannel", outputchannel="service1") public messageselector payloadtypeselector() { return new payloadtypeselector(...); }
or, yes, simple pojo method checks payload
type , marked same @filter
.
i guess next question like: why doesn't @serviceactivator
ignore types aren't unsuitable target method?
just don't mix concerns. service activator message
handling in target business logic. filtering , skipping have difefrent ei pattern - filter
.
Comments
Post a Comment