2016-01-22 4 views
1

Я пытаюсь настроить клиент REST на основе трикотажа 2. Этот клиентский код должен запускаться на сервере Jetty 9 (автономный, а не встраиваемый) и должен извлекать/потреблять данные из другой службы , Мой очень простой первый тестовый звонок выглядит следующим образом:Jersey client: hk2 UnsatisfiedDependencyException

ClientBuilder.newClient().target("https://10.224.1.206:8443/axis/services/EndSystemWebService").path("getAll").request().get(String.class) 

Этот вызов не выполняется со следующей ошибкой:

Exception in thread "MyApp" MultiException stack 1 of 1 org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=ServiceLocator,parent=JaxbAutoDiscoverable,qualifiers={},position=-1,optional=false,self=false,unqualified=null,186516043) at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:75) at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:945) at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLocatorImpl.java:980) at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1055) at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1046) at org.glassfish.jersey.model.internal.CommonConfig.configureAutoDiscoverableProviders(CommonConfig.java:608) at org.glassfish.jersey.client.ClientConfig$State.configureAutoDiscoverableProviders(ClientConfig.java:364) at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:399) at org.glassfish.jersey.client.ClientConfig$State.access$000(ClientConfig.java:90) at org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:122) at org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:119) at org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:340) at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:733) at org.glassfish.jersey.client.ClientRequest.getConfiguration(ClientRequest.java:285) at org.glassfish.jersey.client.JerseyInvocation.validateHttpMethodAndEntity(JerseyInvocation.java:135) at org.glassfish.jersey.client.JerseyInvocation.(JerseyInvocation.java:105) at org.glassfish.jersey.client.JerseyInvocation.(JerseyInvocation.java:101) at org.glassfish.jersey.client.JerseyInvocation.(JerseyInvocation.java:92) at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:420) at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:316)

Я не устанавливая мою среду с помощью Maven - делать это вручную. Так что, возможно, что-то не так с библиотеками, которые я использую. Вот они:

enter image description here

Это слишком много сейчас, но я продолжал добавлять их, как я надеялся, что этот вопрос будет просто из-за отсутствующего кувшина. Это не так.

Любая помощь очень ценится. Спасибо

+1

** 1. ** Ошибка не совпадает с изображением предоставленных вами банок. Там ошибка говорит, что ServiceLocator не может быть введен в JaxbAutoDiscoverable. На вашем изображении даже не отображается jersey-media-jaxb jar, где находится этот класс. ** 2. ** Ваши версии jar не совпадают с версиями, которые входят в дистрибутив, поэтому я не знаю, где вы получаете их. В частности, версия HK2, которая в дистрибутиве Джерси 2.22.1, должна быть 2.4.0-b031 –

+1

** 3. ** Попробуйте загрузить фактический [дистрибутив (ri-bundle)] (https://jersey.java. net/download.html), и если вам нужен только клиент, посмотрите на [этот пост] (http://stackoverflow.com/a/34793820/2587435) за минимальные необходимые баночки. –

+0

Спасибо за помощь! Я удалил все jersey-related jars, загрузил официальный пакет, на который вы указали меня, и использовал их вместо этого. Работает сейчас! – Kurt

ответ

2

Благодаря комментариям от peeskillet я загрузил комплект из jersey, удалив все банки, которые я ранее добавил в свой проект, добавил необходимые банки из комплекта (чтобы избежать несовместимости), и ошибка исчезла. Еще раз спасибо!