- - PR -
BufferedImageをシリアライズして、JSPから使用したい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-25 22:38
掲題について教えて頂きたく、投稿します。 【環境】 Win2k Tomcat5.0.x jdk1.4.1 【作業内容】 BufferedImageをシリアライズするべく、Serializableインターフェイスを実装したサブクラスを作成。 また、BufferedImageのprotectedフィールドをシリアライズの際にバイナリで出力すべく、サブクラスにはBufferedImageと同じパッケージ(java.awt.image)を指定。 しかし、このサブクラスをjspでインスタンス作成しますとjava.lang.NoClassDefFoundErrorとなり上手くいきません。 自分で作成したパッケージや、javax.namingなどのパッケージに置いたクラスは問題なくjspファイルからインスタンス作成するのは問題なく行えるのですが…… なお、クラスファイルの位置はアプリケーションフォルダ配下のWEB-INFにclasses\java\awt\image\クラス名という構成で配置されています。 何かお気づきの点があれば、ご指摘お願いします。 | ||||
|
投稿日時: 2006-05-26 01:33
protectedフィールドをアクセスしたいだけであれば java.awt.imageパッケージな必要はないのでは? NoClassDefFoundErrorとなるのは、WebappClassLoaderがjava.で始まる パッケージの場合は無条件にシステム側のクラスローダを使うからです。 これにより/WEB-INF/classes/java/以下のクラスは完全に無視されます。 手元にあったTomcatのソース(5.5.9)では、 org.apache.catalina.loader.WebappClassLoader#findClassInternal(String) がjava.で始まるクラスの場合に常にClassNotFoundExceptionを送出する実装に なっていました(探索を打ち切ってシステム側にdelegateする事になります)。 API仕様にも、java.で始まるパッケージのクラスをdefineClass()で 定義しようとするとSecurityExceptionが飛ぶと書いています。 | ||||
|
投稿日時: 2006-05-29 23:57
ご返答ありがとうございます。 >API仕様にも、java.で始まるパッケージのクラスをdefineClass()で 定義しようとするとSecurityExceptionが飛ぶと書いています。 そうですね。Tomcatを通さずに、VMだけで起動するとそのエラーが出ました。お手数かけさせてしまい申し訳ありません。 >protectedフィールドをアクセスしたいだけであれば java.awt.imageパッケージな必要はないのでは? 無名パッケージでもいけるかもしれないですね。 ただ、Tomcatが不慣れなので、どうも無名パッケージだと上手くクラスが認識されないです。 少し明日試してみます。 ご指摘ありがとうございました。 |
1