Java 奇怪的apachecamel异常

Java 奇怪的apachecamel异常,java,arraylist,apache-camel,Java,Arraylist,Apache Camel,我试图从jetty端点(另一个服务)获取JSON数据,创建输出数据并将它们发送到一个或多个CVS文件。我有两个路由-第一个路由基于cron设置为当前日期创建文件,第二个路由公开jetty端点,以便在GET请求时为任何指定日期创建文件。除了起点外,它们完全相同,我还尝试将消息从第二个端点发送到第一个端点。。。在这两种情况下,都会创建CSV文件,但第二个路由会给我org.apache.camel.TypeConversionException。我的路线是: from(httpServer + "/l

我试图从jetty端点(另一个服务)获取JSON数据,创建输出数据并将它们发送到一个或多个CVS文件。我有两个路由-第一个路由基于cron设置为当前日期创建文件,第二个路由公开jetty端点,以便在GET请求时为任何指定日期创建文件。除了起点外,它们完全相同,我还尝试将消息从第二个端点发送到第一个端点。。。在这两种情况下,都会创建CSV文件,但第二个路由会给我org.apache.camel.TypeConversionException。我的路线是:

from(httpServer + "/lineups?throwExceptionOnFailure=false?httpMethodRestrict=GET")
.routeId("manualStart")
.setExchangePattern(ExchangePattern.InOnly)
.setHeader(Exchange.HTTP_URI, simple(apiEndpoint + "/lineups"))
.setHeader("target_date", simple("${in.header.date}"))
.setHeader(Exchange.HTTP_QUERY, simple("date=${in.header.date}"))
.setHeader(Exchange.HTTP_METHOD, constant("GET"))
.to("https://dummyhost")
.process(new MappingProcessor())
.split(body())
.setHeader("prefix", simple("${body.name}"))
.process(new FileNameProcessor())
.marshal(bindy)
.aggregate(header("prefix"), new FileAggregationStrategy())
.completionTimeout(60000L)
.to("file:" + fileLocation + "?fileName=Nielsen.${in.header.prefix}.${in.header.target_date}.txt");
我得到以下例外:

16:41:50.493 [qtp1583020257-49] ERROR o.a.c.c.j.CamelContinuationServlet - Error processing request
org.apache.camel.TypeConversionException: Error during type conversion from type: java.lang.String to the required type: java.io.InputStream with value 
[com...beans.MyOutput@7c9c5406, com...beans.MyOutput@6e3e3511, com.... [Body clipped after 1000 chars, total length is 23865] due Failed to convert from type [java.util.ArrayList<?>] to type [java.io.InputStream] for value ...
...
com....beans.MyOutput@6f0c8349]'; 

nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.util.ArrayList<?>] to type [java.io.InputStream]
    at org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:610)
    at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:137)
    at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:72)
    at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:47)
    at org.apache.camel.http.common.DefaultHttpBinding.doWriteDirectResponse(DefaultHttpBinding.java:396)
    at org.apache.camel.http.common.DefaultHttpBinding.doWriteResponse(DefaultHttpBinding.java:332)
    at org.apache.camel.http.common.DefaultHttpBinding.writeResponse(DefaultHttpBinding.java:264)
    at org.apache.camel.component.jetty.CamelContinuationServlet.service(CamelContinuationServlet.java:227)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1685)
    at org.apache.camel.component.jetty.CamelFilterWrapper.doFilter(CamelFilterWrapper.java:45)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1158)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1090)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
    at org.eclipse.jetty.server.Server.handleAsync(Server.java:567)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:325)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.util.ArrayList<?>] to type [java.io.InputStream] for value
这是FileAggregationStrategy:

public class FileAggregationStrategy implements AggregationStrategy {
  @Override
  public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
    if (oldExchange == null) {
       return newExchange;
  }
    String oldBody = oldExchange.getIn().getBody(String.class);
    String newBody = newExchange.getIn().getBody(String.class);
    String body = oldBody + newBody;
    oldExchange.getIn().setBody(body);
    return oldExchange;
  }
}
我尝试在每个步骤之后添加.log(),我看到异常被抛出到.aggregate上

有什么不对劲吗?另一条路线是从

from("quartz://start/api_cron/?cron=" + cronExpression + "&fireNow=true")

正常工作。

它是试图从X转换为InputStream的HTTP响应。您需要设置一些要返回的响应,可以是空值,也可以是要返回到HTTP客户机的响应

即使您将MEP设置为InOnly,Jetty也会返回响应。如果要独立于Jetty路由处理和聚合消息,可以使用wireTap

类似于

from jetty
  wiretap direct:foo
  transform constant "ok"

from direct:foo
  // put in all that stuff from your route here

它是试图从X转换为InputStream的HTTP响应。您需要设置一些要返回的响应,可以是空值,也可以是要返回到HTTP客户机的响应

即使您将MEP设置为InOnly,Jetty也会返回响应。如果要独立于Jetty路由处理和聚合消息,可以使用wireTap

类似于

from jetty
  wiretap direct:foo
  transform constant "ok"

from direct:foo
  // put in all that stuff from your route here

我发现CamelContinuationServlet是Jetty组件的一部分,它“利用Jetty Continuations”。我尝试使用端点uri中的useContinuation=false选项关闭jetty continuations,但仍然收到异常……我发现CamelContinuationServlet是jetty组件的一部分,它“利用jetty continuations”。我试图使用端点uri中的useContinuation=false选项关闭jetty continuations,但仍然收到异常。。。