|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectjp.terasoluna.fw.oxm.mapper.castor.CastorOXMapperImpl
public class CastorOXMapperImpl
Castorを利用したオブジェクト-XML変換クラス。
オブジェクト-XMLの変換を明示的に指定する場合は、Castorマッピング定義ファイルが必要となる。 一つのCastorマッピング定義ファイルでオブジェクト→XML、XML→オブジェクト 相互の変換を行うことができる。 Castorマッピング定義ファイルは変換を行うオブジェクトのクラスと 同じパッケージ、同じ名前、拡張子”.xml”で配置すること。
Castorマッピング定義ファイルを省略した場合は、Castorのデフォルト変換ルールが適用される。
例)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);
jp.terasoluna.fw.web.rich.springmvc.bind.XMLServletRequestDataBinder
フィールドの概要 | |
---|---|
static String |
CASTOR_MAPPINGFILE_SUFFIX
Castorマッピング定義ファイルのサフィックス。 |
protected static String |
DEFAULT_CHARSET
デフォルトの文字セット。 |
static String |
NESTED_FOLDER_SEPARATOR
フォルダのセパレータ。 |
static String |
NESTED_PACKAGE_SEPARATOR
パッケージのセパレータ。 |
コンストラクタの概要 | |
---|---|
CastorOXMapperImpl()
|
メソッドの概要 | |
---|---|
protected org.exolab.castor.xml.Marshaller |
createMarshaller(Object in,
Writer writer)
マーシャラーを生成する。 |
protected org.exolab.castor.xml.Unmarshaller |
createUnmarshaller(Object out)
アンマーシャラーを生成する。 |
protected org.exolab.castor.mapping.Mapping |
getCastorMapping(Class mappingClass)
Castorマッピング定義ファイルを取得する。 |
String |
getCharset()
文字セットを取得する。 |
protected String |
getMappingFilePath(Class mappingClass)
Castorマッピングファイルのパスを取得する。 |
protected XMLClassDescriptorResolverAndMappedClassSet |
getResolverAndMappedClassSetForMarshaller(Class mappingClass)
MarshallerにセットするXMLClassDescriptorResolverと、 マッピング定義反映済みクラス集合のペア(XMLClassDescriptorResolverAndMappedClassSet)を取得する。 |
protected URL |
getUrl(Class mappingClass)
URLを取得する。 |
boolean |
isCache()
cacheを取得する。 |
boolean |
isIndenting()
indentingを取得する。 |
boolean |
isPreserveWhitespaceAtMarshal()
preserveWhitespaceAtMarshalを取得する。 |
boolean |
isPreserveWhitespaceAtUnmarshal()
preserveWhitespaceAtUnmarshalを取得する。 |
boolean |
isSuppressXSIType()
suppressXSITypeを取得する。 |
boolean |
isUseDifferentResolverForEachOutputClass()
useDifferentResolverForEachOutputClassを取得する。 |
void |
marshal(Object in,
Writer writer)
オブジェクトをXMLに変換し、ストリームに書き込む。 |
void |
setCache(boolean cache)
cacheを設定する。 |
void |
setCharset(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 |
setUseDifferentResolverForEachOutputClass(boolean useDifferentResolverForEachOutputClass)
Marshallerオプション useDifferentResolverForEachOutputClassを設定する trueを設定すると、出力クラスごとに異なるXMLClassDescriptorResolverを使用する。 |
void |
unmarshal(Document doc,
Object out)
DOMツリーをオブジェクトに変換する。 |
void |
unmarshal(InputStream is,
String argCharset,
Object out)
ストリームからXMLデータを取り出し、オブジェクトに変換する。 |
void |
unmarshal(Reader reader,
Object out)
ストリームからXMLデータを取り出し、オブジェクトに変換する。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
フィールドの詳細 |
---|
protected static final String DEFAULT_CHARSET
public static final String NESTED_PACKAGE_SEPARATOR
public static final String NESTED_FOLDER_SEPARATOR
public static final String CASTOR_MAPPINGFILE_SUFFIX
コンストラクタの詳細 |
---|
public CastorOXMapperImpl()
メソッドの詳細 |
---|
public void unmarshal(Document doc, Object out)
OXMapper
内の unmarshal
doc
- DOMツリー。out
- XMLから変換されたオブジェクト。public void unmarshal(Reader reader, Object out)
OXMapper
内の unmarshal
reader
- XMLデータ。文字セットが指定されていない場合、 VMのデフォルト文字セットが使用される。out
- XMLから変換されたオブジェクト。public void unmarshal(InputStream is, String argCharset, Object out)
引数argCharsetがnullまたは空文字の場合、 InputStreamReaderの文字セットとして属性charset
の値が使用される。
デフォルト設定では、属性charset
の値は"UTF-8"である。
OXMapper
内の unmarshal
is
- XMLデータ。argCharset
- 文字セット。out
- XMLから変換されたオブジェクト。protected org.exolab.castor.xml.Unmarshaller createUnmarshaller(Object out)
out
- 出力対象のオブジェクト
public void marshal(Object in, Writer writer)
OXMapper
内の marshal
in
- XMLに変換するオブジェクトwriter
- 変換したXMLを書き込むライターprotected org.exolab.castor.xml.Marshaller createMarshaller(Object in, Writer writer)
in
- XML変換対象のオブジェクトwriter
- 出力用ライター
protected org.exolab.castor.mapping.Mapping getCastorMapping(Class mappingClass)
cache
属性がtrueの場合、読み込んだCastorマッピング定義ファイルを
キャッシュする。falseの場合、キャッシュは行わない。
mappingClass
- マッピング対象のクラス
protected URL getUrl(Class mappingClass)
mappingClass
- マッピング対象のクラス
protected String getMappingFilePath(Class mappingClass)
mappingClass
- マッピングするクラス。
protected XMLClassDescriptorResolverAndMappedClassSet getResolverAndMappedClassSetForMarshaller(Class mappingClass)
useDifferentResolverForEachOutputClass
属性がfalseの場合、
mappingClassに関わらず、唯一の共有XMLClassDescriptorResolverAndMappedClassSetを返す。useDifferentResolverForEachOutputClass
属性がtrueの場合、
mappingClass単位で共有しているXMLClassDescriptorResolverAndMappedClassSetを返す。cache
属性がfalseの場合は、常に、新たなXMLClassDescriptorResolverAndMappedClassSetを返す。
mappingClass
- 出力クラス
XMLClassDescriptorResolverAndMappedClassSet
public boolean isCache()
public boolean isIndenting()
public boolean isPreserveWhitespaceAtMarshal()
public boolean isPreserveWhitespaceAtUnmarshal()
public boolean isSuppressXSIType()
public boolean isUseDifferentResolverForEachOutputClass()
public void setCache(boolean cache)
cache
- cache属性に設定する値public String getCharset()
public void setCharset(String charset)
charset
- 文字セット。public void setSuppressXSIType(boolean suppressXSIType)
<resultReserveParam> <reserveDetailList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="java:sample.ReserveDetail"> </reserveDetailList> </resultReserveParam>
<resultReserveParam> <reserveDetailList> </reserveDetailList> </resultReserveParam>
suppressXSIType
- 設定する suppressXSITypepublic void setPreserveWhitespaceAtUnmarshal(boolean preserveWhitespaceAtUnmarshal)
trueを設定すると、全ての要素について空白を保持 したままアンマーシャルが行われる。
falseの場合でも、「xml:space="preserve"」が指定された 要素については、空白を保持したままアンマーシャルされる。
全電文に対して有効になるため、使用には注意が必要である。 デフォルト値はfalse
。
preserveWhitespaceAtUnmarshal
- 設定する whitespacePreservepublic void setPreserveWhitespaceAtMarshal(boolean preserveWhitespaceAtMarshal)
trueを設定すると生成するドキュメントのルートノードに 「xml:space="preserve"」を付与する。
全電文に対して有効になるため、使用には注意が必要である。 デフォルト値はtrue
。
<resultReserveParam> <reserveDetailList> </reserveDetailList> </resultReserveParam>
<resultReserveParam xml:space="preserve"> <reserveDetailList> </reserveDetailList> </resultReserveParam>
preserveWhitespaceAtMarshal
- 設定するpreserveWhitespacepublic void setIndenting(boolean indenting)
indenting
- 設定する indentingpublic void setUseDifferentResolverForEachOutputClass(boolean useDifferentResolverForEachOutputClass)
・条件1:出力クラスClassA、ClassXの構造が以下のようになっている。 ・ClassA (マッピング定義ファイルClassA.xmlに、ClassAのマッピング定義がある) + item1 String等 + item2 String等 … ・ClassX (マッピング定義ファイルClassX.xmlに、ClassX、ClassAの定義がある) + beanA ClassA (ClassXに、ClassA型/ClassAの配列型/List<ClassA>型のいずれかのフィールドがある) + item1 String等 + item2 String等 … ※ClassAのフィールドに、他のJavaBeanを含んでいる場合も該当する。 ※「出力クラス(上記のClassA)を、他の出力クラス(上記のClassX)で使用している」というのが条件の内容。 ・条件2:ClassA.xmlに記述されたClassAのマッピング定義とClassX.xmlに記述されたClassAのマッピング定義が異なる。
・ClassA (マッピング定義ファイルClassA.xmlに、ClassAとCommonClassのマッピング定義がある) ・CommonClass + item1 String等 … ・ClassB (マッピング定義ファイル無し) ・CommonClass + item1 String等 … ※XMLClassDescriptorResolverを出力クラス(上記のClassA, ClassB)ごとに分けておかなければ、 ClassA処理後に、ClassB内のCommonClassを処理する際、自動マッピングではなく、ClassA.xml内のCommonClassのマッピング定義が有効になってしまう。
useDifferentResolverForEachOutputClass
- 設定するuseDifferentResolverForEachOutputClass
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |