

Javaの経験は浅いです。  
Apache Tomcat/6.0.20 直下のlogを見ましたけど、特に異常はなさそうです。  
下記のエラーの解消方法を教えていただけますか？

**HTTPステータス**

> 500 -

**type 例外レポート メッセージ**

**説明**

> The server encountered an internal error () that prevented it from
> fulfilling this request.

**例外**

[code]

    java.lang.StringIndexOutOfBoundsException: String index out of range: -9
    java.lang.String.substring(String.java:1938)
    java.lang.String.substring(String.java:1905)
    pds.document.provider.PosFile.parseTag(PosFile.java:104)
    pds.document.provider.PatentDocument.init(PatentDocument.java:66)
    pds.servlet.ShowPatentDocument.showPatentDocumentImpl(ShowPatentDocument.java:116)
    pds.servlet.ShowPatentDocument.doPost(ShowPatentDocument.java:74)
    pds.servlet.ShowPatentDocument.doGet(ShowPatentDocument.java:38)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    
[/code]

**注意**

> 原因のすべてのスタックトレースは、Apache Tomcat/6.0.20のログに記録されています


CC BY-SA 3.0
2015-10-02T04:58:11.427
17170
2015-10-07T07:08:17.087
2015-10-03T15:16:22.727
12546
12546
question
java apache tomcat
HTTPステータス 500 エラーの調査及び解決方法を教えてください


何らかのソフトウェア製品を使われていてその利用上で生じているエラーのようですので、メーカーのサポート窓口に問い合わせてください。


CC BY-SA 3.0
2015-10-02T07:01:23.083
17177
2015-10-02T07:01:23.083
5793
17170
answer


Tomcatを使っていてHTTPステータス500エラーが出るのは、大抵の場合は、デプロイしたWebアプリにバグがあるか、何らかの設定が誤っているかのいずれかです。

具体的な原因を知るためには出力されたログを解析する必要があります。  
本件質問のスタックトレースで注目すべき箇所は次のところです。

[code]

    java.lang.StringIndexOutOfBoundsException: String index out of range: -9
    java.lang.String.substring(String.java:1938)
     :
    pds.document.provider.PosFile.parseTag(PosFile.java:104)
    pds.document.provider.PatentDocument.init(PatentDocument.java:66)
    
[/code]

エラーが出た直接の原因は

[code]

    java.lang.StringIndexOutOfBoundsException: String index out of range: -9
    java.lang.String.substring(String.java:1938)
    
[/code]

とあるように、文字列の中をsubstring()で参照しようとしたときに負の値を指定したことによるものです。  
[Java API String
substring](http://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#substring-
int-)

ではどこで負の値を指定したのかというと、

[code]

    pds.document.provider.PosFile.parseTag(PosFile.java:104)
    
[/code]

となっているので `PosFile.java` の104行目の可能性が高いです。  
おそらく`PosFile.parseTag()`メソッドに何らかのバグがあるのでしょう。あるいは`parseTag()`メソッドに渡される引数に誤りがあるのでしょう。具体的なことは該当するソースを見ないとわかりません。  
もしかすると、クラス名やメソッド名から察するにposファイルとやらの内容を解析しているようなので、そのposファイル自体が本来満たしているべき規約や規格に添っていない可能性もあります。

* * *

スタックトレースの見方については以下のリンクが参考になると思います。

  * [デバッグのヒント教えます（2）：スタックトレースからデバッグのヒントを読み取る - ＠IT](http://www.atmarkit.co.jp/ait/articles/0605/20/news012.html)


CC BY-SA 3.0
2015-10-02T07:04:08.277
17179
2015-10-03T15:21:21.033
2015-10-03T15:21:21.033
8000
10492
17170
answer


長く使っていたもので、アプリケーションを修正出来ないとすれば、使い方に問題がある可能性もありますね。スタックトレースの情報から
何かしらの入力された文字数が短すぎるか、添字の計算が間違っていると推測できます。

このエラーに再現性があるのであれば、異常時と正常時のデータを比較して、  
普段の使い方と違うところがないか確認するとなにか分かるかもしれません。

また、JAR しか無いのは紛失したのでしょうか？  
それとも ソースコードにアクセスする権限がないのでしょうか。  
その辺を確認して開発元なり、所有者に問合せしてみるのが良いと思います。


CC BY-SA 3.0
2015-10-02T07:40:35.667
17182
2015-10-02T07:40:35.667
5008
17170
answer


jarしかないとコメントにありますが、  
Tomcatでアプリケーションを動かしている場合、下記のディレクトリにアプリケーションのwarが展開されたフォルダが必ずあり、  
展開前のwarファイルも存在する可能性が高いです。

$tomcat_home/webapps

tomcatのディレクトリがApache Tomcat/6.0.20であれば、下記のディレクトリになると思います。  
Apache Tomcat/6.0.20/webapps

あと、気になった点が１点あります。  
質問では「Apache Tomcat/6.0.20直下のlogを見た」とありますが、  
通常Tomcatのログは以下のディレクトリにcatalina.outというファイル名で出力されます。  
$tomcat_home/logs

Apache Tomcat/6.0.20/logs/catalina.out  
というファイルはありませんか？


CC BY-SA 3.0
2015-10-07T07:08:17.087
17346
2015-10-07T07:08:17.087
12620
17170
answer