JAXB 생성되는 XML 헤더 변경하기



JAXB를 통해 XML을 생성하게 되면 아래와 같은 헤더가 자동적으로 생성됩니다.





<?xml version="1.0" encoding="EUC-KR" standalone="yes"?>





위의 헤더 외에 DTD를 지정해야 한다면, 그리고 standalone="yes" 속성을 제거해야 할 경우가 생겨서 수 많은 검색 끝에 해결책을 찾아냈습니다.





Marshaller marshaller = JAXBContext.newInstance(XXX.class).createMarshaller();



marshaller.setProperty(Marshaller.JAXB_ENCODING, "EUC-KR");



marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);





marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);






...




StringWriter writer = new StringWriter();





writer.append("<?xml version=\"1.0\" encoding=\"EUC-KR\"?>\r\n");





marshaller.get().marshal(xxx, writer);




JAXB_FRAGMENT 를 true 로 설정하면 상단의 헤더를 제외하게 됩니다. 마샬링을 하게 되는 Writer 객체에 사용할 헤더를 append 시키는 것으로 처리할 수 있습니다.



마샬러에 프로퍼티를 설정하면 된다는 글도 있었는데, 잘 안되는 것 같아 위의 방식을 사용하였습니다.


댓글

가장 많이 본 글