我目前正在尝试使用EclipseLink Moxy作为我的JAXB实现。我正在尝试这个,因为JDK中包含的默认实现似乎有一个UTF-8编码的硬编码缩进级别为8。
我的问题是,似乎我必须将jaxb.properties文件放入包含JAXB POJO的每个包中。我的JAXB POJO由xjc生成,特别是由jaxb2-maven-plugin'生成。 POJO生成许多包。是否有可能设置使用的实现而不在这些包中创建冗余的jaxb.properties文件?
答案 0 :(得分:3)
我正在尝试这个,因为默认实现包含在 JDK似乎有一个UTF-8的硬编码缩进级别为8 编码
JAXB参考实现确实有一个扩展属性,允许您控制缩进:
就jaxb.properties
而言,当使用单个JAXBContext
处理多个包时,只有一个包需要包含jaxb.properties
文件。
有一些不同的方法可以让你更轻松地使用MOXy:
MOXy提供了一个包装XJC的脚本,它将jaxb.properties
文件添加到适当的位置。
<ECLIPSELINK_HOME>/bind/jaxb-compiler.sh
您还可以利用META-INF/services
机制将MOXy指定为默认的JAXB提供程序:
javax.xml.bind.JAXBContext
META-INF/services
的文件的JAR
javax.xml.bind.JAXBContext
文件的内容必须为org.eclipse.persistence.jaxb.JAXBContextFactory
import java.io.File;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContextFactory.createContext("com.example.pkg1:org.example.pkg2", null, null);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("input.xml");
Object object = unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(object, System.out);
}
}