Yan*_*ann 5 java jboss jax-rs resteasy
我使用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();
Run Code Online (Sandbox Code Playgroud)
在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.
Run Code Online (Sandbox Code Playgroud)
如果在已经存在之前已注册的同一类的实例的情况下检查文档,这是有意义的.我使用反编译器来检查ResteasyClientBuilder正在做什么并且能够看到,它扫描类路径以查找包含描述应该注册"内置"提供程序的资源的jar.
其中一个jboss提供的实现现在显然已经定义了一个ResteasyJackson2Provider在那里注册的实现,这使我以后无法注册我自己的实例.
我有什么选择?我需要得到我的版本ResteasyJackson2Provider- 或者至少是我的版本ObjectMapper.我可以以某种方式取代现有的吗?
小智 10
我有同样的问题,但我不想删除resteasy-jackson2-provider依赖项,因为我们明确地为系统的其他部分添加了依赖项(使用了underow,而不是完整的AS).
事实证明,您可以在org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder不添加/覆盖任何内容的情况下扩展它,以便您可以以比org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder从类路径(没有优先级注册)中获取的更高优先级注册它.通过这种方式,您可以确保选择jackson2provider而不是通过类路径扫描获取的jackson2provider.
扩展到"自定义"jackson2提供者:
public class CustomResteasyJackson2Provider extends ResteasyJackson2Provider {
}
Run Code Online (Sandbox Code Playgroud)
使用您自定义的ObjectMapper将其插入ResteasyClientBuilder:
ObjectMapper objectMapper = new ObjectMapper();
// customize your objectMapper here...
CustomResteasyJackson2Provider jacksonProvider = new CustomResteasyJackson2Provider();
jacksonProvider.setMapper(objectMapper); // add objectMapper to provider
// register provider to client
ResteasyClient client = new ResteasyClientBuilder()
.register(jacksonProvider, 100) // any priority over 0 will do
.build();
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.