- 締切済み
public でないObjectはXMLEncoderで書き出せない?
PublicでないObjectは、XMLEncoderで書き出せないのでしょうか? 以下のような処理を作成し、実行するとIllegalAccessExceptionが発生してしまいます。 PublicでないObject(Data)に対して、seAccessible(true)が設定できればいけそうなのですが、やり方がわからず悩んでいます。 class Data implements java.io.Serializable { public String m = "a"; public Data() { } public static void main (String args[]) throws Exception { Data data = new Data(); XMLEncoder e = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("/tmp/data.xml"))); e.writeObject(data ); e.close(); } } # java Data java.lang.IllegalAccessException: Class java.beans.Statement can not access a member of class Data with modifiers "public" Continuing ... java.lang.Exception: discarding statement XMLEncoder0.writeObject(Data0); Continuing ...
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kacchann
- ベストアンサー率58% (347/594)
>PublicでないObjectは、XMLEncoderで書き出せないのでしょうか トライしてみましたが、どうも無理そう・・・。 --- これ使ってみては? XStream http://journal.mycom.co.jp/articles/2006/09/21/xstream/index.html
- kztk
- ベストアンサー率53% (59/110)
#1です。 前言撤回します。 実際にやってみましたが、確かにclassをpublicにしないと例外がおきますねえ・・・
- kztk
- ベストアンサー率53% (59/110)
こんにちは。 XMLEncoderだなんて、最近のJavaは便利なものがあるんですねえ・・・ can not access a member of class Data with modifiers "public" というエラーメッセージですが、 with modifiers "public" はclass Dataではなく、a memberにかかるのではないでしょうか。つまり、問題は public String m = "a"; の部分であるような気がします。 XMLEncoder(初めて知りました)について書いてある資料をざっと見てみましたが、対象はJavaBeansの考え方に沿って扱われるんですよね? だとすると、ここはmをprivateとし、アクセッサメソッドを用意するのが普通のはずです。 ご参考: 『JavaBeansのJavaBeansたるゆえん』 http://www.atmarkit.co.jp/fjava/rensai3/tomcat07/tomcat07.html ※この続きの第8回に関連する話が出てきます。 JavaBeansでないクラスを扱う方法についてはこんな記事がありました。 『Using XMLEncoder』 http://java.sun.com/products/jfc/tsc/articles/persistence4/