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

时间:2016-02-24 07:20:59

标签: java resteasy

我在RestEasy客户端-3.0.8

中遇到异常
  

12:46:19,724 ERROR [stderr](http-localhost-127.0.0.1-8080-1)   java.lang.IllegalStateException:响应已关闭。

我在下面写了代码

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();抛出异常。代码怎么了?

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

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

response.bufferEntity();

答案 2 :(得分:0)

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

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

    public class MainActivity extends android.support.v7.app.AppCompatActivity { 

      @Override
      public void onCreate(final Bundle savedInstanceState) {

      final android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this);
      builder.setTitle("title");
      builder.setMessage("asdf asöldkfasölkdf öasdklfjöa aösdkföa sdköf masjdö lmasjködf mjaösk maöskd mjaösk fmaöskmaöskmföasföalk maölskjd möaslkd möas mjaös m").setCancelable(true)
             .setNeutralButton(R.string.ok, new DialogInterface.OnClickListener() {
                  @Override
                  public void onClick(final DialogInterface dialog, final int id) {
                      dialog.cancel();
                  }
              }).setOnCancelListener(new OnCancelListener() {
                 @Override
                 public void onCancel(final DialogInterface dialog) {
                   MainActivity.sMessageDialogId = 0;
                 }
      });
      builder.show();
     }
    }

实施

@Path("fake")
public interface FakeService {

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

我的客户端代码是

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

在查看我的“server.log”后,我发现因为之前有警告而引发了例外,

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

URL添加额外路径(假两次)。我已将我的客户代码更改为      ResteasyWebTarget target = client.target(“http://localhost:8080/myapp/api/”);

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