Java RESTEasy客户端&x2B;无接触法误差

Java RESTEasy客户端&x2B;无接触法误差,java,maven,resteasy,jboss6.x,nosuchmethoderror,Java,Maven,Resteasy,Jboss6.x,Nosuchmethoderror,我正在尝试编写简单的RESTEasy客户端。下面给出了示例代码: Client client = ClientBuilder.newBuilder().build(); WebTarget target = client.target("http://localhost:8080/context/path"); Response response = target.request().post(Entity.entity(object, "application/json")); //Read

我正在尝试编写简单的RESTEasy客户端。下面给出了示例代码:

Client client = ClientBuilder.newBuilder().build();
WebTarget target = client.target("http://localhost:8080/context/path");
Response response = target.request().post(Entity.entity(object, "application/json"));

//Read output in string format
String value = response.readEntity(String.class);
我在第行遇到异常:

Client client = ClientBuilder.newBuilder().build();
String value = response.readEntity(String.class);
我在控制台中看到以下错误:

16:07:57,678 ERROR [stderr] (http-localhost/127.0.0.1:8080-1) java.lang.NoSuchMethodError: org.jboss.resteasy.spi.ResteasyProviderFactory.<init>(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)V

16:07:57,679 ERROR [stderr] (http-localhost/127.0.0.1:8080-1)   at org.jboss.resteasy.client.jaxrs.internal.ClientConfiguration.<init>(ClientConfiguration.java:44)

16:07:57,680 ERROR [stderr] (http-localhost/127.0.0.1:8080-1)   at org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.build(ResteasyClientBuilder.java:317)

16:07:57,680 ERROR [stderr] (http-localhost/127.0.0.1:8080-1)   at org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.build(ResteasyClientBuilder.java:49)
我在第行看到了这个例外:

Client client = ClientBuilder.newBuilder().build();
String value = response.readEntity(String.class);
奇怪的是,当我在调试时检查“response.readEntity(String.class)”时,我可以看到字符串值。但当我尝试转到下一行时,我看到了这个错误。你能指导我吗?会有什么问题

进一步更新:

我提到这一点。但它与WildFly有关,而不是EAP服务器。它要求我们排除模块“javaeeapi”。我试图排除“javaeeapi”模块,但它也不起作用。

经过几天的努力,我终于可以解决这些问题了


问题1的解决方案: 错误:“java.lang.NoSuchMethodError:org.jboss.resteasy.spi.ResteasyProviderFactory(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)”

解决方案:我通过在jboss-deployment-structure.xml中的排除列表中添加更多resteasy模块解决了这个问题。我的jboss-deployment-structure.xml当前状态如下:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
   <deployment>
      <dependencies>
            <module name="org.jboss.resteasy.resteasy-jackson-provider" services="import"/>
       </dependencies>
       <exclude-subsystems>
           <subsystem name="resteasy"/>
       </exclude-subsystems>
     <exclusions>
        <module name="javax.activation.api"/>
        <module name="javax.annotation.api"/>
        <module name="javax.ejb.api"/>
        <module name="javax.el.api"/>
        <module name="javax.enterprise.api"/>
        <module name="javax.enterprise.deploy.api"/>
        <module name="javax.inject.api"/>
        <module name="javax.interceptor.api"/>
        <module name="javax.jms.api"/>
        <module name="javax.jws.api"/>
        <module name="javax.mail.api"/>
        <module name="javax.management.j2ee.api"/>
        <module name="javax.persistence.api"/>
        <module name="javax.resource.api"/>
        <module name="javax.rmi.api"/>
        <module name="javax.security.auth.message.api"/>
        <module name="javax.security.jacc.api"/>
        <module name="javax.servlet.api"/>
        <module name="javax.servlet.jsp.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.ws.rs.api"/>
        <module name="javax.xml.bind.api"/>
        <module name="javax.xml.registry.api"/>
        <module name="javax.xml.soap.api"/>
        <module name="javax.xml.ws.api"/>

        <!-- This one always goes last. -->
        <module name="javax.api"/>

       <module name="org.apache.commons.logging"/>
       <module name="org.jboss.as.jaxrs"/>
       <module name="org.jboss.resteasy.resteasy-jaxrs"/>
       <module name="org.jboss.resteasy.resteasy-cdi"/>
       <module name="org.jboss.resteasy.resteasy-jackson2-provider"/>
       <module name="org.jboss.resteasy.jackson-provider"/>
       <module name="org.jboss.resteasy.resteasy-atom-provider"/>
       <module name="org.jboss.resteasy.resteasy-hibernatevalidator-provider"/>
       <module name="org.jboss.resteasy.resteasy-jaxb-provider"/>
       <module name="org.jboss.resteasy.resteasy-jettison-provider"/>
       <module name="org.jboss.resteasy.resteasy-jsapi"/>
       <module name="org.jboss.resteasy.resteasy-multipart-provider"/>
       <module name="org.jboss.resteasy.resteasy-yaml-provider"/>
       <module name="org.codehaus.jackson.jackson-core-asl"/>
       <module name="org.codehaus.jackson.jackson-jaxrs"/>
       <module name="org.codehaus.jackson.jackson-mapper-asl"/>
       <module name="org.codehaus.jackson.jackson-xc"/>
       <module name="org.codehaus.jettison"/>
       <module name="javax.ws.rs.api"/>
       <module name="javax.ws.rs.core"/>
     </exclusions>
   </deployment>
 </jboss-deployment-structure>

