SAStruts/トラブルシューティング

目次

SAStruts/トラブルシューティング

絶対すんなり進むことが無いJava開発なのでもうしょうがないねコレは

SAStrtusそのものじゃないけど開発中に遭遇したエラーはここに書いておく。

Tomcat 起動時にInvalid byte 1 of 1-byte UTF-8 sequence.と表示されて起動しない

起動しないのだ。

数字の部分は環境によってまちまちらしい。Windows環境でhotdeploy時じ発生した。

原因はjdbc.diconに書いてあるMySQLの文字化けに対する文字化けないための tips の文字コードみたいだ。

Linux環境では発生しないのだがWindows環境ではこれをShift-JISで書かれていると解釈してしまうらしくぶっ壊れて読めねーよボケ!と言われる。

なのでこのコメント部分を削除すればとりあえず回避できる。 他のdiconファイルにも日本語があるならば削除するといいかも

Tomcat 起動時に「リソース(app.dicon)が見つかりません」と表示されて起動しない

おそらく Eclipse のメニューの「Project」の中の「Build Automatically(自動的にビルド)」のチェックが外れている

S2JDBC-Gen 起動時に SLF4J: Class path contains multiple SLF4J bindings.と表示されてコケる

エラーメッセージにも書いてあるんだが logback のような slf4j に依存性がある jar の中にもうすでに slf4j がビルドインされている場合、別にオリジナルの slf4j をクラスパスに含めているとコケる

どうにかしてどちらかをクラスパスから外すとコケなくなる。

このへんにJavaのパッケージ管理の限界を感じる

GET で渡したパラメータが文字化けする

Tomcat本体のconf/server.xmlの8080番ポートの設定が書いてある所に

    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               useBodyEncodingForURI="true"
               redirectPort="8443" />

↓を追記する

useBodyEncodingForURI="true"

どんなに対策しても hotdeploy で動いていたものが cooldeploy で動かなくなる

つまりcooldeployで起動すると、DI関係のエラーが出まくってactionがひらけなくなったりとかいろいろ挙動がおかしくなる

OSを丸々再起動したら回避できたりする。

サーバからサーバへ通信するプログラム書いたらレスポンスが戻ってこない

hotdeploy が処理できるのは1リクエストのみ。なのでブラウザからのアクセスで一杯一杯になってしまう。

サーバへのアクセスでサーバがサーバに通信するような処理を書いた場合ブラウザはサーバのレスポンスを待ち、サーバはブラウザの通信が終わるのを待つのでデッドロックになってしまう

Hotdeploy が効かなくなった

なんかの弾みでHotdeployが効かず、ソースコードを修正しても結果に反映されなくなることがあった。

Eclipse の Project の build automatically が何らかの原因で外れている可能性がある。

突然有る特定の Action だけエラーになるようになった

これは Java8 の問題でもあり、動作させなくても同じプロジェクト中に Java8 のコード(ラムダとか stream とか)があった場合、AOP を司る「javassist」が古い場合おかしくなったりする。

この場合 javassist のバージョンを Java8 対応のモノに差し替えると解決する。

これはバイトコードの並びに依存するようで、Java8 コードが有っても運良く動いてしまう場合もある。 ここで、プロジェクト全体で大きくファイル構成やクラス構成、ソースの並びを変更した場合に突然何も関係なかった部分でエラーが出たりする。

チェックボックスのチェック外しているのに値が反映されない

Form 中の一部の値が反映されず固定値になってしまう

resetメソッドが怪しい

Form 中の一部の値が送信されない、または値がおかしくなってしまう

100 個を超えるような大量の値を一気にブラウザ側から送信するとそうなる可能性がある。

ApplicationDispatcher で NumberFormatException

parseIntでミスってしまうことがある

hoge[0]=a&hoge[1]=b

とかいうパラメータで来る予定が

hoge[]=a&hoge[]=b

こんな感じで来るとなる

JSP で property not found になる

なにやら深くネストしているプロパティに対してはgetterが生成されないらしく、それでこけているっぽい。

なので、Map の中の List の中のエンティティの中のプロパティみたいな深い部分の値にアクセスできなくなる。

getter を生成してくれないから、エラーになるので、明示的に書いてやれば回避できる。

まーそれよりも深い入れ子の設計を見なおせというフレームワークからのメッセージと捉えて設計を改めるほうがいいと思う。

Eclipse からの Tomcat 起動時の Filter の処理で ClassNotFound

$ mvn war:inplace

全選択のURLパターンは複数...

のようなエラーが出る。その画面からリンクされているActionに同一の urlPattern が指定されている場合に出る。

S2Junit4 で個別にテストメソッドを実行しようとして NoSuchMethodError

java.lang.NoSuchMethodError: org.junit.runner.manipulation.Filter.apply(Lorg/junit/runner/Runner;)V

みたいなのが出る。

使っているjunitのバージョンが新しすぎると出る。4.4にすべし! 個別にテストできないだけであって、まとめて全部はできる。

Errors : java.io.UTFDataFormatException Invalid byte 2 of 3-byte UTF-8 sequence maven

ビルド時に出たりする。

resources のエンコードを直接指定すると回避できる。

<build>
    <plugin> 
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId> 
        <configuration> 
            <encoding>utf-8</encoding> 
        </configuration> 
    </plugin> 
</build>

Windows 環境で何かの弾みでこの状態になることが多い。

本体はちゃんと動くのだがテストの際に「com.mysql.jdbc.Driver を設定できませんでした」となる

SAStruts の本体側とテストは別のシステムで JDBC Driver の JAR へのビルドパスを本体とはまた別に指定してやる必要がある。

起動時に struts-config.xml に対するリソース読み込みエラー

Tomcat Plugin に設定するコンテキスト名を明示的にスラッシュから始まるものにしないと出る可能性がある。

Tomcat Plugin の設定値が反映されない

多分 プラグインがバグっている。 プロジェクトのディレクトリの .tomcatplugin の中をエディタで直修正することで回避できる。

mvn eclipse:eclipse のビルドが失敗して error になる

以前はできていたのの突然できなくなった場合は .m/repository ディレクトリを削除してやりなおすと出来る場合がある。

タグ

java/sastruts/troubleshooting.txt · 最終更新: 2018-03-02 09:44 by ore