【发布时间】:2018-08-07 15:31:52
【问题描述】:
我有以下配置
<dataFormats>
<json id="orderModel" library="Jackson" objectMapper="com.camel.CustomObjectMapper"
unmarshalTypeName="com.orders.OrderModel"/>
<json id="salesOrder" library="Jackson" objectMapper="com.camel.CustomObjectMapper"
unmarshalTypeName="com.camel.model.salesorder.SalesOrder"/>
</dataFormats>
<route id="orderTranslateToSalesOrder">
<from ref="orderPlaced"/>
<unmarshal ref="orderModel" />
<process ref="customerProcessor" />
<process ref="salesOrderConverter"/>
<marshal ref="salesOrder"/>
<inOnly ref="orderCreate" />
<process ref="history"/>
</route>
我从一个兔子队列 orderPlaced 中读取,然后将对象解组为 OrderModel,然后执行两个过程,其中第二个过程将主体对象类型从 OrderModel 更改为 SalesOrder,但是在编组消息时我收到错误
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“SalesOrder”(com.orders.OrderModel 类),未标记为可忽略 在 [来源:java.io.ByteArrayInputStream@4eac8add;行:1,列:16](通过引用链:com.orders.OrderModel["SalesOrder"]) 在 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:62) 在 com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:834) 在 com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1093) 在 com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1489) 在 com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1467) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:282) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140) 在 com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3814) 在 com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2924) 在 org.apache.camel.component.jackson.JacksonDataFormat.unmarshal(JacksonDataFormat.java:185) 在 org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:69) 在 org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:76) 在 org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) 在 org.apache.camel.processor.Pipeline.process(Pipeline.java:138) 在 org.apache.camel.processor.Pipeline.process(Pipeline.java:101) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) 在 org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97) 在 org.apache.camel.component.rabbitmq.RabbitConsumer.doHandleDelivery(RabbitConsumer.java:99) 在 org.apache.camel.component.rabbitmq.RabbitConsumer.handleDelivery(RabbitConsumer.java:74) 在 com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149) 在 com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:748) 抑制:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“SalesOrder”(com.orders.OrderModel 类),未标记为可忽略 在 [来源:java.io.ByteArrayInputStream@4a931757;行:1,列:16](通过引用链:com.orders.OrderModel["SalesOrder"]) ... 25 更多
虽然我指定 marshal 使用 salesOrder 数据格式,但最终由于某种原因它使用 orderModel 数据格式,但我无法确定原因。
这就是 SalesOrderConverter 最后所做的事情
exchange.getOut().setHeaders(exchange.getIn().getHeaders());
exchange.getOut().setBody(salesOrder, SalesOrder.class);
【问题讨论】:
标签: spring-boot apache-camel spring-dsl