Apache camel无法从InputStreamCache封送到JSON

时间:2016-10-14 13:45:26

标签: java json jackson apache-camel marshalling

在Apache Camel中,我公开了一个REST服务,接受其输入来调用SOAP服务,然后我想将SOAP响应编组为JSON。我的RouteBuilder看起来大致如下:

rest("/api")
 .get("/client/{id}")
 .to("direct:getClient");

from("direct:getClient")
 .log(LoggingLevel.INFO, "Getting client with id ${id}")
 .process(new GetClientProcessor())
 .marshal().jaxb()
 .to("spring-ws:http://localhost:9000/searchClient?soapAction=search")
 .process(new ClientProcessor())
 .marshal().json(JsonLibrary.Jackson);

在将结果编组到JSON时出现以下错误:

com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.apache.camel.converter.stream.InputStreamCache and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:275)
    at com.fasterxml.jackson.databind.SerializerProvider.mappingException(SerializerProvider.java:1110)
    at com.fasterxml.jackson.databind.SerializerProvider.reportMappingProblem(SerializerProvider.java:1135)
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:69)
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:32)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:292)
    ...

我知道为什么会这样,因为我默认启用了流缓存。但是,我不知道如何修复此而不关闭流缓存。

我搜索了Camel文档,邮件列表和论坛,但我还没有找到有用的信息。

1 个答案:

答案 0 :(得分:0)

我终于解决了它。问题与描述的路线无关,而与全局休息配置无关:

RestConfiguration restConfiguration = new RestConfiguration();
restConfiguration.setComponent("servlet");
restConfiguration.setBindingMode(RestConfiguration.RestBindingMode.json);
restConfiguration.setHost("localhost");
restConfiguration.setPort(serverPort);

camelContext.setRestConfiguration(restConfiguration);

设置绑定模式的第三行是不必要的,因为当我想要映射到JSON以及我使用的框架时,我明确说明了。删除此行后,所有内容都像魅力一样。

此刻我并不确切知道这是如何或为何解决了我的问题,但我很高兴它确实如此;)