Chr*_*off 4 java json jackson tomee tomee-7
我使用TomEE 7.0.1和Jackson 2作为JAX-RS JSON提供程序(配置openejb-jar.xml).将json发布到jax-rs服务非常有效,并使用jackson注释.
但是使用JAX-RS客户端(或cxf webclient)总是使用Johnzon,即使我将Jackson提供给Webclient.create方法也是如此.经过一些调试后,我确信TomEE会以某种方式将Johnzon添加到客户端工厂,并且不能使用其他的json消息体解析器.
这是TomEE CXF集成的错误还是我错过了什么?
默认情况下,Johnzon在总线上注册,具有默认的JSON(映射)和JSON-P提供程序.CXF非常聪明,可以使总线提供程序的优先级低于应用程序的优先级(register()用于客户端API)所以如果你调用register,你希望使用jackson ......并且仍然使用johnzon - 我怀疑是你遇到的情况.
这是完全正常的,由于两件事:
总结一下(1)说更具体的是提供商更高的是它的优先级,所以"application/json"提供商将被支持" / "一个.
为了避免问题,Johnzon使用"application/json".然而,jackson使用自定义匹配策略,因此使用" / ".因此,总线优先级被忽略,因为mediatype优先级足以说johnzon比jackson更适应json.
为了解决这个问题最简单的可能重写杰克逊提供商(只是扩展它),并与装饰它@Provides/ @Consumes带MediaType.APPLICATION_JSON,而不是通配符之一.