There was an always cast to FunctionInvocationWrapper even though in the case of nativeEncoding the function was not of that instance. This fixes it.
Resolves#2101
This will ensure that any exception that is thrown during the conversion by ApplicationJsonMessageMarshallingConverter are propagated. Basically the idea is that since MessageConverter has accepted the conversion via canConvert() method it is no longer necessary to expect that may be some other converter in the stack may succeed. And on top of that user can still define custom message converter
Resolves#2129Resolves#2191
Currently, when `StreamBridge` creates an output binding, the framework
applies all the available channel interceptors on it by default. This
creates unwanted side effects and the application does not have a way
to control this. Change this behavior by only applying channel interceptors
annoatated with `@GlobalChannelInterceptor`. This way, the user can
provide patterns to decide which interceptors need to be applied on
specific `StreamBridge` bindings.
Adding tests to verify.
Adding docs.
Resolves https://github.com/spring-cloud/spring-cloud-stream/issues/2180
Given that RoutingFunction may actualy route to Consumer, there is no need for output binding.
This fix addresses it where no output binding is created initially and instead the output binding will be created if and when the firt output is produced.
Resolves#2168
This commit effectively reverts the changes introduced in
d9f8653e42. Basically, removing
the changes introduced for supporting multi binders when
binders are registered through spring.factories. Binders
are still expected to provide spring.binders to register them.
More native compilation support for Kafka Streams and multi binder environments.
Although these changes directly do not reflect anything native related, these
are mainly to support the usage of spring.factories in Kafka Streams binder
instead of spring.binders. We are only supporting the spring.factories model
for finding the binders in spring-native based Spring Cloud Stream applications.
resolves https://github.com/spring-cloud/spring-cloud-stream/issues/2161Resolves#2162
- Instead of injecting `AbstractMappingMessageRouter[]`, inject it as a container
type using `List<>`. This is because the former uses reflection behind the scenes
and causes issues with graal native compilation (unless provided as a native hint).
- Instead of autowiring `Map<String, BindingTargetFactory>` in
`AbstractBindableProxyFactory`, programmatically populate `BindingTargetFactory`
beans by doing a `BeanFactory` lookup in a new method. Then the subclasses of
`AbstractBindableProxyFactory` call this method to pouplate the avaialble
`BindingTargetFactory` beans in their `afterPropertiesSet` method.
- Convert array injection of `BindableProxyFactory[]` in functionInitailzer bean
in `FunctionConfiguration` to use container based injejction (`List<>`).
- Cleanup unused injection in functionInitializer bean in `FunctionConfiguration`.
Resolves https://github.com/spring-cloud/spring-cloud-stream/issues/2154Resolves#2155
Typically output type conversion would happen in s-c-function which is a bit too early for cases when user uses SpEL on the output payload (e.g., Rabbit routing-key)
This defers this type conversion
Resolves#2145
Appears to create problem in native images, but since we do not intend to support annotation-based programming model, we can just ignore this exception until we can remove this code all together.
. . . to ensure that any exceptions resulting from custom implementation of ApplicationLstener does not harm the application
There will now be a WARN message and the stacj trace under DEBUG, but the application will continue to function.
Resolves#2118
SubscribableChannelBindingTargetFactory now capable of dealing with channels that may have been created outside of the normal process. In other words if channel exists as bean it will only cofigure it
Resolves#2132