WebSphere Liberty概要文件JAXBContext ClassCastException

时间:2014-12-05 14:26:23

标签: jaxb websphere classcastexception websphere-liberty

我使用的是WebSphere Liberty Profile服务器,版本8.5.5.3。我有一个包含多场战争的耳朵。我将它们全部展开(耳朵和它内部的模块的战争)。

部署它时,我得到以下类强制转换异常:

java.lang.RuntimeException: javax.xml.bind.JAXBException: 
ClassCastException: attempting to cast bundleresource://67.fwk-1166858817/javax/xml/bind/JAXBContext.class 
to jar:file:/C:/ws/IBM/java_1.7_64/jre/lib/rt.jar!/javax/xml/bind/JAXBContext.class.
Please make sure that you are specifying the proper ClassLoader.

我认为问题在于我的捆绑的jax-apijaxb-impl jar没有加载,因此我添加了server.xml parentLast类加载选项:

<enterpriseApplication id="ear-app" location="C:/ws/ear/exploded/ear-app.ear" name="ear-app" >
    <classloader delegation="parentLast" commonLibraryRef="provided-jars" privateLibraryRef="shared-libs"/>
</enterpriseApplication>    

我将jax-apijax-impl个罐子添加到此文件夹

<library id="shared-libs">
    <fileset dir="${server.config.dir}/lib/global" include="*.jar"/>
</library>

但是我仍然拥有ClassCastException,看起来它仍在使用parentFirst类加载?

我发现了其他jaxb ClassCastException线程,但在使用Liberty配置文件时却没有。

2 个答案:

答案 0 :(得分:1)

也许这是一个错字,但在您的帖子中,您有delegation="parentFirst"而不是 parentLast

您是否检查过如此更改代理申请:

<enterpriseApplication id="ear-app" location="C:/ws/ear/exploded/ear-app.ear" name="ear-app" >
    <classloader delegation="parentLast"/>
</enterpriseApplication> 

有关详细信息,请参阅Overriding a provided API with an alternative version

答案 1 :(得分:0)

我通过不使用父Last来解决问题。谢谢您的帮助。