gpt4 book ai didi

java - Apache Camel MultiCasting - InvalidPayloadException

转载 作者:行者123 更新时间:2023-11-30 02:57:03 25 4
gpt4 key购买 nike

我尝试将 Multi-Casting 企业集成模式 (EIP) 与 Apache Camel 结合使用,但遇到了很多运行时异常。我认为主要错误如下。如果有人可以帮我解决这个问题,我想我可能可以运行这个小程序。请参阅下面的错误和程序。

错误:引起:org.apache.camel.InvalidPayloadException:没有可用的类型:java.io.InputStream的主体,但具有类型:java.lang.Integer的值:100:消息:100。引起by:没有类型转换器可用于从类型:java.lang.Integer 转换为所需类型:值为 100 的 java.io.InputStream。Exchange[Message: 100]。原因:[org.apache.camel.NoTypeConversionAvailableException - 没有类型转换器可用于从类型:java.lang.Integer 转换为所需类型:值为 100 的 java.io.InputStream]

程序:

具有启动程序的 main 方法的 Java 类:

import org.apache.camel.CamelContext;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.ProducerTemplate;

public class MainMulti {

public static void main(String[] args) {
CamelContext c = new DefaultCamelContext();

try {
c.addRoutes(new MultiRoute());
c.start();
ProducerTemplate pro = c.createProducerTemplate();

pro.sendBody("direct:start", 100);
pro.sendBody("direct:start", 500);

Thread.sleep(5000);

c.stop();

} catch(Exception ex) {
System.out.println(ex);
ex.printStackTrace();
}


}

}

Java DSL 路线:

import org.apache.camel.builder.RouteBuilder;

public class MultiRoute extends RouteBuilder {

@Override
public void configure() throws Exception {

from("direct:start")
.multicast(new HighestAggregator())
.parallelProcessing()
.to("file:target/a", "file:target/b", "file:target/c")
.end()
.to("file:target/result");
}

}

聚合 Java bean:

import org.apache.camel.Exchange;
import org.apache.camel.processor.aggregate.AggregationStrategy;

public class HighestAggregator implements AggregationStrategy {


public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
if (oldExchange == null) {
return newExchange;
}

Integer currentQuote = oldExchange.getIn().getBody(Integer.class);
Integer newQuote = newExchange.getIn().getBody(Integer.class);
return currentQuote.compareTo(newQuote) > 0 ? oldExchange : newExchange;
}
}

最佳答案

您正在多播中写入文件,但传入的消息正文不属于受支持的类型。您将输入作为整数发送。并且不支持直接将单个整数写入文件。

因此,更改示例代码以将数据作为字符串发送,例如

pro.sendBody("direct:start", "100");
pro.sendBody("direct:start", "500");

关于java - Apache Camel MultiCasting - InvalidPayloadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36970413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com