2015-01-27 4 views
3

Я работаю над проектом, который использует различные клиентские приложения в качестве зависимостей maven для общения с различными API REST.Возможно ли проект с зависимостями Джерси 2.x и RESTEasy?

Но есть проблема при включении клиента, который реализован с использованием Jersey 2.x и любого другого клиента, который использует RESTEasy.

Как только я добавить зависимость, которая использует Resteasy я получаю ошибки, как это:

Вызванный: javax.ws.rs.ProcessingException: Не удалось найти MessageBodyReader от типа контента применение/JSON и тип класса de.fhg.ipa.vfk.docker.dockerregistry.restclient.entity.SearchResult на org.jboss.resteasy.core.interception.ClientReaderInterceptorContext.throwReaderNotFound (ClientReaderInterceptorContext.java:39) в org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.getReader (AbstractReade rInterceptorContext.java:73) на org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed (AbstractReaderInterceptorContext.java:50) на org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom (ClientResponse. Java: 245) на org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readEntity (ClientResponse.java:179) на org.jboss.resteasy.specimpl.BuiltResponse.readEntity (BuiltResponse.java:211) на org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult (ClientInvocation.java:104) ... подробнее 4

или это:

Вызванный: javax.ws.rs.ProcessingException: не удалось найти писателя для типа содержимого приложения/типа смолы: java.io.FileInputStream в org.jboss.resteasy. core.interception.ClientWriterInterceptorContext.throwWriterNotFoundException (ClientWriterInterceptorContext.java:40) на org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.getWriter (AbstractWriterInterceptorContext.java:138) на org.jboss.resteasy.core.interception. AbstractWriterInterceptorContext.proceed (AbstractWriterInterceptorContext.java:117) на org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.writeRequestBody (ClientInvocation.java:341) на org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.writeRequestBodyToOutputStream (ApacheHttpClient4Engine.java:558) на org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.buildEntity (ApacheHttpClient4Engine.java:524) на org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.loadHttpMethod (ApacheHttpClient4Engine.java:423) на org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke (ApacheHttpClient4Engine.java:281) ... 7 более

Возможно ли использовать обе библиотеки или настроить maven так или иначе, чтобы приложение не пыталось использовать зависимости RESTEasy вместо Jersey 2.x и наоборот?

Благодаря

Daniel

ответ

4

Вы могли бы попытаться использовать профили Maven, чтобы активировать либо Джерси или Resteasy, но вы не можете иметь две реализации JAX-RS в одной и те же плоских классах одновременно.

Если вам нужно использовать обе реализации одновременно в одном приложении, вам потребуется изолятор загрузчика классов, предоставляемый модульной системой, такой как OSGi или JBoss Modules.

Лучший способ пойти может быть реорганизовывать код, чтобы использовать только JAX-RS клиента 2,0 API и довольствоваться либо Джерси или Resteasy для случаев угловых, которые требуют реализации конкретных API.

+0

Совершенно правильный ответ. Дает причину, обходной путь и предпочтительный способ решения проблемы. Я хотел бы видеть больше таких ответов на SO. –

Смежные вопросы