jp.terasoluna.fw.oxm.mapper.castor
クラス CastorOXMapperImpl

java.lang.Object
  上位を拡張 jp.terasoluna.fw.oxm.mapper.castor.CastorOXMapperImpl
すべての実装されたインタフェース:
OXMapper

public class CastorOXMapperImpl
extends java.lang.Object
implements OXMapper

Castorを利用したオブジェクト-XML変換クラス。

オブジェクト-XMLの変換を明示的に指定する場合は、Castorマッピング定義ファイルが必要となる。 一つのCastorマッピング定義ファイルでオブジェクト→XML、XML→オブジェクト 相互の変換を行うことができる。 Castorマッピング定義ファイルは変換を行うオブジェクトのクラスと 同じパッケージ、同じ名前、拡張子”.xml”で配置すること。

Castorマッピング定義ファイルを省略した場合は、Castorのデフォルト変換ルールが適用される。

デフォルト変換を使用する場合のオプション デフォルト変換を使用する場合は、CastorのXMLネーミングオプションを 下記のように mixed と指定しておくこと。
castor.properties org.exolab.castor.xml.naming=mixed

このオプションの設定有無によって、下記のようにMarshall時の出力XMLが変化する。
デフォルトのままだと、Unmarshall時に問題があるため、このオプションを設定する。
【org.exolab.castor.xml.naming=lower (デフォルト)】 UserBean → <user-bean>
【org.exolab.castor.xml.naming=mixed】 UserBean → <userBean>

例)XML変換対象のオブジェクトが「sample.SampleBean」クラスの場合、 Castorマッピング定義ファイルはクラスパス上の「sample/SampleBean.xml」 ファイルとなる。

Castorマッピング定義ファイルの記述方法は、 Castorの仕様に準じている。 詳細はTERASOUNAのドキュメントを参照すること。

本クラスでは、一度Castorマッピング定義ファイルを読み込むと 内部でキャッシュされる。 キャッシュを利用しない場合、本クラスの cache属性をfalseにすること。

使用例

【変換対象のオブジェクト】

       public class SampleDto {
           private int userid;
           private String username;
           private Item[] item;
           ・・・
           (getter、setter)
       }
       public class Item {
           private int id;
           private String name;
           private int price;
           ・・・
           (getter、setter)
       }
 

【変換対象のXMLデータ】

       <sample-dto>
        <user-id>15</user-id>
        <user-name>user1</user-name>
        <item>
          <id>100</id>
          <name>item1</name>
          <price>1000</price>
        </item>
        <item>
          <id>101</id>
          <name>item2</name>
          <price>2000</price>
        </item>
       </sample-dto>
 

【変換対象のオブジェクト】

       SampleDto[0].userid[0] = 15
       SampleDto[0].name[0] = user1
       SampleDto[0].Item[0].id[0] = 100
       SampleDto[0].Item[0].name[0] = "item1"
       SampleDto[0].Item[0].price[0] = 1000
       SampleDto[0].Item[1].id[0] = 101
       SampleDto[0].Item[1].name[0] = "item2"
       SampleDto[0].Item[1].price[0] = 200
 

【Castorマッピング定義ファイル】

       <?xml version="1.0" encoding="UTF-8"?>
       <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version 1.0//EN"
                                       "http://castor.exolab.org/mapping.dtd">
       <mapping>
         <class name="sample.dto.SampleDto">
           <map-to xml="sample-dto"/>
           <field name="userid" type="int">
             <bind-xml name="user-id" node="element"/>
           </field>
            <field name="username" type="string">
             <bind-xml name="user-name" node="element"/>
           </field>
           <field name="item" type="sample.dto.Item" collection="array">
             <bind-xml name="Item" node="element"/>
          </field>
         </class>
         <class name="sample.dto.Item">
           <field name="id" type="int">
           </field>
           <field name="name" type="string">
           </field>
           <field name="price" type="int">
           </field>
         </class>
       </mapping> 
 

【実装コード(XML→オブジェクト)】


 CastorOXMapper oxmapper = new CastorOXMapperImpl();
 SampleDto bean = new SampleDto(); // このオブジェクトにXMLデータが格納される
 Reader reader = new FileReader("C:/sample/sampleDto.xml"); // 変換するXMLデータ
 
 // XML→オブジェクト変換
 oxmapper.unmarshal(reader, bean);
 

【実装コード(オブジェクト→XML)】


 CastorOXMapper oxmapper = new CastorOXMapperImpl();
 Writer writer = new OutputStreamWriter(System.out);
 
 // オブジェクト→XML
 oxmapper.marshal(bean, writer);
 

関連項目:
XMLServletRequestDataBinder

