由于明显的类路径冲突而导致可忽略的强制转换错误?

sgtfey8w  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(456)

我们有一个kafka connect项目,我们依赖于一个从gitlab获取数据的库。这个图书馆依赖于泽西岛。Kafka也使用球衣。在启动连接器时,我们收到一个类强制转换错误,该错误似乎是由jersey具有某种全局发现模式引起的,当两者都发生冲突时 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

我们如何配置代码以避免在connect应用程序的过程中使用错误的类的问题?或者我们如何避免在 AutoDiscoverable 实现?

pvabu6sv

pvabu6sv1#

我们有一个类似的问题,在我们的Kafka连接连接器,我们解决了阴影 org.glassfish 在我们的连接器里。
我们将连接器打包为“uberjar”,并将其放置在使用 plugin.path 设置。
另请参阅Kafka连接有关此主题的合流文档。据说
... 插件不应该包含kafka connect运行时提供的任何库。
我们选择了阴影代替,你也可以解决这个问题,不 Package 泽西在你的连接器。

相关问题