Java 在Spring中格式化/缩进JaxB封送拆收器
我试图在Spring中对来自Jaxb2Marshaller类的输出XML进行预打印/缩进/格式化,尽管我输入了web上其他地方看到的属性,但文件仍然在一行中。下面是我的bean声明: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>
<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
,因此您当前的配置不太可能按原样工作。您可能需要选择不同的输出类型。