Java Spring批处理:创建一个ItemReader,从web服务读取xml文件
我正在尝试创建一个Spring批处理作业,该作业将处理一个xml文件,该文件将通过REST调用提供 我正在尝试使用一个托管在internet上的XML文件来测试这一点。该文件位于: 我在本地下载了这个文件,并且能够将它转换为一个对象并编写它,但是我不知道如果不在本地下载文件,我如何才能做到同样的事情。这在本地起作用,但如何指定URL作为xml文件的读取资源?谢谢:) launch-context.xmlJava Spring批处理:创建一个ItemReader,从web服务读取xml文件,java,spring,spring-batch,Java,Spring,Spring Batch,我正在尝试创建一个Spring批处理作业,该作业将处理一个xml文件,该文件将通过REST调用提供 我正在尝试使用一个托管在internet上的XML文件来测试这一点。该文件位于: 我在本地下载了这个文件,并且能够将它转换为一个对象并编写它,但是我不知道如果不在本地下载文件,我如何才能做到同样的事情。这在本地起作用,但如何指定URL作为xml文件的读取资源?谢谢:) launch-context.xml <batch:job id="job1"> <batch:
<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>
statxeventitemreader使用
资源
。
看一下,您将看到您可以轻松地使用文件系统之外的资源。任何可以获取InputStream的内容都可能被转换为资源。
据我记忆所及,默认使用UrlResource
并返回到ClasspathResource
4.3.1。URL资源
UrlResource包装了一个java.net.URL,可用于访问通常可通过URL访问的任何对象,如文件、文件和
HTTP目标、FTP目标等。所有URL都有一个标准化字符串
表示,以便使用适当的标准化前缀
指示一种URL类型与另一种URL类型。这包括文件:for
访问文件系统路径http:用于通过http访问资源
协议,ftp:用于通过ftp等访问资源。
UrlResource是由Java代码使用UrlResource构造函数显式创建的,但通常在
调用一个API方法,该方法使用一个字符串参数
表示一条路径。对于后一种情况,JavaBeans属性编辑器将
最终决定创建哪种类型的资源。如果路径字符串
包含一些众所周知的前缀,例如
类路径:,它将为
那个前缀。但是,如果它不识别前缀,它将
假设这只是一个标准URL字符串,并将创建一个
URL资源
所以你可以用这个:
<property name="resource" value="http://www.w3schools.com/xml/plant_catalog.xml" />
我想我少了一些小东西。当我尝试使用您指定的URL时,我得到:org.springframework.batch.item.ItemStreamException:未能初始化读卡器…原因:java.lang.IllegalStateException:输入资源必须存在(读卡器处于“严格”模式)
我是否需要在tasklet中指定文件流?您是否偶然使用了代理?是的!我不认为这有什么关系,因为我可以从我的浏览器访问xml,但我尝试从另一个网络,它工作了!谢谢!:)我也有类似的问题,你们能帮忙吗?而@user1191081第二个链接似乎不起作用,我首先回答