Jersey 无法注册多部件功能

Jersey 无法注册多部件功能,jersey,jersey-client,Jersey,Jersey Client,我正在尝试为我的Jersey REST应用程序创建一个测试用例 我已经在pom.xml中添加了: <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> <version>2.25</version> </dependency&

我正在尝试为我的Jersey REST应用程序创建一个测试用例

我已经在
pom.xml
中添加了:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.25</version>
</dependency>
但是,这在
寄存器(MultiPartFeature.class)
上的
实例化异常中失败。以下是完整的堆栈跟踪:

java.lang.RuntimeException: java.lang.InstantiationException: org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide

    at __randomizedtesting.SeedInfo.seed([8269888A1B7E6430]:0)
    at org.apache.cxf.jaxrs.impl.ConfigurationImpl.createProvider(ConfigurationImpl.java:199)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:102)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:97)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl$FeatureContextImpl.register(ConfigurableImpl.java:139)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl$FeatureContextImpl.register(ConfigurableImpl.java:120)
    at org.glassfish.jersey.media.multipart.MultiPartFeature.configure(MultiPartFeature.java:67)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:86)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.doRegister(ConfigurableImpl.java:117)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:102)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:97)
    at org.apache.cxf.jaxrs.client.spec.ClientBuilderImpl.register(ClientBuilderImpl.java:56)
    at org.apache.cxf.jaxrs.client.spec.ClientBuilderImpl.register(ClientBuilderImpl.java:35)
    at fr.pilato.elasticsearch.crawler.fs.test.integration.AbstractRestITCase.startRestClient(AbstractRestITCase.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.carrotsearch.randomizedtesting.RandomizedRunner.invoke(RandomizedRunner.java:1764)
    at com.carrotsearch.randomizedtesting.RandomizedRunner$6.evaluate(RandomizedRunner.java:811)
    at com.carrotsearch.randomizedtesting.RandomizedRunner$7.evaluate(RandomizedRunner.java:827)
    at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
    at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
    at com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:367)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.InstantiationException: org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide
    at java.lang.Class.newInstance(Class.java:427)
    at org.apache.cxf.jaxrs.impl.ConfigurationImpl.createProvider(ConfigurationImpl.java:197)
    ... 23 more
Caused by: java.lang.NoSuchMethodException: org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.newInstance(Class.java:412)
    ... 24 more
java.lang.RuntimeException:java.lang.InstanceionException:org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide
在uu randomizedtesting.SeedInfo.seed([8269888A1B7E6430]:0)
位于org.apache.cxf.jaxrs.impl.configurationmpl.createProvider(configurationmpl.java:199)
位于org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:102)
位于org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:97)
位于org.apache.cxf.jaxrs.impl.ConfigurableImpl$FeatureContextImpl.register(ConfigurableImpl.java:139)
位于org.apache.cxf.jaxrs.impl.ConfigurableImpl$FeatureContextImpl.register(ConfigurableImpl.java:120)
位于org.glassfish.jersey.media.multipart.MultiPartFeature.configure(MultiPartFeature.java:67)
位于org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:86)
位于org.apache.cxf.jaxrs.impl.ConfigurableImpl.doRegister(ConfigurableImpl.java:117)
位于org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:102)
位于org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:97)
在org.apache.cxf.jaxrs.client.spec.ClientBuilderImpl.register(ClientBuilderImpl.java:56)上
在org.apache.cxf.jaxrs.client.spec.ClientBuilderImpl.register(ClientBuilderImpl.java:35)上
位于fr.pilato.elasticsearch.crawler.fs.test.integration.AbstractRestITCase.startRestClient(AbstractRestITCase.java:54)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于com.carrotsearch.randomizedtesting.RandomizedRunner.invoke(RandomizedRunner.java:1764)
在com.carrotsearch.randomizedtesting.RandomizedRunner$6.evaluate上(RandomizedRunner.java:811)
在com.carrotsearch.randomizedtesting.RandomizedRunner$7.evaluate上(RandomizedRunner.java:827)
位于org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
位于com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
在com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:367)上
运行(Thread.java:745)
原因:java.lang.InstantiationException:org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide
位于java.lang.Class.newInstance(Class.java:427)
位于org.apache.cxf.jaxrs.impl.configurationmpl.createProvider(configurationmpl.java:197)
... 23多
原因:java.lang.NoSuchMethodException:org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.()
位于java.lang.Class.getConstructor0(Class.java:3082)
在java.lang.Class.newInstance(Class.java:412)
... 还有24个
我不明白我错过了什么。我跟着,但我可能错过了什么。 当我删除行
.register(MultiPartFeature.class)
时,我能够使用我的客户机正常运行REST测试


有什么想法吗?

这个问题是由我的项目中的另一个依赖项引起的:
org.apache.tika:tika-langdetect:1.14
。tika langdetect将apache CXF添加到类路径中,这似乎有点麻烦

