【发布时间】:2017-03-10 15:22:41
【问题描述】:
我有一个简单的 REST 服务。有客户,我可以通过其 ID 获得客户。如果没有具有请求 ID 的客户端,则应返回 404 未找到。
以下是相关部分:
rest("/client")
.consumes("application/json").produces("application/json")
.get("{id}")
.to("direct:getClient");
from("direct:getClient")
.bean(clientService, "getClient(${header.id})")
.choice()
.when(simple("${body} == null"))
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(404));
可以找到客户端时一切正常,但是,当找不到客户端并且 clientService 返回 null 时,我得到以下堆栈跟踪:
org.apache.camel.RuntimeCamelException: java.io.IOException: Stream closed
at org.apache.camel.http.common.HttpMessage.createBody(HttpMessage.java:74)
at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:47)
at org.apache.camel.processor.CamelInternalProcessor$StreamCachingAdvice.after(CamelInternalProcessor.java:799)
at org.apache.camel.processor.CamelInternalProcessor$StreamCachingAdvice.after(CamelInternalProcessor.java:767)
at org.apache.camel.processor.CamelInternalProcessor$InternalCallback.done(CamelInternalProcessor.java:246)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:573)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:120)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:120)
我想不出来这个。从 bean 方法调用返回 null 应该是可能的,对吧?
【问题讨论】:
-
您使用什么 Camel 版本?你使用什么 Camel 组件和 rest-dsl 作为 HTTP ?
-
2.18.0 和camel-servlet
-
好的... 2.18.0 中似乎有一个错误。我降级到 2.17.3,它工作正常。这是一个严重的问题,我会创建一个测试并报告它。
-
我发现了错误并记录了一张票:issues.apache.org/jira/browse/CAMEL-10425
-
啊,谢谢!我打算今天这样做:)
标签: java rest exception apache-camel http-status-code-404