Jsonを解析するエンドポイントを持つJavaサーバーアプリケーションがあります。 JSONファイルが大きい場合 私はCapricious JsonのJava解析エラー
wget --header="Content-Type: application/json" --post-file=somefile.json %SERVER_URL%
ファイルは、次のように解析され、リーダを作成
InputStream in = httpExchange.getRequestBody();
JsonReader reader = Json.createReader(in);
は、随時例外をスローし、このようにWgetに要求を行う(約10,000行)しかし、同じファイルに対しては時々成功します。エラーメッセージは次のようになります。
Unexpected char -1 at (line no=4029, column no=228, offset=204873)
ファイル内のその行に移動すると、正常に表示されます。私はまた、ファイルの先頭に 'var a ='を追加するだけでJavascriptでファイルを解析しようとしましたが、それは問題ありません。私はファイルを分割することを試みましたが、内容にかかわらずファイルが小さくなるにつれて、それが成功することがあることに気付きました...
wgetが完全に投稿する前にJavaがファイルをストリーミングすることができますか?そんなに奇妙な?そして、パーサは...時期尚早のEOFか何かを見ている
クルーレス:(
編集:
私は、この機能で、最初の文字列にファイルを保存した
static String convertStreamToString(java.io.InputStream is) {
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
InputStream in = he.getRequestBody();
String reqBodyString = convertStreamToString(in);
JsonReader reader = Json.createReader(new StringReader(reqBodyString));
NetBeansを使用して、私はJsonReaderの作成をこれで置き換えましたファイルへのreqBodyStringの値とファイルが途中で終了します。私は体全体を取得していないようです...何かがあまりにも迅速にストリームを閉じている必要があります...?サーバがまだストリームを読み出している間:(
スタックトレースをポストできますか? – PeterMmm
スタックトレースはそれほど興味深いわけではありませんが、ここではMyHandler.fail:25 \t MyHandlerです。ハンドル:79 \t AuthFilter.doFilter:83 \t フィルターの$ Chain.doFilter:82 \t ServerImpl $所$ LinkHandler.handle:675 \t フィルター$チェーン83 \t 隠しソースが\t フィルタの$ Chain.doFilterを呼び出します。 doFilter:79 \t ServerImpl $ Exchange.run:647 \t ThreadPoolExecutor.runWorker:1142 \t ThreadPoolExecutor $ Worker.run:617 \t Thread.run:745 – endavid
たぶんCHARSETエラー... –