java - IllegalStateException: 内容已经被消耗如何解析?

  显示原文与译文双语对照的内容
0 0

我有以下代码:


HttpGet httpGet = new HttpGet(serverAdress +"/rootservices");
 httpGet.setHeader("Accept","text/xml");
 HttpResponse response = client.execute(httpGet, localContext);

 String projectURL = XMLDocumentParser.parseDocument(response.getEntity().getContent(),"oslc_scm:scmServiceProviders","rdf:resource");
 String workItemURL = XMLDocumentParser.parseDocument(response.getEntity().getContent(),"oslc_cm:cmServiceProviders","rdf:resource");

这里的问题是我读了2 倍的HttpResponse对象。 所以第二次我得到了例外。 那么什么是解决这个问题的好方法?

时间: 原作者:

0 0

读取 response.getEntity().getContent() 返回的输入流到 byte[] 中,存储在本地变量中。 请参见将InputStream转换为Java中的字节 [] 。


byte[] content = IOUtils.toByteArray(response.getEntity().getContent());

String projectURL = XMLDocumentParser.parseDocument(new ByteArrayInputStream(content),"oslc_scm:scmServiceProviders","rdf:resource");
String workItemURL = XMLDocumentParser.parseDocument(new ByteArrayInputStream(content),"oslc_cm:cmServiceProviders","rdf:resource");

原作者:
0 0

只读取响应内容一次,并将它的复制到与 XMLDocumentParser.parseDocument 兼容的某种缓冲区。 然后直接从缓冲区中解析数据,如你所希望的次数。

原作者:
0 0

你为什么不尝试一下?


HttpGet httpGet = new HttpGet(serverAdress +"/rootservices");
 httpGet.setHeader("Accept","text/xml");
 InputStream in = null;
 HttpResponse response = client.execute(httpGet, localContext);

 in = response.getEntity().getContent();
 String projectURL = XMLDocumentParser.parseDocument(in,"oslc_scm:scmServiceProviders","rdf:resource");
 String workItemURL = XMLDocumentParser.parseDocument(in,"oslc_cm:cmServiceProviders","rdf:resource");

原作者:
...