2013-03-14 89 views
0

我有一個使用XML作爲主配置的Spring MVC項目,包括註冊JAXB類。我現在把它變成一個多模塊應用程序,並有一個單獨的項目來創建一個可選的JAR文件。 JAR文件將類似@Controller和@Service類的東西添加到主MVC項目中,但主項目不依賴於該JAR,並且我想保留它,所以我不想自定義應用程序主項目中的context xml,以便添加對可選JAR的支持;我只是想將該JAR添加到類路徑中。混合和擴展Spring XML配置

在那個可選的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 3.2.1和JAXB2通過Spring OXM

+0

而不是使用通配符使用分隔的多個包名通過逗號。因爲它不識別通配符和屬性「packagesToScan」接受字符串數組。 – 2013-03-14 11:45:08

+0

是的,這正是我試圖避免的,因爲這意味着我從我的主applicationContext.xml創建了對這些包的依賴關係。我正在調查其他方法 – 2013-03-14 11:49:20

回答

0

我沒有想到春天也支持這種使用情況,但你可以做的是延長Jaxb2Marshaller,並使用工具如Reflections查找所有具有jaxb註釋的類並將其添加到編組器。另外,如果您使用spring並且不介意使用它提供的某些功能,則可以使用類ClassPathScanningCandidateComponentProvider來查找類。這是Spring在內部用來掃描軟件包和子包的東西。

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>