Websphere Liberty 8.5.5.9中的javax.activation.DataHandler冲突
这是我在上一个问题中的故事: 我已经解决了和WebSphereLiberty特性之间的冲突,通过使用Websphere Liberty 8.5.5.9中的javax.activation.DataHandler冲突,websphere,classloader,websphere-liberty,server.xml,Websphere,Classloader,Websphere Liberty,Server.xml,这是我在上一个问题中的故事: 我已经解决了和WebSphereLiberty特性之间的冲突,通过使用首先定义应用程序的JAR加载 在我开始使用本教程中描述的jax rs 2.0实现文件上传之前,一切都很顺利 当我的代码到达以下行时: stream=dataHandler.getInputStream()stream是InputStream的类型,即,我试图对DataHandler对象执行某些操作。它会引发异常: [ERROR ] Error occurred during error han
首先定义应用程序的JAR加载
在我开始使用本教程中描述的jax rs 2.0实现文件上传之前,一切都很顺利
当我的代码到达以下行时:
stream=dataHandler.getInputStream()
stream
是InputStream
的类型,即,我试图对DataHandler
对象执行某些操作。它会引发异常:
[ERROR ] Error occurred during error handling, give up!
loader constraint violation: loader (instance of com/ibm/ws/classloading/internal/ParentLastClassLoader) previously initiated loading for a different type with name "javax/activation/DataHandler"
[ERROR ] SRVE0777E: Exception thrown by application class 'org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage:116'
java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: loader constraint violation: loader (instance of com/ibm/ws/classloading/internal/ParentLastClassLoader) previously initiated loading for a different type with name "javax/activation/DataHandler"
at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116)
at [internal classes]
Caused by: org.apache.cxf.interceptor.Fault: loader constraint violation: loader (instance of com/ibm/ws/classloading/internal/ParentLastClassLoader) previously initiated loading for a different type with name "javax/activation/DataHandler"
at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:163)
... 1 more
Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of com/ibm/ws/classloading/internal/ParentLastClassLoader) previously initiated loading for a different type with name "javax/activation/DataHandler"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at com.ibm.ws.classloading.internal.AppClassLoader.definePackageAndClass(AppClassLoader.java:327)
at [internal classes]
at ****.EventsAPI.handleUploadedEventForm(EventsAPI.java:174)
at ****.EventsAPI.postFormData(EventsAPI.java:114)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.ibm.ws.jaxrs20.server.LibertyJaxRsServerFactoryBean.performInvocation(LibertyJaxRsServerFactoryBean.java:636)
... 1 more
实际上,在IBM的IAttachment
实现中,有DataHandler
对象作为和DataHandler
的一部分,它们是相互冲突的
那么,如何解决呢?可以通过配置来解决吗?编写自定义类加载器不是可接受的解决方案
更新:我的问题不清楚,但现在我有两个阶段,一个是当我使用
我的邮件工作,但文件上传不工作,而没有
我的邮件工作,但文件上传工作。当我在WAS Liberty 8.5.5.7或8.5.5.8上部署我的应用程序时,它工作正常,问题只存在于8.5.5.9中,实际上我找到了解决此问题的方法
首先,我将范围更改为提供了我的库中包含的所有依赖项的
。我再次使用我的库发送电子邮件,这取决于:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
org.apache.commons
已显式包含此库的。我还删除了:
唯一一个问题仍然没有答案,为什么以前会发生冲突?如果有人能提供更详细的解释,那就太好了。您是否尝试过在server.xml中的
元素中嵌套
元素?这应该确保应用程序提供的任何LIB优先于Liberty中的任何冲突类。是的,我没有很好地解释我自己(现在我更新了我的问题),但是使用了
邮件工作但上传不工作,没有
上传工作但邮寄不工作。问题只存在于8.5.5.9