2014-04-29 61 views
1

我想将输入资源位置作为字符串传递给域对象的字段。
我的配置是这样的:阅读器(StaxEventItemReader)资源到域对象

<bean id="step2Reader" 
     class="org.springframework.batch.item.file.MultiResourceItemReader"> 
     <property name="resources" value="file:${step2.reader.resource}/*/*/*.xml"></property> 
     <property name="delegate" ref="mainReader"></property> 
    </bean> 

<bean id="mainReader" class="org.springframework.batch.item.xml.StaxEventItemReader" 
     scope="step"> 
     <property name="fragmentRootElementName" value="Domain" /> 
     <property name="unmarshaller" ref="domainMarshaller" /> 
    </bean> 

    <bean id="domainMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
     <property name="classesToBeBound"> 
      <list> 
       <value>com.example.Domain</value> 
      </list> 
     </property> 
    </bean> 

和Domain.java是含有这样一个字段一个JAXB生成的类:

@XmlElement(name = "PATH_TO_DOCUMENT", required = true) 
private String pathtodocument; 

这是应该由输入资源作为一个字符串填充。

我想过要么扩展StaxEventItemReader以包含此功能或以某种方式使域的Processor资源可见,并填充字段的值,但卡住了。

有什么建议吗?

回答

2

让你的com.example.Domain对象实现ResourceAware,以便读者自动将当前资源注入到Domain对象中。

+0

忘了提及我无法修补Domain对象。处理器能否实现此接口,并在处理时更新Domain对象中字段的值? – dimzak

+0

您可以扩展'Domain'类(如'类DomainWithResource扩展域实现ResourceAware')并修改'xml中的domainMarshaller'定义?否则你可以在编组/对象创建期间操作并创建一个实现了ResourceAware ... –

+0

或扩展step2Reader并在'read()'手动设置当前资源名称为Domain.pathtodocument –