JAXB の marshal 時に XML 宣言を生成しないようにする
Java SE 6の Javadoc にも記述されていますが、 XML 宣言を出力したくない場合は、プロパティ jaxb.fragment の値を true にします。
jp.pigumer.Data
package jp.pigumer; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Data { @XmlElement public String elem1; @XmlElement public String elem2; }
jp.pigumer.JAXBTest
package jp.pigumer; import org.junit.Before; import org.junit.Test; import javax.xml.bind.*; import java.io.IOException; import java.io.StringWriter; import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; public class JAXBTest { Marshaller marshaller; Data sut; @Before public void setUp() throws JAXBException { sut = new Data(); sut.elem1 = "test1"; sut.elem2 = "test2"; JAXBContext context = JAXBContext.newInstance(Data.class); marshaller = context.createMarshaller(); } @Test public void defaultMarshallerTest() throws JAXBException, IOException { String out; try (StringWriter wr = new StringWriter()) { marshaller.marshal(sut, wr); out = wr.toString(); } assertThat(out, is(not(nullValue()))); System.out.println("default: " + out); } @Test public void fragmentMarshallerTest() throws JAXBException, IOException { marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); String out; try (StringWriter wr = new StringWriter()) { marshaller.marshal(sut, wr); out = wr.toString(); } assertThat(out, is(not(nullValue()))); System.out.println("fragment: " + out); } }
実行結果
fragment: <data><elem1>test1</elem1><elem2>test2</elem2></data> default: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><data><elem1>test1</elem1><elem2>test2</elem2></data>