我相信,只需排除模块“org.jboss.resteasy.resteasy jaxrs”和“org.jboss.resteasy.resteasy cdi”就可以实现。但当我面临另一个问题时,我没有进一步尝试。您可以尝试删除不必要的排除项

问题2的解决方案: 错误:“由以下原因引起:java.lang.NoSuchMethodError:javax.ws.rs.core.Response.readEntity(Ljava/lang/Class;)Ljava/lang/Object;”

解决方案:JBOSS EAP 6.1与默认的resteasy发行版捆绑在一起。我从下载了最新的resteasy-jax-rs实现(resteasy-jaxrs-3.0.7.Final all.zip)

它附带了名为resteasy-jboss-modules-3.0.7.Final.zip的zip文件。在JBoss EAP 6.1发行版的modules/system/layers/base/目录中解压缩此文件。这将覆盖其中的一些现有文件。这将解决第二个问题


希望这些信息能帮助其他人。

这些问题是由于您的应用程序和Jboss EAP模块之间的Resteasy客户端实现版本不同而引发的。您使用的是最新版本的jaxrs客户端,但JBoss EAP 6.3.0使用的是非常旧的版本(resteasy-jaxrs-2.3.8.Final-redhat-3)


只需下载最新的JBoss Resteasy实现包(类似于:Resteasy-JBoss-modules-3.0.9.Final.zip)并解压缩到EAP modules文件夹中,替换现有文件modules.xml并添加新的JAR。记住,从拉链上更换所有罐子(不仅仅是resteasy JAXR)

更改jboss-deployment-structure.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure
    xmlns="urn:jboss:deployment-structure:1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <deployment>
        <dependencies>
            <module name="javaee.api">
                <imports>
                    <exclude-set>
                        <path name="javax/ws/rs" />
                        <path name="javax/ws/rs/core" />
                        <path name="javax/ws/rs/ext" />
                    </exclude-set>
                </imports>
            </module>
        </dependencies>
        <exclude-subsystems>
            <subsystem name="jaxrs" />
        </exclude-subsystems>
        <exclusions>
            <module name="org.jboss.as.jaxrs" />
            <module name="javaee.api" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

使用pom.xml中的依赖项

<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-jaxrs</artifactId>
 <version>3.0.9.Final</version>
</dependency>
<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-servlet-initializer</artifactId>
 <version>3.0.9.Final</version>
</dependency>
<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-jackson-provider</artifactId>
 <version>3.0.9.Final</version>
</dependency>
<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-cdi</artifactId>
 <version>3.0.9.Final</version>
</dependency>

org.jboss.resteasy
resteasy jaxrs
3.0.9.1最终版本
org.jboss.resteasy
resteasy servlet初始值设定项
3.0.9.1最终版本
org.jboss.resteasy
resteasy jackson提供商
3.0.9.1最终版本
org.jboss.resteasy
resteasy cdi
3.0.9.1最终版本

