我正在尝试创建一个 Spring Batch 作业,该作业将处理将通过 REST 调用提供的 xml 文件。
我正在尝试使用托管在 Internet 上的 XML 文件来测试它。该文件位于:http ://www.w3schools.com/xml/plant_catalog.xml
我在本地下载了这个文件,并且能够将它转换为一个对象并写入它,但我不知道如何在不下载本地文件的情况下做同样的事情。这可以在本地工作,但是如何将 URL 指定为要读取的 xml 文件的资源?谢谢 :)
启动上下文.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>