指定一个包而不是" classesToBeBound"对于春天Jaxb2Marshaller

时间:2012-01-30 17:04:33

标签: java spring jaxb2

我正在尝试使用Jaxb2Marshaller来使用spring编组一组java类。我知道这可以使用以下代码完成

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

我想要做的不是指定类列表,而是仅指定包含所有类的包名(在上面的例子中为com.example)。

有没有人知道这样做的方法,或任何其他不要求我列出所有类的方法。任何帮助将不胜感激!

感谢。

3 个答案:

答案 0 :(得分:11)

从Spring 3.1(我认为)你也可以使用 packagesToScan 属性,该属性接受通配符。它不适用于没有@XmlRootElement注释的元素,就像 contextPath 属性一样。这些需要生成对象工厂。

看起来像:

<property name="packagesToScan">
    <list>
        <value>com.test.*</value>
        <value>com.*.test</value>
    </list>
</property>

答案 1 :(得分:5)

您可以使用以下语法设置contextPath:

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="contextPath" value="com.example"/>
</bean>  

答案 2 :(得分:3)

如果您在应用程序上下文中使用新版本的JAXB,则you can use something like this如果将oxm命名空间添加到xml文件中。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:oxm="http://www.springframework.org/schema/oxm"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
           http://www.springframework.org/schema/oxm
           http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd">
  <oxm:jaxb2-marshaller id="jaxbMarshaller" contextPath="com.example"/>
  <!-- other beans -->
</beans>

我有一个使用这些程序运行的生产级别程序,所以如果您还有其他问题,请告诉我。

祝你好运。