- PR -

ant.jarのZipFileクラスでIllegalAccessErrorが発生する

1
投稿者投稿内容
ロッキー
会議室デビュー日: 2002/08/14
投稿数: 2
投稿日時: 2004-09-27 14:38
こんにちは。

表題の件ですが、apache-antに含まれているant.jarをライブラリとして使用し、
Webアプリケーションを作成していますが、アプリケーションサーバを
TomcatからWeblogicに差し替えたとたんエラーが発生するようになりました。
環境、エラー内容は以下のとおりです。

環境-------------------------------------------------------
antのバージョン - 1.6.1
正常に動作していたAPサーバ - jakarta-tomcat-4.1.30
エラーが発生するAPサーバ - Weblogic8.1

スタックトレース-------------------------------------------

JVMにSun JDK1.4.2を使用した場合-----------------

Caused by: java.lang.IllegalAccessError: tried to access field org.apache.tools.zip.ZipOutputStream.EOCD_SIG from class org.apache.tools.zip.ZipFile
at org.apache.tools.zip.ZipFile.positionAtCentralDirectory(ZipFile.java:342)
at org.apache.tools.zip.ZipFile.populateFromCentralDirectory(ZipFile.java:237)
at org.apache.tools.zip.ZipFile.(ZipFile.java:143)
at org.apache.tools.zip.ZipFile.(ZipFile.java:103)

JVMにBEA JRockit81sp3_142_04を使用した場合-------

Caused by: java.lang.NoSuchMethodError:
at org.apache.tools.zip.ZipFile.populateFromCentralDirectory()V(ZipFile.java:247)
at org.apache.tools.zip.ZipFile.(Ljava.io.File;Ljava.lang.String;)V(ZipFile.java:143)
at org.apache.tools.zip.ZipFile.(Ljava.io.File;)V(ZipFile.java:103)

見たところ、アクセス圏外からフィールドにアクセスしている、というエラーのよう
なのですが・・・
いろいろな可能性を当たってみましたが、解決に至りません。

1.ZipFile、ZipOutputStreamのソースを確認してみた。
 → ZipOutputStreamクラスのprotected staticフィールド(EOCD_SIG)に、
  同じパッケージ内のZipFileクラスからアクセスしているので、問題は
  ないように見える。

2.EclipseのJDTを用いてコンパイルしていたのを、Sunのjavacでコンパイル
 しなおしてみた。→ 変化なし。

3.クラスローダの問題かと思い、WEB-INF/libからant.jarを削除してみた。
 → NoClassDefFoundErrorが発生。ちゃんと、Webアプリケーション用のクラスローダ
  を使用しているようだ。(システムクラスローダなどは使用されていない)

4.ソースと、ant.jarが別物になっている可能性も疑い、自分でビルドした
 ant.jarを使用してみた。→ 変化なし。

5.腹が立ったので、ZipOutputStream.EOCD_SIGをpublicに変更して自分でビルドした
 ant.jarを使用してみた。→ 変化なし(!)

https://bugs.eclipse.org/bugs/show_bug.cgi?id=60205
に、そっくりな症状が検索できたので何かヒントになるか?と思ったのですが、
このページではEclipseのバグだからバージョンアップしろ、で完結しているようです
(汗)

もし、同様の現象に遭遇した方や、なにかヒントになる情報を提供してくださる方
がいらっしゃると非常にありがたいと思います。
どなたかご助力お願いします。
ロッキー
会議室デビュー日: 2002/08/14
投稿数: 2
投稿日時: 2004-09-27 15:46
自己レスです。

ant.jarをjre/lib/extに置くか、Weblogicの起動シェルを修正してclasspathにant.jarを
含めるようにすると、正常に動作するようです。

おそらく、Weblogic8のWebアプリクラスローダのバグだと思われます。
なんかWeblogic、バグ多すぎだぞ・・・(:_;)
JSPもrtexprvalueちゃんと解釈しないし。
すいません、愚痴です。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-09-28 02:30
WebLogic には ant が内蔵されていますので、別のバージョンをアプリケーションのクラスローダ配下に置いて利用するようなことをすればおかしなことになります。ant関連のライブラリを外してもうまくうごくのではないでしょうか?

>なんかWeblogic、バグ多すぎだぞ・・・(:_;)
というわけで、使い方の問題ではないでしょうか?
おかしな点があればサポートに連絡すれば良いですし。オープンソースの製品使うよりよっぽど楽ですよ。

[ メッセージ編集済み 編集者: インギ 編集日時 2004-09-28 02:50 ]
1

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