it-swarm.com.de

NoSuchMethodError: MultivaluedMap.addAll im Jersey-Client

Ich versuche, Jersey Client zu verwenden, um HTTP-Anforderungen an meinen Webdienst zu simulieren. Ich habe versucht das einfache Beispiel aus der Dokumentation zu implementieren. Hier ist mein Kurzcode:

public void restoreTest(String sessionId) throws Exception {
    Client client = ClientBuilder.newClient();
    WebTarget target = client.target(idsUrl).path("restore");
    Form form = new Form();
    form.param("sessionId", sessionId);
    target.request(MediaType.APPLICATION_FORM_URLENCODED_TYPE);
}

Ich habe das ganze Beispiel nicht einmal implementiert, weil ich in der letzten Zeile momentan eine Ausnahme bekomme:

Java.lang.NoSuchMethodError: javax.ws.rs.core.MultivaluedMap.addAll(Ljava/lang/Object;[Ljava/lang/Object;)V
    at org.glassfish.jersey.client.ClientRequest.accept(ClientRequest.Java:254)
    at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.Java:232)
    at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.Java:60)
    at org.icatproject.idsclient.TestingClient.restoreTest(TestingClient.Java:112)
    at org.icatproject.ids.ids2.ArchiveTest.restoreThenArchiveDataset(ArchiveTest.Java:55)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:616)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.Java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.Java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.Java:20)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.Java:28)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:76)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:184)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.Java:28)
    at org.junit.runners.ParentRunner.run(ParentRunner.Java:236)
    at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.Java:50)
    at org.Eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.Java:38)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:467)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:683)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:390)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:197)

Ich habe diese Abhängigkeit nur zu meinem pom.xml hinzugefügt:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.2</version>
</dependency>

Ich habe versucht, das Problem zu googeln und die Anwendung zu debuggen, aber ich kann nicht wirklich erkennen, was daran falsch ist.

EDIT

Alle Maven-Abhängigkeiten:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.Eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.0.2</version>
</dependency>
<dependency>
    <groupId>org.Eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.Sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.8</version>
</dependency>
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-Java</artifactId>
    <version>2.4.1</version>
</dependency>
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.1</version>
</dependency>
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.3</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.4</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.2</version>
</dependency>
18
Wojtek

Dies scheint eine Inkonsistenz in Bezug auf die JAX-RS-API-Version zu sein (die die MultiValuedMap enthält). 

Sie verwenden Client jersey-client v2.2, der mit der Version 2.0 der JAX-RS-API kompiliert wird. Ihre Laufzeitumgebung läuft jedoch mit Java EE 6, das die JAX-RS-API Version 1.1 definiert. Ihr Code erwartet also Version 2.0 der JAX-RS-API, erhält jedoch zur Laufzeit Version 1.1.

Dies ist die MultiValuedMap API für Java EE 6:

http://docs.Oracle.com/javaee/6/api/javax/ws/rs/core/MultivaluedMap.html (keine addAll-Methode).

Und für Java EE 7:

http://docs.Oracle.com/javaee/7/api/javax/ws/rs/core/MultivaluedMap.html (dieses enthält die addAll-Methode).

Da Sie Java EE 6 verwenden, sollten Sie jersey-client v1.8 verwenden, nicht 2.2. Oder Sie sollten die Java EE 7-API in Ihren Laufzeitklassenpfad aufnehmen und nicht 6.

35

Die störende Klasse stammt aus dieser Abhängigkeit

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>

Es enthält jax-rs 1.1-Kernklassen, insbesondere MultivaluedMap-Schnittstelle ohne addAll-Methode.

Deaktivieren Sie es (es scheint, wenn Sie nur Jersey verwenden) oder aktualisieren Sie version auf 7.0.

6
Ori Dar

In meinem Fall scheint dies ein Inkompatibilitätsproblem mit Jersey Client und Jersey Core zu sein. Ich bin daran vorbei gekommen, indem ich den Client deaktiviert habe:

<dependencies>
        <dependency>
            <groupId>org.Apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.4</version>
        </dependency>
        <dependency>
            <groupId>pl.pragmatists</groupId>
            <artifactId>JUnitParams</artifactId>
            <version>1.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
            <scope>test</scope>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>com.Sun.jersey</groupId>-->
            <!--<artifactId>jersey-client</artifactId>-->
            <!--<version>1.19</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>org.Apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-Java</artifactId>
            <version>2.45.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.8</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.saucelabs</groupId>
            <artifactId>sauce_junit</artifactId>
            <version>2.1.18</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.16</version>
        </dependency>
    </dependencies>
0
Bob Small