DozerをDxoに適用する

 Java BeanマッピングライブラリであるDozerをS2StrutsアプリのDxoに適用してみました。Commons BeanUtilsと比べて何が優れているかまだ良くわかりませんが、とりあえず実験です。XMLの定義により細かなマッピング制御ができるようです。

事前準備

 http://sourceforge.net/project/showfiles.php?group_id=133517 からDozerをダウンロードします。distフォルダにdozer-2.0.1.jarがあるので、プロジェクトのクラスパスに追加します。
 また、下記のライブラリを利用しているので必要に応じて、クラスパスに追加します。

  • commons-beanutils.jar 1.7
  • commons-collections.jar 3.1
  • commons-lang.jar 2.1
  • commons-logging.jar 1.03
  • log4j.jar 1.2.8

dxo.diconファイルの作成

 dxo.diconを作成して、Dozerをコンポーネントとして登録します。


  
    {"dozerBeanMapping.xml"}
  


alldxo.diconファイルの作成

 プロジェクトで利用するdxoコンポーネントとして登録します。


  
  

  
    aop.traceInterceptor
  

@org.seasar.framework.container.deployer.InstanceDefFactory@SINGLETON "sample.dxo.impl" ".*DxoImpl" dxoInterceptorChain "sample.dxo.impl" ".*DxoImpl"


dozerBeanMapping.xmlファイルの作成

 マッピング情報を定義するdozerBeanMapping.xmlファイルを作成します。とりあえず、マッピングエラーを無視する設定にしています。


  
    false
  


Dxoインタフェースの作成

 Dtoの変換を行うDxoインタフェースを作成します。

public interface DataDxo {
    public void copyDtoToEntity(EntryDto entryDto, DataEntity dataEntity);
}


Dxoクラスの作成

 Dtoの変換を行うDxoクラスを作成します。

public class DataDxoImpl implements DataDxo {
    private MapperIF mapper;
    public void setMapper(MapperIF mapper) {
        this.mapper = mapper;
    }
    public void copyDtoToEntity(EntryDto entryDto, DataEntity dataEntity){
        mapper.map(entryDto, dataEntity);
    }
}