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();
我在 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();