我正在尝试更换标准的杰克逊,如下所述:http://camel.apache.org/json.html
我使用以下配置
<bean name="myJsonObjectMapper" class="com.my.app.MyJsonObjectMapper" primary="true"/>
<camel:camelContext id="camel-client">
<camel:template id="camelTemplate"/>
<camel:dataFormats>
<camel:json id="json" library="Jackson" objectMapper="myJsonObjectMapper"/>
</camel:dataFormats>
</camel:camelContext>
MyJsonObjectMapper扩展了ObjectMapper。我可以在Spring上下文中看到它,我可以自动装配并使用它。我看到Camel上下文已启动OK,我使用的是Camel版本2.20,其中启用并修复了此功能。但是,当我尝试解析JSON时,我得到了未经修改的ObjectMapper生成的异常。
调试时我发现JacksonDataFormat没有使用自定义的ObjectMapper进行初始化,而是在doStart()方法上创建了一个新的。
我在Camel配置中缺少什么?
UPD: 我通过以下方式之一在Camel REST DSL路由范围内使用该映射器:
restConfiguration().component("servlet").bindingMode(RestBindingMode.json);
rest("/somepath")
.description("blah")
.post("/subpath/")
.type(MyRQ.class)
.outType(MyRS.class)
.route().id("under-test")
.bean(service)
.endRest();
或
restConfiguration().component("servlet");
rest("/somepath")
.description("blah")
.post("/subpath/")
.route().id("under-test")
.unmarshal().json(JsonLibrary.Jackson)
.bean(service)
.marshal().json(JsonLibrary.Jackson)
.endRest();
在这两种情况下,由于使用了默认的marshaller而不是自定义编组器,我得到了编组错误。路径似乎是在正确的上下文的scpe中启动的,我正在配置ObjectMapper。