2017-05-08 103 views
0

我已經嘗試了許多不同的方法來讓resteasy客戶端爲我工作,但我陷入了一個錯誤。 java.lang.LinkageError的:無法連結組織/ JBoss的/ RestEasy的/客戶/ JAXRS /內部/ ClientConfiguration無法讓resteasy客戶端工作

這裏是我使用的客戶端

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")); 
} 

我可以POST和GET方法使用相同的數據,並且我嘗試讓客戶端使用不同的數據併發布到不同的地方,並始終得到相同的錯誤。這裏是我的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> 

,這裏是我的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> 

我使用JBoss EAP 6.4是否有幫助。

回答

0
  1. 至於我可以告訴RestEasy的中的JBoss EAP 6.4所提供的版本是3.0.21.Final而不是3.1.0.Final但你可能修改了(見https://developer.jboss.org/thread/262213僅供參考)。

  2. 您使用不同的版本和不同的範圍爲您的resteasy庫(3.0.8.Final爲jaxrs-api),但這可能仍然可以。我會一直推薦使用Resteasy Proxy Framework。這可能是一個有點代碼來寫,但使事情總容易和清晰:

定義一個接口:

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

使用它:

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); 

我沒編譯這段代碼大部分是從文檔複製/粘貼的,但它應該接近你所需要的。

編輯:

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.

這表明,你有你使用編譯和運行時使見上在沒有1.

不同的庫版本中的問題特別是如果你使用不同的範圍,那麼編譯和運行時的版本是相同的!所以試着找出你的JBoss所提供的版本,並只使用這些版本。還要找出你提供了哪些引用的庫,並用提供的範圍標記它們。

+0

不幸的是我仍然收到同樣的錯誤。 – GhostDonkeys

+0

你嘗試了什麼? – martinw