Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring中格式化/缩进JaxB封送拆收器_Java_Spring_Jaxb - Fatal编程技术网

Java 在Spring中格式化/缩进JaxB封送拆收器

Java 在Spring中格式化/缩进JaxB封送拆收器,java,spring,jaxb,Java,Spring,Jaxb,我试图在Spring中对来自Jaxb2Marshaller类的输出XML进行预打印/缩进/格式化,尽管我输入了web上其他地方看到的属性,但文件仍然在一行中。下面是我的bean声明: <bean id="pingerMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> <property name="classesToBeBound"> <list>

我试图在Spring中对来自Jaxb2Marshaller类的输出XML进行预打印/缩进/格式化,尽管我输入了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>


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

当编组到StAX的
XMLStreamWriter
XMLEventWriter
时,
Marshaller.JAXB\u格式的输出
不适用(这是我假设的
org.springframework.batch.item.xml.statxeventitemwriter
的意思)。如果你想让JAXB格式化结果,你需要一个基于
OutputStream
Writer
的目标,如果它们可用的话。

我知道这篇文章已经很老了,但即使是我,在使用
JAXB/Moxy
封送
解封送
的同时,也在试图弄清楚如何打印输出
XMLStreamWriter
XMLEventWriter

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

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

private final XMLEventWriter xmlEventWriter = new IndentingXMLStreamWriter(XMLOutputFactory.newInstance().createXMLStreamWriter(System.out));
private final XMLEventWriter xmlEventWriter = new IndentingXMLEventWriter(XMLOutputFactory.newInstance().createXMLEventWriter(System.out));
这来自以下
依赖项
包:

    <dependency>
      <groupId>org.glassfish.jaxb</groupId>
      <artifactId>txw2</artifactId>
      <version>3.0.1</version>
    </dependency>
这来自以下依赖关系:

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

net.java.dev.stax-utils
斯塔克斯乌提尔斯酒店
20070216

这似乎是对的。您确定Spring正在使用您的封送拆收器而不是某个默认封送拆收器吗?作者补充道。看起来我用的是正确的封送员。有意思。你介意再解释一下吗?我使用的是Spring批处理,据我所知,StaxEventItemWriter是封送处理的首选方法。也许有一种方法可以在编写器级别实现漂亮的打印。谢谢@Dave4988-我能提供的信息不多。根据我的JAXB经验,我只知道JAXB impl不会将输出格式化为
XmlStreamWriter
/
XmlEventWriter
,因此您当前的配置不太可能按原样工作。您可能需要选择不同的输出类型。