Resteasy Client java.lang.IllegalStateException:响应已关闭

Resteasy Client java.lang.IllegalStateException: Response is closed

我在 RestEasy 客户端 -3.0.8 中出现以下异常

12:46:19,724 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) java.lang.IllegalStateException: Response is closed.

我写了下面的代码

client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target(request.getUrl());
Response response = target.request().accept(APPLICATION_TYPE_XML).header(TOKEN, request.getToken()).post(Entity.entity(request.getXmlObject(), APPLICATION_TYPE_XML));
output = response.readEntity(String.class);
if (response.getStatus() != SUCCESS_CREATE) {
 //Do Something
} else {
 String classType = ClassFactory.getClassNameFromUrl(request.getUrl());
 if (null != classType && !classType.isEmpty()) {
  Long Id = (Long) response.readEntity(ClassFactory.getClassMethod(classType)).getId();

 }

现在这一行 Long Id = (Long) response.readEntity(ClassFactory.getClassMethod(classType)).getId(); 抛出异常。代码有什么问题?

你解决了吗?我遇到过类似的问题。

我在 WildFly 9 运行 我的 REST 资源定义为

@Path("fake")
public interface FakeService {

     @GET
     @Produces(MediaType.TEXT_PLAIN)
     public String get();
}

以及实施

public class Fake implements FakeService{
    public String get(){
        return "Hello";
    }
}

我的客户端代码是

ResteasyClient client = new ResteasyClientBuilder().build();
**ResteasyWebTarget target = client.target("http://localhost:8080/myapp/api/fake");**

FakeService simple = target.proxy(FakeService.class);
System.out.println(simple.get());

查看我的 "server.log" 我发现异常被抛出,因为之前有警告,

WARN  [org.jboss.resteasy.core.ExceptionHandler] (default task-24) failed to execute: javax.ws.rs.NotFoundException: Could not find resource for full path: **http://localhost:8080/myapp/api/fake/fake**

URL 增加一个额外的路径(假的是两次)。我已将我的客户代码更改为 ResteasyWebTarget 目标 = client.target("http://localhost:8080/myapp/api/");

(没有我正在代理的资源的路径)并且它有效。

阅读回复关闭回复。 所以当你打电话给 response.readEntity(String.class); 当您使用 response.readEntity(ClassFactory.getClassMethod(classType)).getId();

重复读取时,这将导致错误

您可以通过在循环中重复第一个 readEntity 来轻松地展示这一点。将响应读成最方便的形式,并在必要时从那里转换它。

您可以缓冲正文响应以允许多次调用 readEntity():

response.bufferEntity();