Springオブジェクト/XMLマッピングの例
SpringのObject/XML Mappingは、ObjectをXMLまたはその逆に変換しています。このプロセスは、
-
XML Marshalling
– オブジェクトをXMLに変換します. -
XML UnMarshalling
– XMLをオブジェクトに変換します.
このチュートリアルでは、Springのoxmを使用して
Object XML
変換を行う方法を説明します。
1.プロジェクトの依存関係
この例の依存関係
-
注意** Springのoxm自体は、XMLマーシャリングやUnMarshallingを処理しません。開発者はXMLバインディングフレームワークを優先して注入する必要があります。この場合、Castorバインディングフレームワークを使用します。
<properties>
<spring.version>3.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring 3 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring oxm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Uses Castor for XML -->
<dependency>
<groupId>org.codehaus.castor</groupId>
<artifactId>castor</artifactId>
<version>1.2</version>
</dependency>
<!-- Castor need this -->
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
2.シンプルなオブジェクト
単純なオブジェクトは、後でそれをXMLファイルに変換します。
package com.mkyong.core.model;
public class Customer {
String name;
int age;
boolean flag;
String address;
//standard getter, setter and toString() methods.
}
3. MarshallerとUnmarshaller
このクラスは、Springのoxmインタフェースによる変換を処理します:
`マーシャル ‘と`アンマーシャラー’。
package com.mkyong.core;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;
public class XMLConverter {
private Marshaller marshaller;
private Unmarshaller unmarshaller;
public Marshaller getMarshaller() {
return marshaller;
}
public void setMarshaller(Marshaller marshaller) {
this.marshaller = marshaller;
}
public Unmarshaller getUnmarshaller() {
return unmarshaller;
}
public void setUnmarshaller(Unmarshaller unmarshaller) {
this.unmarshaller = unmarshaller;
}
public void convertFromObjectToXML(Object object, String filepath)
throws IOException {
FileOutputStream os = null;
try {
os = new FileOutputStream(filepath);
getMarshaller().marshal(object, new StreamResult(os));
} finally {
if (os != null) {
os.close();
}
}
}
public Object convertFromXMLToObject(String xmlfile) throws IOException {
FileInputStream is = null;
try {
is = new FileInputStream(xmlfile);
return getUnmarshaller().unmarshal(new StreamSource(is));
} finally {
if (is != null) {
is.close();
}
}
}
}
4.春の設定
SpringのBean設定ファイルで、XMLバインディングフレームワークとして `CastorMarshaller`を挿入します。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="XMLConverter" class="com.mkyong.core.XMLConverter">
<property name="marshaller" ref="castorMarshaller"/>
<property name="unmarshaller" ref="castorMarshaller"/>
</bean>
<bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller"/>
</beans>
5.テスト
それを実行します。
package com.mkyong.core;
import java.io.IOException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.mkyong.core.model.Customer;
public class App {
private static final String XML__FILE__NAME = "customer.xml";
public static void main(String[]args) throws IOException {
ApplicationContext appContext = new ClassPathXmlApplicationContext("App.xml");
XMLConverter converter = (XMLConverter) appContext.getBean("XMLConverter");
Customer customer = new Customer();
customer.setName("mkyong");
customer.setAge(30);
customer.setFlag(true);
customer.setAddress("This is address");
System.out.println("Convert Object to XML!");
//from object to XML file
converter.convertFromObjectToXML(customer, XML__FILE__NAME);
System.out.println("Done \n");
System.out.println("Convert XML back to Object!");
//from XML to object
Customer customer2 = (Customer)converter.convertFromXMLToObject(XML__FILE__NAME);
System.out.println(customer2);
System.out.println("Done");
}
}
出力
Convert Object to XML! Done Convert XML back to Object! Customer[name=mkyong, age=30, flag=true, address=This is address]Done
以下のXMLファイル ”
customer.xml
“がプロジェクトのルートフォルダに生成されます。
File:customer.xml
<?xml version="1.0" encoding="UTF-8"?>
<customer flag="true" age="30">
<address>This is address</address>
<name>mkyong</name>
</customer>
Castor XMLマッピング
なぜ、フラグと年齢が属性として変換されるのでしょうか?これは、属性や要素として使用するフィールドを制御する方法ですか?もちろん、http://www.castor.org/xml-mapping.html%20target=[Castor XMLマッピング]を使用して、オブジェクトとXMLの関係を定義することができます。
次のマッピングファイルを作成し、プロジェクトのクラスパスに配置します。
File:mapping.xml
<mapping>
<class name="com.mkyong.core.model.Customer">
<map-to xml="customer"/>
<field name="age" type="integer">
<bind-xml name="age" node="attribute"/>
</field>
<field name="flag" type="boolean">
<bind-xml name="flag" node="element"/>
</field>
<field name="name" type="string">
<bind-xml name="name" node="element"/>
</field>
<field name="address" type="string">
<bind-xml name="address" node="element"/>
</field>
</class>
</mapping>
Spring bean設定ファイルで、
mapping.xml
をCastorMarshallerの上に ”
mappingLocation
“を介して挿入します。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="XMLConverter" class="com.mkyong.core.XMLConverter">
<property name="marshaller" ref="castorMarshaller"/>
<property name="unmarshaller" ref="castorMarshaller"/>
</bean>
<bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller" >
<property name="mappingLocation" value="classpath:mapping.xml"/>
</bean>
</beans>
再度テストすると、XMLファイル ”
customer.xml
“が更新されます。
File:customer.xml
<?xml version="1.0" encoding="UTF-8"?>
<customer age="30">
<flag>true</flag>
<name>mkyong</name>
<address>This is address</address>
</customer>
ソースコードをダウンロードする
ダウンロードする –
Spring3-Object-XML-Mapping-Example.zip
(7 KB)
参考文献
オブジェクト/XMLマッピングリファレンス]