• 締切済み

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 ...

みんなの回答

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.3

>PublicでないObjectは、XMLEncoderで書き出せないのでしょうか トライしてみましたが、どうも無理そう・・・。 --- これ使ってみては? XStream http://journal.mycom.co.jp/articles/2006/09/21/xstream/index.html

  • kztk
  • ベストアンサー率53% (59/110)
回答No.2

#1です。 前言撤回します。 実際にやってみましたが、確かにclassをpublicにしないと例外がおきますねえ・・・

  • kztk
  • ベストアンサー率53% (59/110)
回答No.1

こんにちは。 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/

関連するQ&A

専門家に質問してみよう