JAXB 생성되는 XML 헤더 변경하기
JAVA/JAXB / 2011. 5. 2. 16:26
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);
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 시키는 것으로 처리할 수 있습니다.
마샬러에 프로퍼티를 설정하면 된다는 글도 있었는데, 잘 안되는 것 같아 위의 방식을 사용하였습니다.