繁体   English   中英

Spring Batch:创建一个从Web服务读取xml文件的ItemReader

[英]Spring Batch: Create an ItemReader that reads an xml file from a web service

我正在尝试创建一个Spring Batch作业,该作业将处理将通过REST调用提供的xml文件。

我正在尝试使用托管在互联网上的XML文件来测试它。 该文件位于: http//www.w3schools.com/xml/plant_catalog.xml

我在本地下载了这个文件,并且能够将它转换为一个对象并编写它,但我不知道如何在不在本地下载文件的情况下也能这样做。 这在本地工作,但是如何指定URL作为要读取的xml文件的资源? 谢谢 :)

发射后的context.xml

    <batch:job id="job1">
    <batch:step id="step1">
        <batch:tasklet transaction-manager="transactionManager" start-limit="100" >
            <batch:chunk reader="CustomPlantReader" writer="writer" commit-interval="1" />
        </batch:tasklet>
    </batch:step>
</batch:job>

自定义读者bean:

    <bean id="CustomPlantReader" class="org.springframework.batch.item.xml.StaxEventItemReader" scope="step">
    <property name="fragmentRootElementName" value="PLANT" />
    <property name="resource" value="file:/C:/source/plant_catalog.xml" />
    <property name="unmarshaller" ref="PlantUnmarshaller" />
</bean>

<bean id="PlantUnmarshaller" class="org.springframework.oxm.castor.CastorMarshaller">
    <property name="ignoreExtraElements" value="true" />
    <property name="mappingLocation" value="linemapper/mapping.xml" />
</bean>

作为参考,如果有人想看到mapping.xml文件,这就是它的样子。 它将xml节点映射到名为Plant.java的域对象

<mapping>
<class name="com.example.project.Plant">
    <map-to xml="PLANT" />

    <field name="common" type="string">
        <bind-xml name="COMMON" node="element"/>
    </field>
    <field name="botanical" type="string">
        <bind-xml name="BOTANICAL" node="element"/>
    </field>
    <field name="zone" type="string">
        <bind-xml name="ZONE" node="element"/>
    </field>
    <field name="light" type="string">
        <bind-xml name="LIGHT" node="element"/>
    </field>
    <field name="price" type="string">
        <bind-xml name="PRICE" node="element"/>
    </field>
    <field name="availability" type="string">
        <bind-xml name="AVAILABILITY" node="element"/>
    </field>

</class></mapping>

StaxEventItemReader获取Resource 看一下文档 ,您将看到您可以轻松使用不在您的文件系统上的资源。 您可以获得InputStream的任何内容都可以转换为Resource。 默认情况下,我记得使用UrlResource并返回ClasspathResource

4.3.1。 UrlResource对象

UrlResource包装java.net.URL,可用于访问通常可通过URL访问的任何对象,例如文件,HTTP目标,FTP目标等。所有URL都具有标准化的字符串表示形式,例如适当的标准化前缀用于表示另一个URL类型。 这包括文件:用于访问文件系统路径,http:用于通过HTTP协议访问资源,ftp:用于通过FTP访问资源等.UrlResource由Java代码使用UrlResource构造函数显式创建,但通常在您使用时隐式创建调用一个API方法,该方法接受一个表示路径的String参数。 对于后一种情况,JavaBeans PropertyEditor最终将决定要创建哪种类型的Resource。 如果路径字符串包含一些众所周知的(对于它)前缀,例如classpath:,它将为该前缀创建适当的专用资源。 但是,如果它无法识别前缀,则会假设这只是一个标准的URL字符串,并将创建一个UrlResource。

所以你可以使用这个:

<property name="resource" value="http://www.w3schools.com/xml/plant_catalog.xml" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM