我有Java类的结构如下(类名称并不意味着什么,我只是做起来).
package test; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlValue; @XmlRootElement public class Test { @XmlAccessorType(XmlAccessType.FIELD) static class Machine { @XmlElementWrapper(name="servers") @XmlElement(name="server") Listservers = new ArrayList (); } @XmlAccessorType(XmlAccessType.FIELD) static class Server { Threshold t = new Threshold(); } @XmlAccessorType(XmlAccessType.FIELD) static class Threshold { RateThreshold load = new RateThreshold(); } @XmlAccessorType(XmlAccessType.FIELD) static class RateThreshold { @XmlAccessorType(XmlAccessType.FIELD) static class Rate { int count; Period period = new Period(); } @XmlAccessorType(XmlAccessType.FIELD) private static class Period { @XmlAttribute private String type = "second"; @XmlValue private float period; } Rate min = new Rate(); Rate max = new Rate(); } @XmlElementWrapper(name="machines") @XmlElement(name="machine") List machines = new ArrayList (); public static void main(String[] args) { Machine m = new Machine(); Server s = new Server(); s.t.load.max.count = 10; s.t.load.min.count = 1; m.servers.add(s); Test t = new Test(); t.machines.add(m); JAXBContext jaxbContext; Marshaller marshaller; try { jaxbContext = JAXBContext.newInstance(Test.class); marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(t, System.out); } catch (JAXBException e) { e.printStackTrace(); } } }
我遇到的问题是与编组测试实例时由JAXB生成的XML输出.XML输出将始终如下所示:
1 0.0 10 0.0
正如你所看到的,一些元件没有被正确地缩进(即,最深的元素,计数和周期).这是为什么?我创建JAXB上下文的方式有问题吗?或者是有一个最高限额,可以递归JAXB缩进多少元?我怎么能解决这个问题?请注意,我还设置JAXB_FORMATTED_OUTPUT为真,但仍获得了不正当的压痕.
谢谢.
缩进发生在模8中,in
com.sun.xml.bind.v2.runtime.output.IndentingUTF8XmlOutput
你发现
int i = depth%8;