Пример сопоставления Spring Object / XML
Spring / Object Mapping - это преобразование Object в XML или наоборот. Этот процесс также известен как
-
XML Marshalling - преобразовать объект в XML.
-
XML UnMarshalling - преобразовать XML в объект.
В этом руководстве мы покажем вам, как использовать Oxm Spring для преобразованияObject XML.
Note
Никакой ерунды, почему и какие преимущества использования Spring Oxm, прочтите эту статьюofficial Spring Object/XML mapping.
1. Зависимость проекта
Зависимости в этом примере.
Note
Oxm сам по себе не обрабатывает XML-маршаллинг или демаршалинг, это зависит от разработчика, чтобы внедрить свою предпочтительную структуру привязки XML. В этом случае вы будете использовать привязку Castor Framework.
3.0.5.RELEASE org.springframework spring-core ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-oxm ${spring.version} org.codehaus.castor castor 1.2 xerces xercesImpl 2.8.1
2. Простой объект
Простой объект, затем преобразовать его в файл XML.
package com.example.core.model; public class Customer { String name; int age; boolean flag; String address; //standard getter, setter and toString() methods. }
3. Маршаллер и маршаллер
Этот класс будет обрабатывать преобразование через интерфейсы Oxm Spring:Marshaller
иUnmarshaller
.
package com.example.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. Конфигурация пружины
В файле конфигурации bean-компонента Spring вставьтеCastorMarshaller
в качестве структуры привязки XML.
5. Test
Запустить его.
package com.example.core; import java.io.IOException; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.example.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("example"); 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=example, age=30, flag=true, address=This is address] Done
Следующий XML-файл «customer.xml» создается в корневой папке вашего проекта.
Файл: customer.xml
This is address example
Castor XML Mapping
Подождите, почему флаг и возраст конвертируются как атрибут? Это способ контролировать, какое поле следует использовать в качестве атрибута или элемента? Конечно, вы можете использоватьCastor XML mapping для определения отношения между Object и XML.
Создайте следующий файл сопоставления и поместите его в classpath вашего проекта.
Файл: mapping.xml
В файле конфигурации bean-компонента Spring введите вышеmapping.xml в CastorMarshaller через «mappingLocation».
Протестируйте еще раз, XML-файл «customer.xml» будет обновлен.
Файл: customer.xml
true example This is address
Скачать исходный код
Скачать -Spring3-Object-XML-Mapping-Example.zip (7 КБ)