2015-10-07 15 views
1

WildFly 8.2.1。從WildFly中另一個模塊的JAXBContext解組

我在modules/system/layers/base中有一個「common」模塊。

此外,我有一個EAR與EJB-JAR 在這個EAR中,我有jboss-deployment-structure.xml依賴於「common」模塊。它工作正常,我可以使用該模塊中的類。

但是,當我試圖建立JAXBContext上包模塊內部,並試圖解編一些XML到對象,我得到

意想不到的元素(URI:「{我命名空間}」,當地」 {我的本地名稱}「)。預計元素(無)

如果我動議EJB-JAR(全部在一個模塊中)在類中,解組工程確定。

所以這是來自模塊分離的東西。

我試過從JAXBContext對象打印.toString()

使用一個模塊:所有帶註釋的類都在那裏。

有兩個模塊:那裏只有指定包的ObjectFactory類。

如果我明確地將該類添加到JAXBContext,我可以看到.toString()中的所有需要​​類,但解組仍然沒有出現。我得到空對象。

它可能是什麼?謝謝。

+0

也許看看創建JAXBContext的替代方法,並指定TCCL而不是默認的:https://docs.oracle.com/javaee/5/api/javax/xml/bind/JAXBContext.html# newInstance(java.lang.String,%20java.lang.ClassLoader) – Franck

+0

@Franck,是的,我試圖使用另一個'newInstance'方法並指定'ClassLoader'。使用兩個類加載器,從註釋類和'org.jboss.modules.Module' API。沒有工作。結果是一樣的。 –

+0

你是否嘗試過使用Thread.currentThread()。getContextClassLoader()? – Franck

回答

1

我找到了解決方案。

但我不完全明白是什麼問題:)這是與OSGi類似的基礎設施的東西模塊分離,類加載和類隔離的東西。

爲了解決這個問題,就必須在module.xml添加依賴關係爲「javax.xml.bind.api」這樣的「共同」模塊:

<?xml version='1.0' encoding='UTF-8'?> 
<module xmlns="urn:jboss:module:1.3" name="{module name}"> 
    <resources> 
     <resource-root path="."/> 
     <resource-root path="common-types-1.0.jar"/> 
    </resources> 
    <dependencies> 
     <module name="javax.xml.bind.api"/> 
    </dependencies> 
</module> 

這似乎是這樣的,當模塊對某些部署是依賴的,但在該部署中使用通用模塊的這些類來創建JAXBContext並不足以使用javax.xml.bind.api。它也需要添加到通用模塊中。

相關問題