从 WildFly 中的另一个模块使用 JAXBContext 解组
Unmarshalling with JAXBContext from another Module in WildFly
野蝇8.2.1。
我在 modules/system/layers/base 中有一个 "common" 模块。
我还有一个 EAR,里面有 EJB-JAR
在这个 EAR 中,我有 jboss-deployment-structure.xml 依赖于 "common" 模块。它工作正常,我可以使用该模块中的 类。
但是,当我尝试在该模块内的包上构造 JAXBContext
,并尝试将一些 xml 解组为对象时,我得到
unexpected element (uri:"{my namespace}", local:"{my local name}"). Expected elements are (none)
如果我将 classes 移动到 EJB-JAR 中(全部在一个模块中),解组工作正常。
所以这是模块分离的结果。
我尝试从 JAXBContext
对象打印 .toString()
。
只有一个模块:所有带注释的 class 都在那里。
有两个模块:那里只有 ObjectFactory
class 来自指定的包。
如果我将 class 显式添加到 JAXBContext
,我可以从 .toString()
中看到所有需要的 classes,但解组仍然无法进行。我得到空对象。
它可能是什么?谢谢。
我找到了解决方案。
但我不完全明白问题出在哪里 :) 它与模块分离、class 加载和 class 类 OSGi 基础设施中的隔离有关。
为了解决这个问题,必须在 module.xml 中添加依赖到 "common" 模块,这样的 "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>
似乎是当此模块依赖于某些部署时,javax.xml.bind.api 不足以在该部署中使用公共模块中的那些 class 创建 JAXBContext。也需要添加到common模块中。
野蝇8.2.1。
我在 modules/system/layers/base 中有一个 "common" 模块。
我还有一个 EAR,里面有 EJB-JAR 在这个 EAR 中,我有 jboss-deployment-structure.xml 依赖于 "common" 模块。它工作正常,我可以使用该模块中的 类。
但是,当我尝试在该模块内的包上构造 JAXBContext
,并尝试将一些 xml 解组为对象时,我得到
unexpected element (uri:"{my namespace}", local:"{my local name}"). Expected elements are (none)
如果我将 classes 移动到 EJB-JAR 中(全部在一个模块中),解组工作正常。
所以这是模块分离的结果。
我尝试从 JAXBContext
对象打印 .toString()
。
只有一个模块:所有带注释的 class 都在那里。
有两个模块:那里只有 ObjectFactory
class 来自指定的包。
如果我将 class 显式添加到 JAXBContext
,我可以从 .toString()
中看到所有需要的 classes,但解组仍然无法进行。我得到空对象。
它可能是什么?谢谢。
我找到了解决方案。
但我不完全明白问题出在哪里 :) 它与模块分离、class 加载和 class 类 OSGi 基础设施中的隔离有关。
为了解决这个问题,必须在 module.xml 中添加依赖到 "common" 模块,这样的 "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>
似乎是当此模块依赖于某些部署时,javax.xml.bind.api 不足以在该部署中使用公共模块中的那些 class 创建 JAXBContext。也需要添加到common模块中。