0

我有一个使用 XML 作为主要配置的 Spring MVC 项目,包括注册 JAXB 类。我现在将它制作成一个多模块应用程序,并有一个单独的项目来创建一个可选的 JAR 文件。JAR 文件将 @Controller 和 @Service 类之类的东西添加到主 MVC 项目中,但主项目不依赖于该 JAR,我想保持这种方式,所以我不想自定义应用程序主项目中的上下文 xml,以添加对可选 JAR 的支持;我只想将该 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

你不能使用 <property name="packagesToScan" value="com.app.xml.**"/>packagesToScan 属性不适用于 jaxb2Marshaller .. 而不是你可以使用

<property name="contextPath" value="{package name where all classes are generated}"/>

以下作品

<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller" >
<property name="contextPath" value="{package name where all classes are generated}"/>
</bean>
于 2013-06-27T06:04:17.140 回答
0

我不认为 spring 支持这个用例,但你可以做的是扩展Jaxb2Marshaller,并使用像Reflections这样的实用程序来查找所有具有 jaxb 注释的类并将它们添加到编组器中。

此外,如果您正在使用 spring 并且不介意使用它提供的某些功能,则可以使用该类ClassPathScanningCandidateComponentProvider来查找类。这是 spring 在内部用来扫描包和子包的。

于 2013-03-14T12:21:17.513 回答