Java 为什么在默认Spring云流配置中更改Spring集成消息方法处理行为
Java 为什么在默认Spring云流配置中更改Spring集成消息方法处理行为,java,spring-integration,spring-cloud-stream,spring-integration-dsl,Java,Spring Integration,Spring Cloud Stream,Spring Integration Dsl,我有一个已经使用Spring集成(最新版本5.1.6)的应用程序。以及类似以下配置的流:
@Configuration
public class SomeConfigClass {
...
@MessagingGateway(name = "someGateway")
interface Gateway {
@Gateway(requestChannel = "inboundChannel")
@Payload("T(java.time.Zoned
我有一个已经使用Spring集成(最新版本5.1.6)的应用程序。以及类似以下配置的流:
@Configuration
public class SomeConfigClass {
...
@MessagingGateway(name = "someGateway")
interface Gateway {
@Gateway(requestChannel = "inboundChannel")
@Payload("T(java.time.ZonedDateTime).now()")
void replicate();
}
@Bean
public DirectChannel inboundChannel() {
return MessageChannels.direct().get();
}
@Bean
public IntegrationFlow someFlow() {
return IntegrationFlows.from(inboundChannel())
.handle(someHandler())
.channel(OUT)
.get();
}
@Bean
public SomeHandler someHandler() {
return new SomeHandler();
}
}
及
公共类SomeHandler实现GenericHandler{
@凌驾
公共消息句柄(最终对象有效负载,
最终消息头){
...
返回消息生成器
.withPayload(someList)
.CopyHeader(标题)
.setHeader(“自定义”,customHeader)
.build();
}
}
一切正常
如果我试图在初始化的上下文中找到integrationArgumentResolverMessageConverter
bean,我会看到下一个转换器:
MappingJackson2MessageConverter
ByteArrayMessageConverter
ObjectStringMessageConverter
GenericMessageConverter
之后,我添加到我的pom依赖项SpringCloudStream2.1.2依赖项和KinesisBinder 1.2.0。默认情况下配置绑定
应用程序启动,但当我尝试处理现有流时失败,原因如下:
EL1004E:方法调用:在org.springframework.expression.spel.ast.MethodReference.FindAccessorFormMethod(MethodReference.java:225)的p.a.c.k.a.g.e.SomeHandler类型上找不到方法句柄(java.time.ZonedDateTime,org.springframework.messaging.MessageHeaders)
位于org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:134)
位于org.springframework.expression.spel.ast.MethodReference.access$000(MethodReference.java:54)
位于org.springframework.expression.spel.ast.MethodReference$MethodValueRef.getValue(MethodReference.java:390)
位于org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:90)
位于org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:114)
位于org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:365)
位于org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:172)
位于org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:160)
位于org.springframework.integration.handler.support.MessaginMethodInvokerHelper.InvokeeExpression(MessaginMethodInvokerHelper.java:664)
位于org.springframework.integration.handler.support.MessaginMethodInvokerHelper.invokeHandlerMethod(MessaginMethodInvokerHelper.java:655)
位于org.springframework.integration.handler.support.MessaginMethodInvokerHelper.processInternal(MessaginMethodInvokerHelper.java:491)
位于org.springframework.integration.handler.support.MessaginMethodInvokerHelper.process(MessaginMethodInvokerHelper.java:362)
位于org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:106)
位于org.springframework.integration.handler.ServiceActivationHandler.HandlerRequestMessage(ServiceActivationHandler.java:93)
位于org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:123)
位于org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:169)
位于org.springframework.integration.dispatcher.AbstractDispatcher.tryoOptimizedDispatch(AbstractDispatcher.java:115)
位于org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:132)
位于org.springframework.integration.dispatcher.UnicastingDispatcher.dispatcher(UnicastingDispatcher.java:105)
位于org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:73)
位于org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:453)
位于org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:401)
位于org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:187)
位于org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:166)
位于org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:47)
位于org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:109)
位于org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:151)
位于org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:143)
位于org.springframework.integration.gateway.MessagingGatewaySupport.send(MessagingGatewaySupport.java:413)
位于org.springframework.integration.gateway.GatewayProxyFactoryBean.invokeGatewayMethod(GatewayProxyFactoryBean.java:533)
位于org.springframework.integration.gateway.GatewayProxyFactoryBean.doInvoke(GatewayProxyFactoryBean.java:473)
位于org.springframework.integration.gateway.GatewayProxyFactoryBean.invoke(GatewayProxyFactoryBean.java:463)
位于org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:186)
位于org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
位于com.sun.proxy.$Proxy444.replicate(未知源)
当我试图从初始化的上下文中获取相同的integrationArgumentResolverMessageConverter
bean时,我看到了下一个链:
ApplicationJsonMessageMarshallingConverter
TupleJsonMessageConverter
ByteArrayMessa
public class SomeHandler implements GenericHandler<Object> {
@Override
public Message<List<String>> handle(final Object payload,
final MessageHeaders headers) {
...
return MessageBuilder
.withPayload(someList)
.copyHeaders(headers)
.setHeader("custom", customHeader)
.build();
}
}
org.springframework.messaging.converter.MessageConversionException: Could not read JSON: Unexpected character ('-' (code 45)): Expected space separating root-level values
at [Source: (String)"2019-09-04T01:26:20.202Z[UTC]"; line: 1, column: 6]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('-' (code 45)): Expected space separating root-level values
at [Source: (String)"2019-09-04T01:26:20.202Z[UTC]"; line: 1, column: 6], failedMessage=GenericMessage [payload=2019-09-04T01:26:20.202Z[UTC], headers={spanTraceId=3f87b9afc373308a, spanId=3f87b9afc373308a, nativeHeaders={spanTraceId=[3f87b9afc373308a], spanId=[3f87b9afc373308a], spanSampled=[1]}, X-B3-SpanId=3f87b9afc373308a, X-B3-Sampled=1, X-B3-TraceId=3f87b9afc373308a, id=3fbe87e3-31c4-4d21-c3fb-506c018c0e25, spanSampled=1, timestamp=1567560380202}]