- PR -

DataInputStream実行時の処理落ちについて

投稿者投稿内容
ひろ
ベテラン
会議室デビュー日: 2003/12/26
投稿数: 97
投稿日時: 2006-11-09 14:14
引用:

ukさんの書き込み (2006-11-09 14:09) より:
引用:

ひろさんの書き込み (2006-11-09 14:03) より:
new CombineException("", "", ex);
は,プロジェクトのお決まり?の様なもので,catch部に必ず記述しております。
実際に他のケースで例外をキャッチした場合は,ログが出力されています。


もしかしてコンストラクタにログ出力処理が仕込んであるのですか?
だとしたらひどい設計ですね

それで、例外が発生していないとしたら具体的に何が発生しているのですか?



url = new URL("http://serv:1000/test_site/TEST") ;
uc = ((HttpURLConnection)(url.openConnection()));

uc.setRequestMethod("POST");
uc.setDoOutput(true);
uc.setDoInput(true);

System.out.println("check Point1"); // @
// 問題のstep
dis = new DataInputStream(uc.getInputStream());
System.out.println("check Point2"); // A


・(省略)
System.out.println("処理終了"); // B
} catch (IOException e){
new CombineException("", "", e); // 例外ログ出力

} catch (Exception ex) {
new CombineException("", "", ex);
}

上記の様に,@〜Bでログを出力しているのですが(実際はフレームワークで)
@のログのみ出力されます。
つまりA以降は処理が流れていない状況です。




[ メッセージ編集済み 編集者: ひろ 編集日時 2006-11-09 14:41 ]
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2006-11-09 14:34
例外が発生していないなら、Errorがはっせいしているのでは?
なんらかのリソース枯渇によるOutOfMemoryErrorとか
環境異常によるNoClassDefFoundErrorとか、あるいはAssertionErrorとか。
catchにErrorを足してみてください。
(実際にErrorが発生しているのなら、キャッチするのでなくほかの対処が必要ですが...)
ひろ
ベテラン
会議室デビュー日: 2003/12/26
投稿数: 97
投稿日時: 2006-11-09 14:56
引用:

sawatさんの書き込み (2006-11-09 14:34) より:
例外が発生していないなら、Errorがはっせいしているのでは?
なんらかのリソース枯渇によるOutOfMemoryErrorとか
環境異常によるNoClassDefFoundErrorとか、あるいはAssertionErrorとか。
catchにErrorを足してみてください。
(実際にErrorが発生しているのなら、キャッチするのでなくほかの対処が必要ですが...)



ご返信ありがとうございます。
catchに上記例外を追加してみましたが,変化はありませんでした。
socketを利用するなり色々試してみます。




[ メッセージ編集済み 編集者: ひろ 編集日時 2006-11-09 14:57 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-11-09 14:57
やはり今ひとつ状況がはっきりしないのですが、この現象とは違うのでしょうか。

http://www.thescripts.com/forum/thread17880.html

もしそうであれば、URLの最後にスラッシュをつけてみてはどうですか?
ひろ
ベテラン
会議室デビュー日: 2003/12/26
投稿数: 97
投稿日時: 2006-11-09 15:11
引用:

ukさんの書き込み (2006-11-09 14:57) より:
やはり今ひとつ状況がはっきりしないのですが、この現象とは違うのでしょうか。

http://www.thescripts.com/forum/thread17880.html

もしそうであれば、URLの最後にスラッシュをつけてみてはどうですか?



ご返信ありがとうございます。
最後にスラッシュをつけて何度か繰り返し実行した結果,
以下の例外ログが出力されました。
指定されたパス名で示されるファイルが開けないようです。
また,色々試してみます。


<?xml version="1.0" encoding="Shift_JIS" ?>
<DATABASE>
<DATE>2006/11/09 15:19.34</DATE>
<DISPLAY_MESSAGE></DISPLAY_MESSAGE>
<SOLUSION_KEYWORD></SOLUSION_KEYWORD>
<STACK_TRACE>
java.io.FileNotFoundException: http://serv:1000/test_site/TEST
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:812)
at jp.co.nttwest.workbean.UKAddressCheck.getAdressCode(UKAddressCheck.java:154)
at ADDServlet.service(ADDServlet.java:163)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
</STACK_TRACE>
</DATABASE>
-----------------------------------------------------------------------
public class FileNotFoundException
extends IOException
指定されたパス名で示されるファイルが開けなかったことを通知します。

この例外は、指定されたパス名のファイルが存在しないときに、FileInputStream、FileOutputStream、および RandomAccessFile コンストラクタによってスローされます。また、ファイルが存在しても、なんらかの理由でアクセスできない場合 (たとえば、読み込み専用のファイルを書き込みのために開こうとした場合) にもそれらのコンストラクタによってスローされます。



[ メッセージ編集済み 編集者: ひろ 編集日時 2006-11-09 15:17 ]

[ メッセージ編集済み 編集者: ひろ 編集日時 2006-11-09 15:50 ]
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2006-11-09 15:37
http://http://serv:1000/test_site/TESTとhttp://が2回繰り返し出力されているようですが、どこかでゴミが混じって、単にそのURLに接続できないだけではないですか?

接続できない場合を想定して、URLConnection#setConnectTimeout(int)を使用して、
タイムアウトを設定したら、処理が停止したようにはならないのではないでしょうか。
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2006-11-09 15:38
なんだか腑に落ちないですね。
以下の点が不明です。

  • そのURLに普通のHTMLとかからアクセスしたら、ちゃんとレスポンスは得られますか?
  • このソースではPOSTで何も送信していませんが、問題ありませんか?
    リクエストを受けた側でエラーは起きていませんか?
  • 問題の行のあと、VM自体が死んでるわけではないですよね?
  • (VMは死んでないとして)実行しているスレッドは、問題行の後も生存していますか?

    • 生存している場合 ⇒ なんらかのロックに引っかかってませんか?
      あるいはPOSTリクエストの応答待ちをしているだけではありませんか?
    • 死んでる場合 ⇒ try { ... } catch (Throwable t) { t.printStackTrace(); }
      で原因は補足できるはずです。

  • そもそも、デバッガは使用できませんか?
    デバッガでステップ実行すれば一発で解決できそうな気がします。
ひろ
ベテラン
会議室デビュー日: 2003/12/26
投稿数: 97
投稿日時: 2006-11-09 15:54
引用:

未記入さんの書き込み (2006-11-09 15:37) より:
http://http://serv:1000/test_site/TESTとhttp://が2回繰り返し出力されているようですが、どこかでゴミが混じって、単にそのURLに接続できないだけではないですか?

接続できない場合を想定して、URLConnection#setConnectTimeout(int)を使用して、
タイムアウトを設定したら、処理が停止したようにはならないのではないでしょうか。



アドレスが変になっていたのは,ここに一旦投稿した後,セキュリティの問題上
アドレスをそのまま掲載する事は不味いかと思い修正しました。
その時に修正ミスをしていました。

スキルアップ/キャリアアップ(JOB@IT)