我使用的是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-api
和jaxb-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-api
和jax-impl
个罐子添加到此文件夹
<library id="shared-libs">
<fileset dir="${server.config.dir}/lib/global" include="*.jar"/>
</library>
但是我仍然拥有ClassCastException
,看起来它仍在使用parentFirst
类加载?
我发现了其他jaxb ClassCastException线程,但在使用Liberty配置文件时却没有。
答案 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来解决问题。谢谢您的帮助。