Джерси WadlAutoDiscoverable ошибка приведения из-за очевидного конфликта пути к классу? - PullRequest
0 голосов
/ 26 февраля 2019

у нас есть проект Kafka Connect, в котором мы используем библиотеку , которая извлекает данные из gitlab.Эта библиотека зависит от Джерси.Кафка также использует Джерси.При запуске нашего соединителя мы получаем ошибку приведения класса, которая, по-видимому, вызвана тем, что у джерси есть какой-то глобальный шаблон обнаружения, который конфликтует, когда оба значения server и client находятся в одном и том же пути к классам.

org.gitlab4j.api.GitLabApiException: org.glassfish.jersey.server.wadl.internal.WadlAutoDiscoverable cannot be cast to org.glassfish.jersey.internal.spi.AutoDiscoverable
        at org.gitlab4j.api.AbstractApi.handle(AbstractApi.java:615)
        at org.gitlab4j.api.AbstractApi.get(AbstractApi.java:193)
        at poc.connector.gitlab.api.ExtendedIssuesApi.getIssues(GitlabExtendedApi.scala:34)
        at poc.connector.gitlab.GitLabSourceTask.poll(GitLabSourceTask.scala:49)
        at org.apache.kafka.connect.runtime.WorkerSourceTask.poll(WorkerSourceTask.java:244)
        at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:220)
        at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:175)
        at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:219)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassCastException: org.glassfish.jersey.server.wadl.internal.WadlAutoDiscoverable cannot be cast to org.glassfish.jersey.internal.spi.AutoDiscoverable
        at java.util.TreeMap.compare(TreeMap.java:1295)
        at java.util.TreeMap.put(TreeMap.java:538)
        at java.util.TreeSet.add(TreeSet.java:255)
        at java.util.AbstractCollection.addAll(AbstractCollection.java:344)
        at java.util.TreeSet.addAll(TreeSet.java:312)
        at org.glassfish.jersey.model.internal.CommonConfig.configureAutoDiscoverableProviders(CommonConfig.java:599)
        at org.glassfish.jersey.client.ClientConfig$State.configureAutoDiscoverableProviders(ClientConfig.java:403)
        at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:450)
        at org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:341)
        at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:826)
        at org.glassfish.jersey.client.ClientRequest.getConfiguration(ClientRequest.java:285)
        at org.glassfish.jersey.client.JerseyInvocation.validateHttpMethodAndEntity(JerseyInvocation.java:143)
        at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:112)
        at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:108)
        at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:99)
        at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:419)
        at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:319)
        at org.gitlab4j.api.GitLabApiClient.get(GitLabApiClient.java:382)
        at org.gitlab4j.api.GitLabApiClient.get(GitLabApiClient.java:370)
        at org.gitlab4j.api.AbstractApi.get(AbstractApi.java:191)
        ... 11 more


$ #inside of the plugin path of kafka connect:
$ find ./ | grep jersey | grep server                                                                                                                                                 Di 26 Feb 2019 15:46:41 CET
./schema-registry/jersey-server-2.27.jar
./confluent-kafka-mqtt/jersey-server-2.27.jar
./kafka/jersey-server-2.27.jar
./rest-utils/jersey-server-2.27.jar

Как бы мы пошли о настройке нашего кода, чтобы избежать проблемы, что где-то в процессе нашего приложения подключения используется неправильный класс?Или как избежать ошибки приведения в контексте AutoDiscoverable реализаций?

1 Ответ

0 голосов
/ 22 мая 2019

У нас была похожая проблема в одном из наших коннекторов Kafka Connect, которую мы решили, заштриховав org.glassfish в нашем коннекторе.

Мы упаковываем наш коннектор как «Uber JAR» и помещаем его в путьконфигурируется с использованием параметра plugin.path.

См. также Confluent docs для Kafka Connect на эту тему.Там указано, что

... плагин никогда не должен содержать библиотек, предоставляемых средой выполнения Kafka Connect.

Вместо этого мы выбрали затенение, вы также можетебыть в состоянии решить эту проблему, не упаковывая Джерси в разъем.

...