如何在 weblogic 12.1.3 中指定 JAXBContext 实现

How to specify JAXBContext implementation in weblogic 12.1.3

我在 java 中创建了一个 MDB,使用 JAXB 来解析 xml 内容。 这个 MDB 在 10.3.4 weblogic 服务器上运行了很长时间(大约 3 年)。

现在我必须将它迁移到 weblogic 12.1.3 服务器上,由于我还不知道的原因,weblogic 选择的实现与我想要的不一样。但是我不知道怎么设置。

现在我的代码初始化代码是这样的:

private JAXBContext getJAXBContext() throws JAXBException {
    if (v1JaxbContext == null) {
       v1JaxbContext = JAXBContext.newInstance(MyClass.class);
    }
    System.out.println("jaxbContext : "+v1JaxbContext.getClass().getName());
    return v1JaxbContext;
}

MyClass.java 由 JAXB 从 XSD 生成。

在我的 eclipse 上,输出是 com.sun.xml.internal.bind。v2.runtime.JAXBContextImpl

在我的 weblogic 方面,输出是 org.eclipse.persistence.jaxb.JAXBContext

因为我通过 EAR 使用我的代码,所以我不得不添加这些行:

<wls:prefer-application-resources>
    <resource-name>META-INF/services/javax.xml.bind.JAXBContext</resource-name>
</wls:prefer-application-resources>  

并在我的 EAR services/javax.xml.bind.JAXBContex 的 META-INF 目录中创建文件,其中仅包含,并且有效

com.sun.xml.bind.v2.ContextFactory

我遇到了同样的问题并制定了不需要创建新文件的类似解决方案:

<prefer-application-resources> <resource-name>javax.xml.bind.*</resource-name> </prefer-application-resources>