私は次の設定を持っています
<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 にアンマーシャリングしてから、2 つのプロセスを実行します。2 番目のプロセスでは、ボディ オブジェクト タイプが OrderModel から SalesOrder に変更されますが、メッセージをマーシャリングするとエラーが発生します。
[ソース: java.io.ByteArrayInputStream@4eac8add; 行: 1、列: 16] (参照チェーン経由: com.orders.OrderModel["SalesOrder"]) com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:62) at 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. com.fasterxml.jackson.databind.deser.BeanDeserializerBase の handleUnknownProperty(BeanDeserializerBase.java:1489)。ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at 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 以上 (クラス com.orders.OrderModel)、[ソース: java.io.ByteArrayInputStream@4a931757; で無視可能としてマークされていません。行: 1, 列: 16] (参照チェーン経由: com.orders.OrderModel["SalesOrder"]) ... 25 以上 (クラス com.orders.OrderModel)、[ソース: java.io.ByteArrayInputStream@4a931757; で無視可能としてマークされていません。行: 1, 列: 16] (参照チェーン経由: com.orders.OrderModel["SalesOrder"]) ... 25 以上
マーシャルにはsalesOrderのデータ形式を使うように指定しているのですが、最後になんらかのことをするときはorderModelのデータ形式を使っているのですが、その理由がわかりません。
これは、最後に SalesOrderConverter が行うことです
exchange.getOut().setHeaders(exchange.getIn().getHeaders());
exchange.getOut().setBody(salesOrder, SalesOrder.class);