프로그래밍 이야기

JAXB를 이용한 XML UnMarshalling(HttpServletResponse getWriter()) 예제 #4

박디 2013. 8. 19. 23:27

1부에서는 파일을 통한 마샬링, 언마샬링 처리, 2부에서는 HttpUrlConnection을 통해 얻어온 InputStream을 언마샬링,

 

3부에서는 마샬링된 데이터를 OutputStream에 저장하고 다시 InputStream으로 변환하여 언마샬링 하는 예제를

 

작성해봤습니다. 마지막으로 가장 간단하게 HttpServletResponse 객체의 getWriter()를 통해 마샬링된 데이터를

 

바로 출력시키는 예제를 작성해 보겠습니다. 이번 예제는 마샬링 후 바로 출력하기 때문에 언마샬링을 거치지

 

않습니다.

 

-XML 원본 데이터 예시

 <userBltnList>
     <bltnList>
         <isSecret>Y</isSecret>
         <name>TEST</name>
         <no>TESTNO</no>
         <readNum>TESTREADNUM</readNum>
         <subject>Android GCM Push with Command Pattern</subject>
         <writeDay>2013-02-15 18:00:18.0</writeDay>
     </bltnList>
 </userBltnList>

-----------------------------------------------------------------------------------------------------------------

 

※ Collection클래스를 마샬링

  import javax.xml.bind.JAXBContext;

  import javax.xml.bind.Marshaller;

 

  //list는 List Collection클래스

  UserBltnList userBltnList = new UserBltnList();
  userBltnList.setList(list);

 

  JAXBContext jaxbContext = null;
  Marshaller jaxbMarshaller = null;

  
  jaxbContext = JAXBContext.newInstance(UserBltnList.class);
  jaxbMarshaller = jaxbContext.createMarshaller();
  jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");  
  jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
 
  jaxbMarshaller.marshal(userBltnList, response.getWriter()); 

 

-----------------------------------------------------------------------------------------------------------------

- UserBltnList Class

 @XmlRootElement(name="userBltnList")
 @XmlAccessorType(XmlAccessType.FIELD)
 public class UserBltnList {
 
  //Marshalling시에 Element의 이름을 정해준다. 반대로 UnMarshalling시에는
  //이 이름에 해당하는 Element속성이나 Element의 내용을 가져오게 된다.
  @XmlElement(name="bltnList")
  private List<UserBltnListVO> list = null;

  public List<UserBltnListVO> getList() {
   if(list==null){
    list = new ArrayList<UserBltnListVO>();
   }
   return list;
  } 
  public void setList(List<UserBltnListVO> list) {
   this.list = list;
  }
 }

-----------------------------------------------------------------------------------------------------------------

- UserBltnListVO(Value Object Class)

public class UserBltnListVO {
 private String no = "";
 private String subject = "";
 private String writeDay = "";
 private String readNum = "";
 private String isSecret = "";
 private String name = "";

 ..

  getter/setter 생략

 ..

}

-----------------------------------------------------------------------------------------------------------------

 

여기까지 4부에 걸쳐 JAXB(Java Architecture for XML Binding) API 사용방법에 대해 알아보았습니다. 예전에 DOMParser를

 

통해 삽질하던걸 생각해보면 정말 간편해 졌다는 생각이 듭니다. DOMParser를 사용하다 보면 XML이 복잡해지면 이놈이

 

저놈같고 저놈이 이놈같고 그랬었죠. 머리가 단순해서인지 계층구조는 저하고 좀 안맞는 것 같습니다.;; 지금 다니는 회사에선

 

사실 이런 데이터 변환 처리를 거의 할일이 없는데 알아두면 분명 유용할 듯 싶어 예제를 작성해봤습니다. 어딘가에서 유용하게

 

쓰였으면 좋겠군요. 소스는 그대로 붙혀서 사용하시면 당연히 실행이 안되실것이고 메소드 등은 환경에 맞춰 작성해서 참고

 

하여 사용하시면 될 듯 싶습니다.