Я получаю исключение класса при попытке перенести объект Java в строку marhsal. Я включил JAXB-2.1 jar в папку lib. При развертывании в WAS я изменил стратегию загрузчика классов на родительский последний, чтобы сначала собрать первую банку в моей локальной библиотеке. Но это все равно бросает исключение класса из следующего сообщения. В чем причина этой ошибки?ClassCastException с JAXB - Websphere jar vs applicationl 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 берутся, хотя я упоминал загрузчик классов как последний.
Вы проверили политику на своем сервере, если политика одинарная, тогда режим на уровне сервера будет принудительно задействован во всех ваших приложениях, если политика несколько, тогда каждое приложение будет иметь свой собственный режим https://www.ibm .com/support/knowledgecenter/was_beta/com.ibm.websphere.base.doc/ae/crun_classload.html% 23crun_classload__crun_classload_modes – achabahe