所以,这是我上一个问题的传奇:javax.mail.NoSuchProviderException: when using Liberty 8.5.5.9 with Apache Commons Email 1.4我在Apache Commons Email和 Websphere Liberty Feature JavaMail 1.5 功能
之间有冲突,我已经通过使用<classloader delegation="parentLast" />
.
一切正常,直到我开始实现文件上传,通过使用本教程中所述的 jax-rs 2.0配置资源以从 JAX-RS 2.0 中的 HTML 表单提交中接收 multipart/form-data 部分
当我的代码到达以下行时:
stream = dataHandler.getInputStream();
stream
is type of InputStream
ie 我正在尝试对 object 做某事,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
事实上,DataHandler
作为Apache Commons Email的一部分和DataHandler
IBM 的IAttachment
see javadoc实现中存在对象,它们是冲突的。
那么,如何解决呢?可以通过配置解决吗?编写自定义类加载器不是可接受的解决方案。
更新:从我的问题中不清楚,但现在我有两个阶段,一个是我使用<classloader delegation="parentLast" />
我的邮件工作但文件上传不起作用,没有<classloader delegation="parentLast" />
我的邮件不起作用但文件上传工作。当我在 WAS Liberty 8.5.5.7 或 8.5.5.8 上部署我的应用程序时,它工作正常,问题仅存在于 8.5.5.9