フィールドの概要
private  boolean cache
          Castorマッピング定義ファイルのキャッシュ設定。
static java.lang.String CASTOR_MAPPINGFILE_SUFFIX
          Castorマッピング定義ファイルのサフィックス。
private  java.lang.String charset
          文字セット。
protected static java.lang.String DEFAULT_CHARSET
          デフォルトの文字セット。
private  java.util.Set<java.lang.Class> hasSetMappingSetForMarshaller
          Marshallerに設定済みのCastorマッピングのClassの集合。
private  boolean indenting
          Marshallerオプション indentingにtrueを設定すると、生成されるxmlがインデントされる。
private static org.apache.commons.logging.Log log
          ログクラス。
private  java.util.Map<java.lang.Class,org.exolab.castor.mapping.Mapping> mappingFileCache
          Castorマッピング定義ファイルをキャッシュするMap。
static java.lang.String NESTED_FOLDER_SEPARATOR
          フォルダのセパレータ。
static java.lang.String NESTED_PACKAGE_SEPARATOR
          パッケージのセパレータ。
private  boolean preserveWhitespaceAtMarshal
          Marshallerオプション preserveWhitespaceにtrueを設定すると、 生成するドキュメントのルートノードに「xml:space="preserve"」を付与する。
private  boolean preserveWhitespaceAtUnmarshal
          Unmarshallerオプション whitespacePreserveにtrueを設定すると、トップレベルの空白を保持するようになる。
private  org.exolab.castor.xml.XMLClassDescriptorResolver sharedResolverForMarshaller
          Marshallerで共有するXMLClassDescriptorResolver。
private  boolean suppressXSIType
          Marshallerオプション suppressXSITypeにfalseを設定するとマッピング定義無設定時に 生成するドキュメントに「xmlns:xsi」及び「xsi:type」を付与する
 
コンストラクタの概要
CastorOXMapperImpl()
           
 
メソッドの概要
protected  org.exolab.castor.xml.Marshaller createMarshaller(java.lang.Object in, java.io.Writer writer)
          マーシャラーを生成する。
protected  org.exolab.castor.xml.Unmarshaller createUnmarshaller(java.lang.Object out)
          アンマーシャラーを生成する。
protected  org.exolab.castor.mapping.Mapping getCastorMapping(java.lang.Class mappingClass)
          Castorマッピング定義ファイルを取得する。
 java.lang.String getCharset()
          文字セットを取得する。
protected  java.lang.String getMappingFilePath(java.lang.Class mappingClass)
          Castorマッピングファイルのパスを取得する。
protected  java.net.URL getUrl(java.lang.Class mappingClass)
          URLを取得する。
 boolean isCache()
          cacheを取得する。
 boolean isIndenting()
          indentingを取得する。
 boolean isPreserveWhitespaceAtMarshal()
          preserveWhitespaceAtMarshalを取得する。
 boolean isPreserveWhitespaceAtUnmarshal()
          preserveWhitespaceAtUnmarshalを取得する。
 boolean isSuppressXSIType()
          suppressXSITypeを取得する。
 void marshal(java.lang.Object in, java.io.Writer writer)
          オブジェクトをXMLに変換し、ストリームに書き込む。
 void setCache(boolean cache)
          cacheを設定する。
 void setCharset(java.lang.String charset)
          文字セットを設定する。
 void setIndenting(boolean indenting)
          Marshallerオプション indentingを設定する

trueを設定すると、生成されるxmlがインデントされる。
 void setPreserveWhitespaceAtMarshal(boolean preserveWhitespaceAtMarshal)
          Marshallerオプション preserveWhitespaceを設定する。
 void setPreserveWhitespaceAtUnmarshal(boolean preserveWhitespaceAtUnmarshal)
          Unmarshallerオプション whitespacePreserveを設定する。
 void setSuppressXSIType(boolean suppressXSIType)
          Marshallerオプション suppressXSIType

Castorマッピング無設定化時にスキーマバリデータを適用する場合にtrueを設定する。
 void unmarshal(org.w3c.dom.Document doc, java.lang.Object out)
          DOMツリーをオブジェクトに変換する。
 void unmarshal(java.io.InputStream is, java.lang.String argCharset, java.lang.Object out)
          ストリームからXMLデータを取り出し、オブジェクトに変換する。
 void unmarshal(java.io.Reader reader, java.lang.Object out)
          ストリームからXMLデータを取り出し、オブジェクトに変換する。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

log

private static org.apache.commons.logging.Log log
ログクラス。


DEFAULT_CHARSET

protected static final java.lang.String DEFAULT_CHARSET
デフォルトの文字セット。

