2012-01-30 50 views
13

我想用Jaxb2Marshaller來編組一個使用spring的java類。我知道這可以用下面的代碼春季指定一個包而不是「classesToBeBound」Jaxb2Marshaller

<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。示例)。

有沒有人知道一種方法來做到這一點,或任何其他方式,不需要我列出所有的類。任何幫助,將不勝感激 !

謝謝。

回答

11

從春季3.1(我認爲),你也可以使用packagesToScan屬性,它接受通配符。它僅適用於沒有@XmlRootElement註釋的元素,就像contextPath屬性。這些需要生成對象工廠。

可能看起來像:

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

如果您缺少@XmlRootAnnotation並且無法修改XSD源考慮使用全局jaxb自定義請參閱http://stackoverflow.com/a/8725352/881375 – tomasb 2013-06-02 01:32:17

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> 

我有一個生產級程序運行這些,所以讓我知道如果你有任何問題。

祝你好運。

+0

謝謝!這不需要我在com.yourcompany.yourapp.foo中包含jaxb.in​​dex文件嗎? – 2012-01-30 18:45:42

+0

你說什麼索引文件?我的項目中沒有任何文件。它有哪些信息? – thatidiotguy 2012-01-30 18:47:35

+0

我跑了一個小測試,我得到了以下異常:嵌套異常是javax.xml.bind.JAXBException:「com.yourcompany.yourapp.foo」不包含ObjectFactory.class或jaxb.in​​dex。這導致我http://stackoverflow.com/questions/899668/how-do-i-use-a-jaxb-index-file – 2012-01-30 18:57:12

5

你可以用下面的語法設定的contextPath:

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