본문 바로가기

자바

JAXB

직렬화 : java object를 XML로

역직렬화 : XML을 java object로

 

위 내용을 도와주는 api가 JAXB(Java Architecture for XML Binding)

 

JAXB Annotation

@XmlRootElement : XML의 Root Element명을 정의

@XmlElement : XML의 Element명을 정의

@XmlType : XML스키마 이름과 namespace 정의

propOrder 속성을 이용해서 XML 표현 시 요소들의 표현 순서를 정의

@XmlElementWrapper : 다른 XML 요소들을 감싸는 역할. List같은 컬렉션 객체들을 XML 변환 시...

 

예제1. Java Object를 XML로 변환

package jaxb;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class TestJAXB {

	public static void main(String[] args) {
		
		UserDto userDto = setUser();
		
		try {
			
			File file = new File("C:\\userDto.xml");
			JAXBContext jaxbContext = JAXBContext.newInstance(UserDto.class);
			Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
			
			jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			
			jaxbMarshaller.marshal(userDto, file);
			jaxbMarshaller.marshal(userDto, System.out);
			
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}
	
	public static UserDto setUser() {
		
		UserDto userDto = new UserDto();
		
		userDto.setName("XMLstudy");
		userDto.setAge(25);
		
		List<String> list = new ArrayList<String>();
		list.add("XML list 01");
		list.add("XML list 02");
		list.add("XML list 03");
		userDto.setMessages(list);
		
		return userDto;
	}
}

UserDto.java

package jaxb;

import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class UserDto {

	private String name;
	private int age;
	private List<String> messages;
	
	public String getName() {
		return name;
	}
	
	@XmlElement
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	@XmlElement
	public void setAge(int age) {
		this.age = age;
	}
	
	public List<String> getMessages() {
		return messages;
	}
	
	@XmlElementWrapper(name="messages")
	@XmlElement(name="message")
	public void setMessages(List<String> messages) {
		this.messages = messages;
	}

	@Override
	public String toString() {
		return "UserDto [name=" + name + ", age=" + age + ", messages=" + messages + "]";
	}
}

 

java application 실행결과:

 

 

XML을 java object로 변환

package jaxb;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

public class TestJAXBsample {

	public static void main(String[] args) {
		
		try {
			
			File file = new File("C:\\userDto.xml");
			JAXBContext jaxbContext = JAXBContext.newInstance(UserDto.class);
			
			Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
			UserDto customer = (UserDto) jaxbUnmarshaller.unmarshal(file);
			
			System.out.println(customer.toString());
			
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}
}

 

결과:

 

출처:

tychejin.tistory.com/135

'자바' 카테고리의 다른 글

@Qualifier  (0) 2020.12.24
Properties  (0) 2020.12.05
servlet과 웹소켓  (0) 2020.11.28
스트림 api  (0) 2020.11.22
파일 업로드  (0) 2020.11.22