У меня есть простой клиент karaf 4.1, jersey 2.22.1 и ECF 3.14.4, который получает объект Person.Объект Person - это POJO без аннотаций, только получатели / установщики для имени и фамилии.
private Person getPerson() {
final String resourceName = "/person";
log.info("invoking getPerson service");
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config)
.register(JacksonFeature.class);
WebTarget service = client.target( UriBuilder.fromUri(baseURI).build() );
// invoke GET
Response response = service
.path(serviceName)
.path(resourceName)
.request(MediaType.APPLICATION_JSON)
.get();
if (response.getStatus() != 200) {
throw new RuntimeException("error status: " + response.getStatus() + " returned from server. Response is: " + response);
}
Person person = response.readEntity(Person.class);
log.info("sucessful response from server: " + person);
System.out.println("success, received: " + person);
return person;
Я внедряю это в чистый контейнер Karaf следующим образом:
feature:install scr
feature:repo-add ecf
feature:install ecf-rs-distribution-jersey
bundle:install -s mvn:ca.dsct.test/simple-rest-common ** this has the person object
bundle:install -s mvn:ca.dsct.test/simple-rest ** server bundle - tested & working
bundle:install -s mvn:ca.dsct.test/simple-rest-client ** the client bundle
После установкиECF, вот пакеты для ecf, jersey и jackson
karaf@root(bundle)> list -t 0 -n -s | grep ecf
67 | Active | 80 | 3.9.3.v20181012-2016 | ECF Core API | org.eclipse.ecf
68 | Active | 80 | 1.3.0.v20180713-1805 | ECF OSGi Console Command Provider | org.eclipse.ecf.console
69 | Active | 80 | 5.0.300.v20180306-0211 | ECF Discovery API | org.eclipse.ecf.discovery
70 | Active | 80 | 3.9.1.v20180810-0833 | ECF Identity Core API | org.eclipse.ecf.identity
71 | Active | 80 | 2.1.200.v20180301-0016 | ECF Remote Service Admin (RSA) Basic Topology Manager | org.eclipse.ecf.osgi.services.distribution
72 | Active | 80 | 4.6.800.v20180518-0149 | ECF Remote Service Admin (RSA) Implementation | org.eclipse.ecf.osgi.services.remoteserviceadmin
73 | Active | 80 | 1.2.0.v20180713-1805 | ECF Remote Service Admin (RSA) Console | org.eclipse.ecf.osgi.services.remoteserviceadmin.console
74 | Active | 80 | 1.0.100.v20180301-0016 | ECF Remote Service Admin (RSA) Proxy | org.eclipse.ecf.osgi.services.remoteserviceadmin.proxy
75 | Active | 80 | 1.3.0.201810201256 | ECF Dist Provider - Jax RS Support | org.eclipse.ecf.provider.jaxrs
76 | Active | 80 | 1.3.0.201810201256 | ECF Dist Provider - Jax-RS Client Support | org.eclipse.ecf.provider.jaxrs.client
77 | Active | 80 | 1.5.2.201810201256 | ECF JaxRS Server Support | org.eclipse.ecf.provider.jaxrs.server
78 | Active | 80 | 1.3.0.201810201256 | ECF Jersey Remote Services Client | org.eclipse.ecf.provider.jersey.client
79 | Active | 80 | 1.4.0.201810201256 | ECF Dist Provider - Jersey Jax RS Server | org.eclipse.ecf.provider.jersey.server
80 | Active | 80 | 8.13.1.v20180801-1752 | ECF RemoteServices API | org.eclipse.ecf.remoteservice
81 | Active | 80 | 2.1.0.v20180409-2248 | ECF RemoteServices AsyncProxy API Java8 | org.eclipse.ecf.remoteservice.asyncproxy
82 | Active | 80 | 2.6.0.v20180404-2345 | ECF SharedObject API | org.eclipse.ecf.sharedobject
karaf@root(bundle)> list -t 0 -n -s | grep jersey
78 | Active | 80 | 1.3.0.201810201256 | ECF Jersey Remote Services Client | org.eclipse.ecf.provider.jersey.client
79 | Active | 80 | 1.4.0.201810201256 | ECF Dist Provider - Jersey Jax RS Server | org.eclipse.ecf.provider.jersey.server
110 | Active | 80 | 2.22.1.v20161103-1916 | jersey-repackaged-guava | org.glassfish.jersey.bundles.repackaged.jersey-guava
111 | Active | 80 | 2.22.1.v20161103-0227 | jersey-container-servlet-core | org.glassfish.jersey.containers.servlet.core
112 | Active | 80 | 2.22.1.v20161103-1916 | jersey-core-client | org.glassfish.jersey.core.jersey-client
113 | Active | 80 | 2.22.1.v20161103-1916 | jersey-core-common | org.glassfish.jersey.core.jersey-common
114 | Active | 80 | 2.22.1.v20161103-1916 | jersey-core-server | org.glassfish.jersey.core.jersey-server
115 | Active | 80 | 2.22.1.v20161103-0227 | jersey-ext-entity-filtering | org.glassfish.jersey.ext.entityfiltering
116 | Active | 80 | 2.22.1.v20161117-2005 | jersey-media-json-jackson | org.glassfish.jersey.media.jersey-media-json-jackson
karaf@root(bundle)> list -t 0 -n -s | grep jackson
46 | Active | 80 | 2.9.2.v20180207-1730 | Jackson-annotations | com.fasterxml.jackson.core.jackson-annotations
47 | Active | 80 | 2.9.2.v20180207-1730 | Jackson-core | com.fasterxml.jackson.core.jackson-core
48 | Active | 80 | 2.9.2.v20180207-1730 | jackson-databind | com.fasterxml.jackson.core.jackson-databind
49 | Active | 80 | 2.9.2.v20180207-1730 | Jackson-JAXRS-base | com.fasterxml.jackson.jaxrs.jackson-jaxrs-base
50 | Active | 80 | 2.9.2.v20180207-1730 | Jackson-JAXRS-JSON | com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider
116 | Active | 80 | 2.22.1.v20161117-2005 | jersey-media-json-jackson | org.glassfish.jersey.media.jersey-media-json-jackson
Когда клиентский пакет запускается, я получаю:
java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/jaxb/JaxbAnnotationIntrospector
at com.fasterxml.jackson.jaxrs.json.JsonMapperConfigurator._resolveIntrospector(JsonMapperConfigurator.java:109) ~[?:?]
at com.fasterxml.jackson.jaxrs.json.JsonMapperConfigurator._resolveIntrospectors(JsonMapperConfigurator.java:84) ~[?:?]
...
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector not found by com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider [50]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1639) ~[?:?]
Исключение возникает в моем клиенте при попытке де-сериализуйте объект Person:
Person person = response.readEntity(Person.class);
Теперь возникает вопрос.
Если я сделаю следующее, мой клиент будет работать:
- Выполните чистую установку ECF, как указано выше
Удалите комплект 50
50 | Active | 80 | 2.9.2.v20180207-1730 | Jackson-JAXRS-JSON
Установите следующее:
bundle:install -s mvn:com.fasterxml.jackson.module/jackson-module-jaxb-annotations/2.9.2
bundle:install -s mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/2.9.2
Затем установите мой клиент, , но он по-прежнему выдает исключение
bundle:install -s mvn:ca.dsct.test/simple-rest-client
Затем перезапустите контейнер Karaf. Клиент теперь работает !!
Может кто-нибудь объяснить, что происходит и что я должен делать, чтобы мне не пришлось вручную удалять Jackson-JAXRS-JSON-пакет, установите пакет аннотаций, переустановите JAXRS-JSON-пакет и перезапустите контейнер Karaf
Любая помощь приветствуется.