【问题标题】:Formatting/Indenting JaxB marshaller in Spring在 Spring 中格式化/缩进 JaxB 编组器
【发布时间】:2013-10-11 13:28:26
【问题描述】:

我正在尝试对 Spring 中 Jaxb2Marshaller 类的输出 XML 进行 PrettyPrint/indent/format 处理,即使我输入了 Web 上其他地方看到的属性,该文件仍然全部位于一行中。这是我的 bean 声明:

<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>

是我遗漏了什么,还是这是一个错误?

【问题讨论】:

  • 这似乎是正确的。你确定 Spring 使用的是你的编组器而不是默认的吗?
  • 将作者添加到问题中。看起来我正在使用正确的编组器。

标签: java spring jaxb


【解决方案1】:

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

【讨论】:

  • 有趣。你介意稍微解释一下吗?我正在使用 Spring Batch,据我所知, StaxEventItemWriter 是编组的首选方法。也许有一种方法可以在作家级别启用漂亮的打印。谢谢!
  • @Dave4988 - 我无法提供更多信息。根据我的 JAXB 经验,我只知道 JAXB impl 不会将输出格式化为 XmlStreamWriter/XmlEventWriter,因此您当前的配置不太可能按原样工作。您可能需要选择不同的输出类型。
【解决方案2】:

我知道这篇文章已经很老了,但我什至试图弄清楚如何在使用 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>

【讨论】:

    猜你喜欢
    • 2015-05-15
    • 2012-04-16
    • 2016-04-23
    • 2021-05-10
    • 1970-01-01
    • 2018-03-24
    • 2016-04-18
    • 2011-06-18
    • 2022-11-27
    相关资源
    最近更新 更多