2016-10-14 4 views
0

В Apache Camel Я предоставляю услугу REST, беру ее вход для вызова службы SOAP, а затем я хотел бы маршалировать ответ SOAP на JSON. Моя RouteBuilder выглядит примерно так:Apache camel не может маршалировать JSON от InputStreamCache

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) 
    ... 

Я знаю, почему это происходит, как я включил кэширование потока по умолчанию. Тем не менее, я не знаю, как исправить это без отключения потокового кэширования.

Я искал документацию Верблюда, списки рассылки и форумы, но я не нашел полезной информации о софаре.

ответ

0

Я, наконец, решил. Проблема не имеет ничего общего с описанными маршрутами, а глобальная конфигурация отдыха:

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

camelContext.setRestConfiguration(restConfiguration); 

третья линией, установив режим привязки, является излишним, поскольку я прямо заявить, когда я хотел бы, чтобы отобразить в формат JSON, а также которые рамки, которые я использую. После того, как я удаляю эту строку, все работает как шарм.

В данный момент я точно не знаю, как и почему это решило мою проблему, но я счастлив, что это сделал;)

 Смежные вопросы

  • Нет связанных вопросов^_^