java - ClassCastException 与 JAXB - Websphere jar 与 applicationl jar

标签 java tomcat jaxb websphere ibm-was

当我尝试将 Java 对象编码为字符串时,出现类转换异常。我已将 JAXB-2.1 jar 包含在我的 lib 文件夹中。当部署到 WAS 时,我将类加载器策略更改为最后父级,以便首先获取本地库中的 jar。但这仍然引发类转换异常并显示以下消息。出现这个错误的原因是什么?

javax.xml.bind.JAXBException: ClassCastException: attempting to cast jar:file:/opt/was7/base/crm/java/jre/lib/rt.jar!/javax/xml/bind/JAXBContext.class to wsjar:file:/prod/wesadm/wes/was7/base/profiles/sadasd/installedApps/asdadad/myapp.ear/myapp_war.war/WEB-INF/lib/jaxb-api-2.1.jar!/javax/xml/bind/JAXBContext.class.  Please make sure that you are specifying the proper ClassLoader.
        at javax.xml.bind.ContextFinder.handleClassCastException(ContextFinder.java:96)
        at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:214)
        at javax.xml.bind.ContextFinder.find(ContextFinder.java:372)
        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
        at com.my.MyClass.convertObjectToXML()

这是convertObjectToXML()方法。

private <T> String convertObjectToXMLString(T obj) throws JAXBException {
        JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
        Marshaller marshaller = jaxbContext.createMarshaller();

        StringWriter sw = new StringWriter();
        marshaller.marshal(obj, sw);

        return sw.toString();

    }

此逻辑在部署到 Tomcat 时工作正常。尽管我最后提到了类加载器作为父加载器,但我无法弄清楚为什么 WAS jar 会被拾取。

最佳答案

您似乎将 JAXB api jar 与您的应用程序捆绑在一起。从您的应用程序中删除它们,它就会起作用。这些 jar 已经与 WebSphere 捆绑在一起(实际上它们是 JRE 的一部分),并且它会导致类加载器异常,因为存在相同类的两个版本

关于java - ClassCastException 与 JAXB - Websphere jar 与 applicationl jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053893/

相关文章:

java - 使用 Mybatis 检查 SQL 注入(inject)的输入

linux - Tomcat 服务器在 tmp 中创建目录

java - Tomcat7 未能部署 Web 应用程序 CSRF Token

java - Maven jaxb生成插件从多个目录读取xsd文件

java - 与祖先具有相同属性值的项目的 Xpath

java - 一个我无法解决的简单错误

java - 通过代码进行基本身份验证的嵌入式 Tomcat

eclipse - 我的第一个 JSF 程序出错。 Tomcat 和 Eclipse

rest - 如何使用 AngularJs 和 jersey 编写 REST 应用程序

xml - 使用冗余命名空间解析 XML