我无法使用Jaxb2Marshaller生成格式化的XML

时间:2013-04-03 14:59:22

标签: java jaxb

根据Spring Batch文档,Spring Batch可以生成格式化的xml文件,但是我失败了,所有XML元素都生成在一行中。

测试步骤

  1. 下载spring-batch-2.1.9.RELEASE-no-dependencies
  2. 导入弹簧 - * - 3.2.0.RC1.jar
  3. 导入jaxb-ri-2.2.6
  4. 运行org.springframework.batch.sample.iosample.XmlFunctionalTests
  5. 在运行作业之前,我在/spring-batch-2.1.9.RELEASE-no-dependencies/spring-batch-2.1.9.RELEASE/spring-batch-samples/src/main/resources/上进行了以下更改。作业/ iosample / xml.xml

    <bean id="itemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter">
        <property name="resource" ref="outputResource" />
        <property name="marshaller" ref="customerCreditMarshaller2" />
        <property name="rootTagName" value="customers" />
        <property name="overwriteOutput" value="true" />
    </bean>
    <bean id="customerCreditMarshaller2" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
         <property name="contextPaths">
             <list>
                 <value>com.test.domain</value><!-- the package is generated from a XSD -->
             </list>
       </property>
       <property name="marshallerProperties">
            <map>
               <entry key="jaxb.formatted.output"><value type="java.lang.Boolean">true</value></entry>
            </map>
       </property>
    

2 个答案:

答案 0 :(得分:1)

JAXB API(com.sun.xml.bind.v2.runtime.output.IndentingUTF8XmlOutput)支持格式化的XML。

但默认情况下,Spring Batch不使用com.sun.xml.bind.v2.runtime.output.IndentingUTF8XmlOutput来生成输出XML。

因此我们需要创建一个StreamResult让Spring Batch使用com.sun.xml.bind.v2.runtime.output.IndentingUTF8XmlOutput来生成格式化的XML。

答案 1 :(得分:0)

我假设您希望xml自己阅读。我不知道spring批处理,但你可以使用Notepad ++,下载XML工具插件,然后使用“Pretty print(仅限XML - 带换行符)”。 这不是理想的,但在一条线上阅读比一切都好。