看起来类路径中有不同版本的
resteasy client
,或者编译运行时版本之间有差异。我尝试从pom.xml注释resteasy客户端依赖性。它给出了编译错误。所以我猜在classpath中只有一个版本的resteasy客户端jar。在编译时和运行时?您的jboss的类路径中有多个版本吗?如果我试图删除resteasy客户端依赖性,eclipse compains会说它找不到像ClientBuilder这样的类。并没有其他的jar可以从中导入它们。我已经通过更多的分析和当前状态进一步更新了这个问题。如果您对具体问题有任何想法,请告诉我。#2是我的具体问题。我使用的是3.0.8.Final,需要使用3.0.7.Final。每个人都有关于JBoss服务器的问题。而我的问题是在Eclipse中执行集成测试。
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
   <deployment>
      <dependencies>
            <module name="org.jboss.resteasy.resteasy-jackson-provider" services="import"/>
       </dependencies>
       <exclude-subsystems>
           <subsystem name="resteasy"/>
       </exclude-subsystems>
     <exclusions>
        <module name="javax.activation.api"/>
        <module name="javax.annotation.api"/>
        <module name="javax.ejb.api"/>
        <module name="javax.el.api"/>
        <module name="javax.enterprise.api"/>
        <module name="javax.enterprise.deploy.api"/>
        <module name="javax.inject.api"/>
        <module name="javax.interceptor.api"/>
        <module name="javax.jms.api"/>
        <module name="javax.jws.api"/>
        <module name="javax.mail.api"/>
        <module name="javax.management.j2ee.api"/>
        <module name="javax.persistence.api"/>
        <module name="javax.resource.api"/>
        <module name="javax.rmi.api"/>
        <module name="javax.security.auth.message.api"/>
        <module name="javax.security.jacc.api"/>
        <module name="javax.servlet.api"/>
        <module name="javax.servlet.jsp.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.ws.rs.api"/>
        <module name="javax.xml.bind.api"/>
        <module name="javax.xml.registry.api"/>
        <module name="javax.xml.soap.api"/>
        <module name="javax.xml.ws.api"/>

        <!-- This one always goes last. -->
        <module name="javax.api"/>

       <module name="org.apache.commons.logging"/>
       <module name="org.jboss.as.jaxrs"/>
       <module name="org.jboss.resteasy.resteasy-jaxrs"/>
       <module name="org.jboss.resteasy.resteasy-cdi"/>
       <module name="org.jboss.resteasy.resteasy-jackson2-provider"/>
       <module name="org.jboss.resteasy.jackson-provider"/>
       <module name="org.jboss.resteasy.resteasy-atom-provider"/>
       <module name="org.jboss.resteasy.resteasy-hibernatevalidator-provider"/>
       <module name="org.jboss.resteasy.resteasy-jaxb-provider"/>
       <module name="org.jboss.resteasy.resteasy-jettison-provider"/>
       <module name="org.jboss.resteasy.resteasy-jsapi"/>
       <module name="org.jboss.resteasy.resteasy-multipart-provider"/>
       <module name="org.jboss.resteasy.resteasy-yaml-provider"/>
       <module name="org.codehaus.jackson.jackson-core-asl"/>
       <module name="org.codehaus.jackson.jackson-jaxrs"/>
       <module name="org.codehaus.jackson.jackson-mapper-asl"/>
       <module name="org.codehaus.jackson.jackson-xc"/>
       <module name="org.codehaus.jettison"/>
       <module name="javax.ws.rs.api"/>
       <module name="javax.ws.rs.core"/>
     </exclusions>
   </deployment>
 </jboss-deployment-structure>
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure
    xmlns="urn:jboss:deployment-structure:1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <deployment>
        <dependencies>
            <module name="javaee.api">
                <imports>
                    <exclude-set>
                        <path name="javax/ws/rs" />
                        <path name="javax/ws/rs/core" />
                        <path name="javax/ws/rs/ext" />
                    </exclude-set>
                </imports>
            </module>
        </dependencies>
        <exclude-subsystems>
            <subsystem name="jaxrs" />
        </exclude-subsystems>
        <exclusions>
            <module name="org.jboss.as.jaxrs" />
            <module name="javaee.api" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>
<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-jaxrs</artifactId>
 <version>3.0.9.Final</version>
</dependency>
<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-servlet-initializer</artifactId>
 <version>3.0.9.Final</version>
</dependency>
<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-jackson-provider</artifactId>
 <version>3.0.9.Final</version>
</dependency>
<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-cdi</artifactId>
 <version>3.0.9.Final</version>
</dependency>