gpt4 book ai didi

jboss - EclipseLink-Moxy 无法在实例化 JAXB 上下文时加载自定义 DomHandler 类

转载 作者:行者123 更新时间:2023-12-03 17:32:10 25 4
gpt4 key购买 nike

我在我的项目中使用 JAXB 的 Eclipselink Moxy 实现来使用 XmlAnyElement 将复杂的 XML 映射到字符串对象。
为此,我实现了名为 LayoutHandler 的 DomHandler。
我将 JAXB 用于部署在 JBoss 6 中的 resteasy Web 服务。

我间歇性地面临以下问题 -

    Exception [EclipseLink-50033] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): 
org.eclipse.persistence.exceptions.JAXBException
Exception Description: The DomHandlerConverter for DomHandler
[com.**.LayoutHandler] set on property [layoutXml] could not be
initialized.
Internal Exception: java.lang.ClassNotFoundException:
com.**.LayoutHandler from
BaseClassLoader@5c0b3ad0{vfs:///*/*/jboss-server/server/all/deployers/resteasy.deployer}
While EclipseLink Moxy is instantiating JAXBContext using JAXBContext.newInstance(classes, properties)

在花了一些时间调试和分析问题后,我发现 resteasy 的 ClassLoader 正在习惯加载 LayoutHandler 类而不是我的应用程序类加载器(vfs://///jboss-server/server/all/deploy/app_name .ear/app_name.war/) 导致问题,因为它无法找到 LayoutHandler 类。

当我退回服务器时,问题得到解决,因此我无法找出确切的根本原因。任何帮助将不胜感激。

进一步调试到 org.eclipse.persistence.jaxb.JAXBContextFactory 显示以下两个类被传递给 JAXBContextFactory 的 createContext() 方法 -
org.jboss.resteasy.plugins.providers.jaxb.JaxbCollection
com.**.Model_class

public static javax.xml.bind.JAXBContext createContext(Class[] classesToBeBound, Map properties) throws JAXBException {
ClassLoader loader = null;
if (classesToBeBound.length > 0) {
loader = classesToBeBound[0].getClassLoader();
}
return createContext(classesToBeBound, properties, loader);
}

在上面的方法中,第一类的类加载器稍后用于加载自定义 DomHandler。
当数组中的第一个元素是模型类时,代码工作正常,因为应用程序上下文类加载器正在被使用,但是当数组中的第一个元素是 JaxbCollection 时,rest easy上下文类加载器正在被使用,并且抛出提到的异常。

此问题间歇性发生,因为数组中元素的顺序发生变化,这可能是由于传递 classesToBeBound 数组的此方法的调用者使用 HashSet 来保存 Class 类型的元素

Note: I have replaced actual package names with *.

最佳答案

我很惊讶它可以在反弹时工作……您的所有 JAXB 位都需要排队,您应该始终使用 moxy jaxb 提供程序。如果在初始部署后失败,然后在反弹后工作,我怀疑您想在系统属性中指定 moxy jaxb 提供程序( -Djavax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory )并确保在您的应用程序未部署时它们可用于 jboss。

关于jboss - EclipseLink-Moxy 无法在实例化 JAXB 上下文时加载自定义 DomHandler 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51769706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com