gpt4 book ai didi

java - RESTEasy 客户端 + NoSuchMethodError

转载 作者:太空狗 更新时间:2023-10-29 22:54:59 25 4
gpt4 key购买 nike

我正在尝试编写简单的 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();

我在控制台中看到以下错误:

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)

我在 pom.xml 中添加了 resteasy 客户端依赖:

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

我的代码部署在 JBOSS EAP 6.1 上。 JDK 版本为 1.7。

更新:我还尝试在我的 pom.xml 中添加 resteasy jax-rs 依赖项。我还通过在我的 web.xml 中添加以下行来验证是否启用了 ResteasyProviderFactory:

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

请在下面找到 Maven 依赖项列表:

<dependencies>

<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.1_spec</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<scope>provided</scope>
</dependency>

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

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

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.jboss.arquillian.protocol</groupId>
<artifactId>arquillian-protocol-servlet</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

但它不起作用。

除了异常(exception),我无法弄清楚缺少什么。我无法在 SO 或任何其他论坛上找到有关此问题的任何引用。如果您之前看到过此问题并且知道如何解决,请告诉我。谢谢。


2014 年 6 月 11 日更新:

引用后this blog通过排除一些 resteasy 和 jackson 模块,我尝试创建类似的 jboss-deployment-structure.xml 并将其保存在我的 EJB 项目的 META-INF 文件夹中。这解决了我的 NoSuchMethodError for "org.jboss.resteasy.spi.ResteasyProviderFactory.(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)"问题。我的 jboss-deployment-structure.xml 的结构是:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="resteasy"/>
</exclude-subsystems>
<exclusions>
<!-- <module name="org.apache.log4j" /> -->
<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.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"/> -->
</exclusions>
</deployment>
</jboss-deployment-structure>

但现在我看到其他方法有类似的异常:

Caused by: java.lang.NoSuchMethodError: javax.ws.rs.core.Response.readEntity(Ljava/lang/Class;)Ljava/lang/Object;
at com.example.data.DemoProxyBean.callDemoTx(DemoProxyBean.java:59) [demo-service.jar:]
at com.example.data.DemoProxyBean$Proxy$_$$_WeldClientProxy.callDemoTx(DemoProxyBean$Proxy$_$$_WeldClientProxy.java) [demo-service.jar:]

我在以下行看到了这个异常:

String value = response.readEntity(String.class);

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

进一步更新:

我提到了这个JBOSS Issue tracker .但它与 WildFly 有关,与 EAP 服务器无关。它要求我们排除模块“javaee-api”。我尝试排除“javaee-api”模块,但它也不起作用。

最佳答案

此问题是由于您的应用程序和 Jboss EAP 模块之间的 Resteasy Client 实现版本不同而引发的。您正在使用最新版本的 jaxrs-client,但 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。记住替换 ZIP 中的所有 JARS(不仅是 resteasy-jaxrs)。

关于java - RESTEasy 客户端 + NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24139097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com