2011-10-12 10 views
1

私は、次のコードを持っている:IllegalStateException:コンテンツが消費されました - 解決方法?

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オブジェクトを読むことです。だから、2回目に私は例外を得る。しかし私は問題を知っていますが、私は簡単な解決策を見つけることができません。だから、その問題を解決する良い方法は何ですか?

+0

このApacheの「HttpClient」ですか?もしそうなら、私はコンテンツがキャッシュされていないことに驚いています。それは本当に貧しいデザインの選択肢のように思えます。あなたが見ることができるように、明らかにAPIの不必要な悲しみをユーザーに与えます。 – mre

+0

Jersey Clientでも@同じ動作が発生します。 –

+0

@マットボール、面白い。狂気の裏に推論がありますか? – mre

答えて

2

response.getEntity().getContent()によって返された入力ストリームをローカル変数に格納されたbyte[]に読み込みます。 Convert InputStream to byte array in 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

正直なところ、文書全体を2回解析する必要はありません。どのAPIが 'XMLDocumentParser#parseDocument()'を提供していますか? –

1

応答内容を一度だけ読み取って、XMLDocumentParser.parseDocumentと互換性のある種類のバッファにコピーします。次に、必要なだけ何度でもバッファからデータを直接解析します。

-1

このように試してみませんか?

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"); 
+3

これは同じ問題です。 – RoflcoptrException

関連する問題