SpelEvaluationException:EL1004E:(pos 8):方法调用:无法找到方法转换(byte [])

时间:2016-12-31 10:46:40

标签: spring-integration

我正在尝试创建一个简单的spring-integration应用程序,它可以提取http数据并将它们转发到两个队列。 在其中一个队列中(暂时忽略另一个)我想丰富数据,然后将它们转发给AMQP 端点。

我的问题是以下异常:

  

MessagingTemplate $ TemporaryReplyChannel:收到回复邮件但是   接收线程在发送时由于异常而退出   请求消息:ErrorMessage   [有效载荷= org.springframework.messaging.MessageHandlingException:   嵌套异常是   org.springframework.expression.spel.SpelEvaluationException:   EL1004E:(pos 8):方法调用:方法转换(byte [])不能   在com.EnrichmentService类型

上找到

我很确定摄取的数据是以某种方式序列化的 我的浓缩服务,即用于DTO(我的例子中的数据),无法理解。 我尝试在DTO上实现Serializable。

我的问题是,如何调试流经我频道的类型?

我的代码看起来像这样:

@Bean
public StandardIntegrationFlow ingestRaw() {

    return IntegrationFlows.from(httpIngest())
            .headerFilter("accept-charset", "http_requestMethod")
            .publishSubscribeChannel(Executors.newCachedThreadPool(),
                    input -> input
                            .subscribe(enrichmentFlow()))
                            .subscribe(anotherFlow()))
            .get();
}

@Bean
public IntegrationFlow enrichmentFlow(){

    return flow -> flow.enrich(e -> e
            .requestChannel(enrichmentRequestChannel())
            .replyChannel(enrichmentReplyChannel())
            .requestPayload(Message::getPayload))
            .transform(Transformers.fromJson(Data.class))
            .handle(Data.class, (payload, headers) -> enrichmentService.transform(payload))
            .handle(amqpOutboundFlow());
}


@Bean
public HttpRequestHandlingMessagingGateway httpIngest() {
    return Http.inboundGateway(SINK_ENDPOINT_PATH).get();
}


@Bean("enrichmentRequestChannel")
public DirectChannel enrichmentRequestChannel(){
    return MessageChannels.direct().get();
}

@Bean("enrichmentReplyChannel")
public DirectChannel enrichmentReplyChannel(){
    return MessageChannels.direct().get();
}


@Bean
public AmqpOutboundEndpoint amqpOutboundFlow() {
    return Amqp.outboundAdapter(this.amqpTemplate).routingKeyExpression("enrichOut.enrichedGroup").get();
}

1 个答案:

答案 0 :(得分:0)

我犯了一个错误并且忘记取消之前使用的绑定,因此TransformationService以两种方式绑定(至少看起来如此)。

 @ServiceActivator(inputChannel = "enrichmentRequestChannel", outputChannel = "enrichmentReplyChannel")
 public EnrichedData transform(Data data) {