java RestEasyClientBuild寄存器ResteasyJackson2Provider警告重复
我使用org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder
以以下方式构建REST客户机:
ResteasyClient client = (new ResteasyClientBuilder())
.maxPooledPerRoute(5)
.connectionPoolSize(10)
.socketTimeout(10L, TimeUnit.SECONDS)
.register(jacksonProvider)
.register(new RestClientLogger())
.register(new RestClientMDCFilter())
.build();
在那里注册的jacksonProvider
有一个ResteasyJackson2Provider jacksonProvider = new ResteasyJackson2Provider();
,它附带一个对反序列化非常重要的自定义ObjectMapper
。到目前为止,问题是,我在JBoss中得到了以下警告:
10:31:38,414 WARN [org.jboss.resteasy.resteasy_jaxrs.i18n] (default-threads - 1) RESTEASY002155: Provider class org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider is already registered. 2nd registration is being ignored.
如果我在以前已经注册过同一类的实例的情况下检查文档,这是有意义的。我使用反编译器来检查ResteasyClientBuilder
正在做什么,并且能够看到,它扫描类路径,寻找包含描述应该注册哪些“内置”提供程序的资源的JAR
jboss提供的一个实现现在显然已经定义了一个在那里注册的ResteasyJackson2Provider
,这使得我以后无法注册自己的实例
我的选择是什么?我需要将我的ResteasyJackson2Provider
版本或者至少是ObjectMapper
版本放入客户端。我能用什么方法替换现有的吗
# 1 楼答案
我也有同样的问题,但我不想删除
resteasy-jackson2-provider
依赖项,因为我们为系统的其他部分显式地添加了该依赖项(使用undertow,而不是full AS)事实证明,您只需扩展
org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider
而无需添加/重写任何内容,这样您就可以使用比从类路径(注册时没有优先级)获取的默认org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider
更高的优先级来注册它。通过这种方式,您可以确保您的ResteasyJackson2Provider
将被选中,而不是通过类路径扫描选择的扩展到“自定义”
ResteasyJackson2Provider
:使用自定义的ObjectMapper将其插入ResteasyClientBuilder:
希望这有帮助
# 2 楼答案
如果您想使用自己打包的“resteasy-jackson2-provider”jar,那么您可以通过使用JBoss部署结构排除以下依赖项来跳过加载我的JBoss提供的resteasy提供程序。xml