Spring Oxm允许您使用不同的编组器/解编组器,Castor就是其中之一。
默认情况下,castor会整理未受影响的xml文档,而官方文档则表示,将castor.properties文件放在包括org.exolab.castor.indent=true
行在内的搜索位置将覆盖默认行为。
现在,当在web应用程序(Spring Batch Admin)中使用Spring Oxm时,我如何覆盖castor jar中的castor.properties?
我有以下bean配置(删除了额外的行),据我所见,它们没有必要的属性来设置。
<bean id="myCastorMarshaller"
class="org.springframework.oxm.castor.CastorMarshaller">
<property name="mappingLocation" value="classpath:/mapping/my-mapping.xml" />
</bean>
<bean id="myXmlWriter"
class="org.springframework.batch.item.xml.StaxEventItemWriter">
<property name="marshaller" ref="myCastorMarshaller" />
</bean>
回答我自己的问题:使用Spring 3.1.2无法解决这个问题。
org.springframework.oxm.castor.CastorMarshaller
类应该负责设置属性,它甚至有这个SPR-8470的jira问题,但补丁在一年多后没有提交给主分支。
任何人都可以将Github上的CastorMarshaller与拟议的补丁进行比较。
简而言之,我们需要CastorMarshaller中的setProperties(…)方法,但该补丁尚未提交。
在web应用程序(Spring Batch Admin)中使用Spring Oxm时,如何覆盖castor jar中的castor.properties
它通常描述在你提到的链接搜索位置:
Castor按以下顺序加载Castor.properties:
- 来自类路径(通常来自jar文件)
- 来自{java.home}/lib(如果存在)
- 从本地工作目录
每个特性文件都会覆盖上一个特性文件。因此,您不必创建一个包含所有属性和值的属性文件,只需更改这些属性和值即可。这也意味着您不必触摸jar文件中的属性文件。
通常有两种属性文件(具有固定文件名)由Castor扫描和加载,您可以查看Castor源以了解更多详细信息:
- 默认属性文件:
castor.core.properties
,签出源代码loadDefaultProperties() - 用户属性文件:
castor.properties
,检查源代码loadUserProperties()
我们通常将castor.properties
放在类路径根目录下,这是您项目的src/
目录(如果您使用maven,则放在src/main/java/
下)。
希望这能有所帮助。