web-dev-qa-db-ja.com

春のJaxb2Marshallerに「classesToBeBound」の代わりにパッケージを指定する

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)を含むパッケージ名だけを指定したいです。

誰かがこれを行う方法、またはすべてのクラスをリストする必要がない他の方法を知っていますか?どんな助けもいただければ幸いです!

ありがとう。

13
Sandeep More

Spring 3.1から(私は思う)、ワイルドカードを受け入れるpackagesToScanプロパティも使用できます。 contextPathプロパティのように、@XmlRootElementアノテーションのない要素では機能しません。これらには、生成されたオブジェクトファクトリが必要です。

次のようになります:

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

次の構文でcontextPathを設定できます。

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

新しいバージョンのJAXBを使用している場合は、xmlファイルにoxm名前空間を追加すると、アプリケーションコンテキストで 次のようなものを使用できます になります。

<?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>

これらを使用して本番レベルのプログラムを実行しています。他にご不明な点がありましたらお知らせください。

幸運を。

3
thatidiotguy