从我的项目中排除CXF时,我可以看到Jersey只使用“Jersey”类:

位于org.glassfish.jersey.media.multipart.MultiPartFeature.configure(MultiPartFeature.java:67)
位于org.glassfish.jersey.model.internal.CommonConfig.configureFeatures(CommonConfig.java:730)
位于org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:648)
位于org.glassfish.jersey.client.ClientConfig$State.configureMetaProviders(ClientConfig.java:372)
位于org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:405)
位于org.glassfish.jersey.client.ClientConfig$State.access$000(ClientConfig.java:90)
位于org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:122)
位于org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:119)
位于org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:340)
-锁定(一个java.lang.Object)
位于org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:733)
位于org.glassfish.jersey.client.ClientRequest.getConfiguration(ClientRequest.java:286)
位于org.glassfish.jersey.client.JerseyInvocation.validateHttpMethodAndEntity(JerseyInvocation.java:135)
位于org.glassfish.jersey.client.JerseyInvocation.(JerseyInvocation.java:105)
位于org.glassfish.jersey.client.JerseyInvocation.(JerseyInvocation.java:101)
位于org.glassfish.jersey.client.JerseyInvocation.(JerseyInvocation.java:92)
位于org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437)
位于org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343)
位于fr.pilato.elasticsearch.crawler.fs.test.integration.FsCrawlerRestIT.testUploadFile(FsCrawlerRestIT.java:56)
在sun.reflect.NativeMethodAccessorImpl.invoke0处(NativeMethodAccessorImpl.java:-1)
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
我现在需要理解为什么这个CXF依赖项会让人困惑,但这是另一回事:)

编辑:基本上,不能将CXF和Jersey放在同一个类路径上,因为它们为同一个JaxRS特性提供了不同的实现

对于我的项目,我不知道
java.lang.RuntimeException: java.lang.InstantiationException: org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide

    at __randomizedtesting.SeedInfo.seed([8269888A1B7E6430]:0)
    at org.apache.cxf.jaxrs.impl.ConfigurationImpl.createProvider(ConfigurationImpl.java:199)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:102)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:97)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl$FeatureContextImpl.register(ConfigurableImpl.java:139)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl$FeatureContextImpl.register(ConfigurableImpl.java:120)
    at org.glassfish.jersey.media.multipart.MultiPartFeature.configure(MultiPartFeature.java:67)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:86)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.doRegister(ConfigurableImpl.java:117)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:102)
    at org.apache.cxf.jaxrs.impl.ConfigurableImpl.register(ConfigurableImpl.java:97)
    at org.apache.cxf.jaxrs.client.spec.ClientBuilderImpl.register(ClientBuilderImpl.java:56)
    at org.apache.cxf.jaxrs.client.spec.ClientBuilderImpl.register(ClientBuilderImpl.java:35)
    at fr.pilato.elasticsearch.crawler.fs.test.integration.AbstractRestITCase.startRestClient(AbstractRestITCase.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.carrotsearch.randomizedtesting.RandomizedRunner.invoke(RandomizedRunner.java:1764)
    at com.carrotsearch.randomizedtesting.RandomizedRunner$6.evaluate(RandomizedRunner.java:811)
    at com.carrotsearch.randomizedtesting.RandomizedRunner$7.evaluate(RandomizedRunner.java:827)
    at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
    at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
    at com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:367)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.InstantiationException: org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide
    at java.lang.Class.newInstance(Class.java:427)
    at org.apache.cxf.jaxrs.impl.ConfigurationImpl.createProvider(ConfigurationImpl.java:197)
    ... 23 more
Caused by: java.lang.NoSuchMethodException: org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.newInstance(Class.java:412)
    ... 24 more
  at org.glassfish.jersey.media.multipart.MultiPartFeature.configure(MultiPartFeature.java:67)
  at org.glassfish.jersey.model.internal.CommonConfig.configureFeatures(CommonConfig.java:730)
  at org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:648)
  at org.glassfish.jersey.client.ClientConfig$State.configureMetaProviders(ClientConfig.java:372)
  at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:405)
  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)
  - locked <0x1178> (a java.lang.Object)
  at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:733)
  at org.glassfish.jersey.client.ClientRequest.getConfiguration(ClientRequest.java:286)
  at org.glassfish.jersey.client.JerseyInvocation.validateHttpMethodAndEntity(JerseyInvocation.java:135)
  at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:105)
  at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:101)
  at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:92)
  at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437)
  at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343)
  at fr.pilato.elasticsearch.crawler.fs.test.integration.FsCrawlerRestIT.testUploadFile(FsCrawlerRestIT.java:56)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers</artifactId>
        <version>1.14</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-rs-client</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-langdetect</artifactId>
        <version>1.14</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-rs-client</artifactId>
            </exclusion>
        </exclusions>
    </dependency>