Marshal : Java Object -> XML 변환
UnMarshal : XML -> Java Object 변환
사용 방법
ex)
// 1번
ResponseEntity<String> apiResponseEntity = restTemplate.getForEntity(uri, String.class); // api 연동한 response 값을 String 타입으로 받아옴.
String responseEntityString = apiResponseEntity.getBody(); // String 타입의 response
// 2번
// JAXB에서 제공하는 언마샬링 메소드
JAXBContext jaxbContext = JAXBContext.newInstance(Response.class); // Response 타입으로 변경
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
// 3번
// 입력 -> 출력
Response response = (Response) unmarshaller.unmarshal(new StringReader(responseEntityString));
API Response 값을 XML로 변환하기
restTemplate.getForEntity으로 결과 값 가져올 때 제너릭을 이용해서 String 타입으로 받아왔다.(현재 String으로 된 값, API 연동 시 JSON과는 달리 XML 형태로 자동 변환해주지 않는다.)
JAXBContext.newInstance를 이용해서 마샬링 및 언마샬링을 해주기 위해 세팅한다.
2-1) 결과 값을 Response 타입으로 받기 위해 Response.class라고 지정해줬다.
2-2) createUnmarshaller 메소드를 이용해서 언마샬링을 해주기 위한 준비를 마쳤다.
newInstance 메소드를 따라가보면 파라미터에 바운드 되기 위한 클래스라고 적혀있다.
언마샬링을 하고서 받고자하는 타입의 변수에 대입한다.
JAXB Annotation
@XmlRootElement(name="blahbalh")
: 루트 XML 요소의 이름은 클래스 이름에서 파생되며 name 속성을 사용하여 XML의 루트 요소 이름을 지정할 수도 있습니다.
마샬링 시 Element의 이름을 정해준다.
언마샬링 시 이름에 해당하는 Element 속성 또는 Element를 가져온다.(blahbalh 클래스가 RootElement로 사용)
@XmlElement(name="blahblah")
마샬링 시 Element의 이름을 정해준다.
언마샬링 시 이름에 해당하는 Element 속성 또는 Element을 가져온다.
@XmlType(propOrder = { "A", "B", "C", "D" })
: XML 파일에서 필드가 작성되는 순서를 정의한다.
@XmlElementWrapper
: 다른 XML 요소들을 감싼다. 예를 들어 List 같은 컬렉션 객체들을 XML로 변환할 때 사용한다.
@XmlTransient
: XML에 포함하고 싶지 않은 필드에 주석 달기
@XmlAttribute
: id 필드가 요소 대신 속성으로 매핑되도록 정의
출처 자료
JAXB를 이용한 XML Marshalling, UnMarshalling(File) 예제 #1
JAXB marshal, unmarshal(마샬, 언마샬)
마샬링