readLine() のハングに関連するいくつかの記事と質問を読みました。サーバー側からの応答の最後に手動で NULL を追加できるかどうかはわかりません (リモートの場所です)。私が知る限り、私はおそらくそれを制御することはできません。
<?xml version="1.0" encoding="utf-8"?>
<Response>
<Reply Status="OK" />
<Data attr="..." /> <-- BufferedReader hangs after this is printed.
</Response> <--- I'm assuming this has no "\n" or "null" so it keeps waiting
till the socket closes
これを修正するにはどうすればよいですか? 最後の行は正確には必要ありませんが、コードに例外が発生し続けることは望ましくありません。私は Javascript を使用しています。これが私のコードの一部です。
if (socketForXML && socketForXML.isConnected()){
socketForXML.setSoTimeout(60000);
var command = new Packages.java.lang.String( theCommand );
var os = socketForXML.getOutputStream();
os.write( command.getBytes("UTF-8") );
os.flush();
log.info("sendXMLCommand - sent command : " + command);
//RECEIVE RESPONSE FROM SERVER - in STRING format
var inStream = socketForXML.getInputStream();
var reader = new Packages.java.io.InputStreamReader(inStream, "UTF-8");
var buffer = new Packages.java.io.BufferedReader( reader );
while( ( line = buffer.readLine() ) != null ) {
log.debug(line);
}
socketForXML.close();
}
また、buffer.read() を使用してみましたが、/Response タグのすべての ASCII 番号が取得されますが、最後に > 同様にハングします。私はtry catchでチェックを試みましたが、ソケットが閉じるまで待機し、何も返されません:(。
try{
if (buffer.read() < 0 ){
log.error("END OF FILE.");
}
catch(e) {
log.error("did not work.");
}