関連項目:
定数フィールド値

charset

private java.lang.String charset
文字セット。


cache

private boolean cache
Castorマッピング定義ファイルのキャッシュ設定。デフォルトはtrue。


suppressXSIType

private boolean suppressXSIType
Marshallerオプション suppressXSITypeにfalseを設定するとマッピング定義無設定時に 生成するドキュメントに「xmlns:xsi」及び「xsi:type」を付与する


preserveWhitespaceAtMarshal

private boolean preserveWhitespaceAtMarshal
Marshallerオプション preserveWhitespaceにtrueを設定すると、 生成するドキュメントのルートノードに「xml:space="preserve"」を付与する。
デフォルト値はtrueである。 全電文に対して有効になるため、使用には注意が必要。


preserveWhitespaceAtUnmarshal

private boolean preserveWhitespaceAtUnmarshal
Unmarshallerオプション whitespacePreserveにtrueを設定すると、トップレベルの空白を保持するようになる。
デフォルト値はfalseである。 全電文に対して有効になるため、使用には注意が必要。


indenting

private boolean indenting
Marshallerオプション indentingにtrueを設定すると、生成されるxmlがインデントされる。
※注意:preserveWhitespaceAtMarshal が false の時のみ有効


NESTED_PACKAGE_SEPARATOR

public static final java.lang.String NESTED_PACKAGE_SEPARATOR
パッケージのセパレータ。

関連項目:
定数フィールド値

NESTED_FOLDER_SEPARATOR

public static final java.lang.String NESTED_FOLDER_SEPARATOR
フォルダのセパレータ。

関連項目:
定数フィールド値

CASTOR_MAPPINGFILE_SUFFIX

public static final java.lang.String CASTOR_MAPPINGFILE_SUFFIX
Castorマッピング定義ファイルのサフィックス。

関連項目:
定数フィールド値

mappingFileCache

private java.util.Map<java.lang.Class,org.exolab.castor.mapping.Mapping> mappingFileCache
Castorマッピング定義ファイルをキャッシュするMap。


sharedResolverForMarshaller

private org.exolab.castor.xml.XMLClassDescriptorResolver sharedResolverForMarshaller
Marshallerで共有するXMLClassDescriptorResolver。


hasSetMappingSetForMarshaller

private java.util.Set<java.lang.Class> hasSetMappingSetForMarshaller
Marshallerに設定済みのCastorマッピングのClassの集合。

コンストラクタの詳細

CastorOXMapperImpl

public CastorOXMapperImpl()
メソッドの詳細

unmarshal

public void unmarshal(org.w3c.dom.Document doc,
                      java.lang.Object out)
DOMツリーをオブジェクトに変換する。

定義:
インタフェース OXMapper 内の unmarshal
パラメータ:
doc - DOMツリー。
out - XMLから変換されたオブジェクト。

unmarshal

public void unmarshal(java.io.Reader reader,
                      java.lang.Object out)
ストリームからXMLデータを取り出し、オブジェクトに変換する。

定義:
インタフェース OXMapper 内の unmarshal
パラメータ:
reader - XMLデータ。文字セットが指定されていない場合、 VMのデフォルト文字セットが使用される。
out - XMLから変換されたオブジェクト。

unmarshal

public void unmarshal(java.io.InputStream is,
                      java.lang.String argCharset,
                      java.lang.Object out)
ストリームからXMLデータを取り出し、オブジェクトに変換する。

引数argCharsetがnullまたは空文字の場合、 InputStreamReaderの文字セットとして属性charsetの値が使用される。
デフォルト設定では、属性charsetの値は"UTF-8"である。

定義:
インタフェース OXMapper 内の unmarshal
パラメータ:
is - XMLデータ。
argCharset - 文字セット。
out - XMLから変換されたオブジェクト。

createUnmarshaller

protected org.exolab.castor.xml.Unmarshaller createUnmarshaller(java.lang.Object out)
アンマーシャラーを生成する。 Castorマッピング定義の設定を行う。

パラメータ:
out - 出力対象のオブジェクト
戻り値:
アンマーシャラー

marshal

public void marshal(java.lang.Object in,
                    java.io.Writer writer)
オブジェクトをXMLに変換し、ストリームに書き込む。

定義:
インタフェース OXMapper 内の marshal
パラメータ:
in - XMLに変換するオブジェクト
writer - 変換したXMLを書き込むライター

createMarshaller

protected org.exolab.castor.xml.Marshaller createMarshaller(java.lang.Object in,
                                                            java.io.Writer writer)
マーシャラーを生成する。 Castorマッピング定義を設定する。

パラメータ:
in - XML変換対象のオブジェクト
writer - 出力用ライター
戻り値:
マーシャラー

