Camel忽略了自定义的Jackson ObjectMapper

时间:2018-01-19 16:41:53

标签: json apache-camel

我正在尝试更换标准的杰克逊,如下所述: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。

0 个答案:

没有答案