gpt4 book ai didi

java - JAXB 的 ClassCastException - Websphere jar 与 applicationl jar

转载 作者:行者123 更新时间:2023-11-28 22:17:58 38 4
gpt4 key购买 nike

尝试将 Java 对象编码为字符串时出现类强制转换异常。我在我的 lib 文件夹中包含了 JAXB-2.1 jar。部署到 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 - JAXB 的 ClassCastException - Websphere jar 与 applicationl jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053893/

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