0

JAXB クラスの登録を含む、メイン構成に XML を使用する Spring MVC プロジェクトがあります。現在、これをマルチモジュール アプリにしています。オプションの JAR ファイルを作成する別のプロジェクトがあります。JAR ファイルは @Controller や @Service クラスなどをメインの MVC プロジェクトに追加しますが、メインのプロジェクトはその JAR に依存しないため、そのままにしておきたいので、アプリケーションをカスタマイズする必要はありません。オプションの JAR のサポートを追加するためのメイン プロジェクトのコンテキスト xml。そのJARをクラスパスに追加したいだけです。

そのオプションの JAR では、@Configuration アノテーションを持つクラスを使用してアプリケーション コンテキストで新しい Bean を作成することに成功していますが、既存の Bean を拡張して、新しい JAXB アノテーション付きクラスと ObjectFactory クラスを含むパッケージなどを追加する必要があります。 .

これを行う方法がわかりません...

次のようにマーシャラーパッケージをワイルドカード化しようとしました:

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
   <property name="packagesToScan" value="com.app.xml.**"/>
</bean>

しかし、私が得たので、それは機能していないようです:

javax.servlet.ServletException: Unable to locate object to be marshalled in model

私が取ることができる別のアプローチはありますか?理想的には、 @Configuration クラスに、既存の Jaxb2Marshaller Bean に新しいクラスを追加するだけのメソッドが必要です...

またはさらに良いことに、Spring が起動時に JAXB アノテーションを持つすべてのクラスを検出する方法を見つけます...

Spring OXM経由でSpring 3.2.1とJAXB2を使用しています

4

2 に答える 2

0

Springはこのユースケースをサポートしていないと思いますが、できることは extendsであり、 ReflectionsJaxb2Marshallerのようなユーティリティを使用して、jaxb アノテーションを持つすべてのクラスを見つけてマーシャラーに追加します。

また、Spring を使用していて、Spring が提供するいくつかの機能を使用してもかまわない場合は、クラスを使用してクラスClassPathScanningCandidateComponentProviderを検索できます。これは、パッケージとサブパッケージをスキャンするために spring が内部で使用するものです。

于 2013-03-14T12:21:17.513 に答える