量産メモ帳

忘れっぽいのでメモを残しています。

JAXBで生成するオブジェクトに Serializable を実装させる。

スポンサーリンク

そもそも何でこんな問題で悩んでるかと言うと、開発に当たって採用しているJAXBで生成したオブジェクト(ビーン)は、デフォルトでは Serializable を実装していないからだ。
Serializable がデフォルトで実装できない理由はこういった点にあるのだろうか?
http://www.itarchitect.jp/technology_and_programming/-/27074.html

※2 ただし、以下の方法により、異なるバージョンでも復元できる場合がある。

  • メソッドwriteObject/readObjectを実装し、バージョン間で整合性を保証したカスタム・シリアライズを実現する。両メソッドはprivateメソッドであり、またインタフェースSerializableはメソッドが用意されていないマーカ・インタフェースだが、同インタフェースをimplementsしたときにだけ、両メソッドを特別に定義できる仕組みになっている
  • シリアル・バージョンUIDをカスタム定義する。このシリアル・バージョンUIDは、「private static final long serialVersionUID」という名前で宣言する必要がある。また、ほかのクラスのシリアル・バージョンUIDと重複しないようにしなければならない

でも、JAXBで使用するXMLスキーマファイルに記述を追加すれば、Serializable が実装できることが分かったので、備忘録的に書いておく。
っていうか、以下のページの通りにやればできる。
JAXB RI 1.0.5 -- Vendor Customizations


    
        
            
                
            

        

    

:

また xjc タスクは以下の様な感じでantのビルドファイルで定義。(ちょっと端折ってます。)

  
    
  

  
    
  

  

しかし xjc:serializable 要素の uid 属性値を動的に変更できるのかどうかまでは分からず、また例えば"1"で統一してしまってもいいのかどうか判断できなかったため、最終的に開発の方針としてこの方法は採用されなかった。


で、結局、ゴリゴリ書く羽目に。。。