2017-05-08 3 views
0

Ich habe viele verschiedene Möglichkeiten ausprobiert, um den Rasteasy-Client für mich arbeiten zu lassen, aber ich stecke auf einen Fehler fest. java.lang.LinkageError: Fehler beim Verlinken org/jboss/Resteasy/client/jaxrs/intern/ClientConfigurationKann Rasteasy-Client nicht arbeiten

Hier ist die Methode, die ich als Client verwenden bin

public void createIssue() { 
    issue = new Issue(); 
    ResteasyClient client = new ResteasyClientBuilder().build(); 
    ResteasyWebTarget target = client.target("api-being-posted-to"); 
    Response response = target.request().header("Authorization: ", "Basic Foo") 
      .post(Entity.entity(issueJson, "application/json")); 
} 

I POST und GET mit den gleichen Daten, die das verwendet, und ich habe versucht, einen Client mit unterschiedlichen Daten arbeiten zu lassen und an verschiedenen Stellen zu posten und immer den gleichen Fehler zu bekommen. Hier ist mein pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>org.foo.bar</groupId> 
<artifactId>foo</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 
<name>example</name> 

<dependencies> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxrs</artifactId> 
     <version>3.1.0.Final</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-client</artifactId> 
     <version>3.1.0.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>jaxrs-api</artifactId> 
     <version>3.0.8.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jackson-provider</artifactId> 
     <version>3.1.0.Final</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.3</version> 
     </plugin> 
    </plugins> 
</build> 

und hier ist meine web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0"> 

<servlet-mapping> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>resteasy.scan</param-name> 
    <param-value>true</param-value> 
</context-param> 

<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
    <param-value>/rest</param-value> 
</context-param> 

<listener> 
    <listener-class> 
     org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap 
     </listener-class> 
</listener> 

<servlet> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <servlet-class> 
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
    </servlet-class> 
</servlet> 

Ich verwende JBoss EAP 6.4, ob das hilft.

Antwort

0
  1. Soweit ich die mitgelieferte Version von Resteasy in JBoss EAP kann sagen 6.4 ist 3.0.21.Final und nicht 3.1.0.Final aber Sie haben vielleicht modifiziert, dass (https://developer.jboss.org/thread/262213 als Referenz sehen).

  2. Sie verwenden verschiedene Versionen und verschiedene Bereiche für Ihre Resteasy-Bibliotheken (3.0.8.Final für Jaxrs-API), aber das könnte noch in Ordnung sein.

  3. Ich würde immer empfehlen, die Resteasy Proxy Framework zu verwenden. Es könnte ein bisschen mehr Code zu schreiben, sondern macht die Dinge einfacher und klarer insgesamt:

eine Schnittstelle definieren:

public interface IssueIF 
{ 
    @POST 
    @Path("/issue") 
    @Produces("text/plain") 
    Issue postIssue(Issue i); 
} 

Verwenden Sie es:

ResteasyClient client = new ResteasyClientBuilder().build(); 
ResteasyWebTarget target = client.target("http://example.com/base/uri"); 

SimpleClient simple = target.proxy(IssueIF.class); 
Issue issue = new Issue(); 
client.postIssue(issue); 

ich nicht kompilieren Dieser Code wird hauptsächlich aus den Dokumenten kopiert/eingefügt, sollte aber nahe an dem sein, was Sie brauchen.

Edit:

Vom docs:

Subclasses of LinkageError indicate that a class has some dependency on another class; however, the latter class has incompatibly changed after the compilation of the former class.

Dies legt nahe, dass Sie ein Problem mit verschiedenen Bibliotheksversionen haben Sie für die Kompilierung verwenden und zur Laufzeit so siehe oben bei no 1.

Insbesondere wenn Sie unterschiedliche Bereiche verwenden, ist es wichtig, dass die Versionen für die Kompilierung und Laufzeit identisch sind! Versuchen Sie also herauszufinden, welche Versionen Ihr JBoss liefert und verwenden Sie nur diese Versionen. Finden Sie auch heraus, welche Ihrer referenzierten Bibliotheken geliefert werden, und markieren Sie alle mit dem bereitgestellten Umfang.

+0

Ich bekomme immer noch den gleichen Fehler leider. – GhostDonkeys

+0

Was hast du probiert? – martinw