getCastorMapping

protected org.exolab.castor.mapping.Mapping getCastorMapping(java.lang.Class mappingClass)
Castorマッピング定義ファイルを取得する。 cache属性がtrueの場合、読み込んだCastorマッピング定義ファイルを キャッシュする。falseの場合、キャッシュは行わない。

パラメータ:
mappingClass - マッピング対象のクラス
戻り値:
Castorマッピング定義ファイル

getUrl

protected java.net.URL getUrl(java.lang.Class mappingClass)
URLを取得する。

パラメータ:
mappingClass - マッピング対象のクラス
戻り値:
リソースのURLインスタンス

getMappingFilePath

protected java.lang.String getMappingFilePath(java.lang.Class mappingClass)
Castorマッピングファイルのパスを取得する。

パラメータ:
mappingClass - マッピングするクラス。
戻り値:
Castorマッピングファイルのパス

isCache

public boolean isCache()
cacheを取得する。

戻り値:
cache属性

isIndenting

public boolean isIndenting()
indentingを取得する。

戻り値:
indenting属性

isPreserveWhitespaceAtMarshal

public boolean isPreserveWhitespaceAtMarshal()
preserveWhitespaceAtMarshalを取得する。

戻り値:
preserveWhitespaceAtMarshal属性

isPreserveWhitespaceAtUnmarshal

public boolean isPreserveWhitespaceAtUnmarshal()
preserveWhitespaceAtUnmarshalを取得する。

戻り値:
preserveWhitespaceAtUnmarshal属性

isSuppressXSIType

public boolean isSuppressXSIType()
suppressXSITypeを取得する。

戻り値:
suppressXSIType属性

setCache

public void setCache(boolean cache)
cacheを設定する。

パラメータ:
cache - cache属性に設定する値

getCharset

public java.lang.String getCharset()
文字セットを取得する。

戻り値:
文字セット。

setCharset

public void setCharset(java.lang.String charset)
文字セットを設定する。

パラメータ:
charset - 文字セット。

setSuppressXSIType

public void setSuppressXSIType(boolean suppressXSIType)
Marshallerオプション suppressXSIType

Castorマッピング無設定化時にスキーマバリデータを適用する場合にtrueを設定する。

falseを設定するとネストしたBeanをMarshallする時に、 生成するXMLドキュメントに「xmlns:xsi」及び「xsi:type」を付与する。
このネームスペースが付与されると、Castorマッピング無設定化時に スキーマバリデータを使用した場合、正しくUnmarshallできない。
そのため、スキーマバリデータを使用する場合には、このオプションをtrueに 設定する。
false
       <resultReserveParam>
         <reserveDetailList 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:type="java:sample.ReserveDetail">
         </reserveDetailList>
       </resultReserveParam>
 

true(デフォルト)
       <resultReserveParam>
         <reserveDetailList>
         </reserveDetailList>
       </resultReserveParam>
 

パラメータ:
suppressXSIType - 設定する suppressXSIType

setPreserveWhitespaceAtUnmarshal

public void setPreserveWhitespaceAtUnmarshal(boolean preserveWhitespaceAtUnmarshal)
Unmarshallerオプション whitespacePreserveを設定する。

trueを設定すると、全ての要素について空白を保持 したままアンマーシャルが行われる。
falseの場合でも、「xml:space="preserve"」が指定された 要素については、空白を保持したままアンマーシャルされる。 全電文に対して有効になるため、使用には注意が必要である。 デフォルト値はfalse

パラメータ:
preserveWhitespaceAtUnmarshal - 設定する whitespacePreserve

setPreserveWhitespaceAtMarshal

public void setPreserveWhitespaceAtMarshal(boolean preserveWhitespaceAtMarshal)
Marshallerオプション preserveWhitespaceを設定する。

trueを設定すると生成するドキュメントのルートノードに 「xml:space="preserve"」を付与する。
全電文に対して有効になるため、使用には注意が必要である。 デフォルト値はtrue

false
       <resultReserveParam>
         <reserveDetailList>
         </reserveDetailList>
       </resultReserveParam>
 

true(デフォルト)
       <resultReserveParam xml:space="preserve">
         <reserveDetailList>
         </reserveDetailList>
       </resultReserveParam>
 

*

パラメータ:
preserveWhitespaceAtMarshal - 設定するpreserveWhitespace

setIndenting

public void setIndenting(boolean indenting)
Marshallerオプション indentingを設定する

trueを設定すると、生成されるxmlがインデントされる。

※注意:preserveWhitespaceAtMarshal が false の時のみ有効

パラメータ:
indenting - 設定する indenting