在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文档,邮件列表和论坛,但我还没有找到有用的信息。
答案 0 :(得分:0)
我终于解决了它。问题与描述的路线无关,而与全局休息配置无关:
RestConfiguration restConfiguration = new RestConfiguration();
restConfiguration.setComponent("servlet");
restConfiguration.setBindingMode(RestConfiguration.RestBindingMode.json);
restConfiguration.setHost("localhost");
restConfiguration.setPort(serverPort);
camelContext.setRestConfiguration(restConfiguration);
设置绑定模式的第三行是不必要的,因为当我想要映射到JSON以及我使用的框架时,我明确说明了。删除此行后,所有内容都像魅力一样。
此刻我并不确切知道这是如何或为何解决了我的问题,但我很高兴它确实如此;)