在Spring中格式化/缩进JaxB marshaller

时间:2013-10-11 13:28:26

标签: java spring jaxb

我试图从Spring中的Jaxb2Marshaller类中对PrettyPrint / indent / format输出XML进行设置,即使我在Web上的其他地方进入该属性,该文件仍然在一个线。这是我的豆子宣言:

<bean id="pingerMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            ...
        </list>
    </property>
    <property name="marshallerProperties">
        <map>
            <entry>
                <key>
                    <util:constant static-field="javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT" />
                </key>
                <value type="java.lang.Boolean">true</value>
            </entry>
        </map>
    </property>
</bean>

作者:

<bean id="itemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter">
    <property name="marshaller" ref="pingerMarshaller" />
    <property name="overwriteOutput" value="true" />
    <property name="resource" value="file:\C:\source\pinger\pingerExample.xml" />
</bean>

我错过了什么,或者这是一个错误?

2 个答案:

答案 0 :(得分:4)

当编组到StAX的Marshaller.JAXB_FORMATTED_OUTPUTXMLStreamWriter时,XMLEventWriter不适用(这是我假设org.springframework.batch.item.xml.StaxEventItemWriter的意思)。如果您希望JAXB格式化结果,则需要基于OutputStreamWriter的目标(如果可用)。

答案 1 :(得分:0)

我知道这篇文章已经很老了,但即使我在使用 JAXB/Moxy marshalingunmarshaling 以及 XMLStreamWriter XMLEventWriter

我在这里发布答案,以便将来对其他人有用。以下方法可用于漂亮打印或美化 XML

如果您使用的是 XmlStreamWriter,那么您可以使用 IndentingXMLStreamWriter 来漂亮地打印输出,如下所示:

private final XMLEventWriter xmlEventWriter = new IndentingXMLStreamWriter(XMLOutputFactory.newInstance().createXMLStreamWriter(System.out));

这来自以下 dependency 包:

    <dependency>
      <groupId>org.glassfish.jaxb</groupId>
      <artifactId>txw2</artifactId>
      <version>3.0.1</version>
    </dependency>

对于 XMLEventWriter,您可以像这样使用 IndentingXMLEventWriter

private final XMLEventWriter xmlEventWriter = new IndentingXMLEventWriter(XMLOutputFactory.newInstance().createXMLEventWriter(System.out));

这来自以下依赖:

        <dependency>
            <groupId>net.java.dev.stax-utils</groupId>
            <artifactId>stax-utils</artifactId>
            <version>20070216</version>
        </dependency>