Spring Oxm允许您使用不同的marshallers / unmarshallers,Castor就是其中之一。
默认情况下,castor marshalles xml文档没有缩进,官方文档告诉我们将search locations中的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>
答案 0 :(得分:1)
回答我自己的问题:使用Spring 3.1.2没有解决这个问题的方法。
类org.springframework.oxm.castor.CastorMarshaller
应该负责设置属性,它甚至对此SPR-8470有jira问题,但是修补程序在超过一年后没有提交给主分支。
任何人都可以将CastorMarshaller at Github与提议的patch进行比较。
简而言之,我们需要CastorMarshaller中的setProperties(...)方法,但未提交补丁。
答案 1 :(得分:0)
通常在您提到的链接search locations中进行了描述:
Castor按以下顺序加载castor.properties:
- 来自classpath(通常来自jar文件)
- 来自{java.home} / lib(如果有)
- 来自本地工作目录
醇>每个属性文件都会覆盖前一个属性文件。因此,您不必提供包含所有属性和值的属性文件,只需要您想要更改的属性和值。这也意味着您不必触摸jar文件中的属性文件。
通常,Castor会扫描并加载两种属性文件(具有固定文件名),您可以查看Castor源代码以获取更多详细信息:
castor.core.properties
,结帐源代码loadDefaultProperties() castor.properties
,请查看源代码loadUserProperties() 我们通常将castor.properties
放在classpath根目录下,这是您项目的src/
目录(如果您使用maven,则位于src/main/java/
下)。
希望这有帮助。