classloader - javax.activation.DataHandler conflicts in Websphere Liberty 8.5.5.9 -


so, saga previous question here: javax.mail.nosuchproviderexception: when using liberty 8.5.5.9 apache commons email 1.4 i've had have conflicts between apache commons email , websphere liberty feature javamail 1.5 feature i've solved defining app's jars loading first using <classloader delegation="parentlast" />.

everything worked fine until i've started implement fileupload, using jax-rs 2.0 described in tutorial configuring resource receive multipart/form-data parts html form submission in jax-rs 2.0

when code reaches following line: stream = datahandler.getinputstream(); stream type of inputstream i.e. i'm trying datahandler object throws exception:

[error   ] error occurred during error handling, give up! loader constraint violation: loader (instance of com/ibm/ws/classloading/internal/parentlastclassloader) initiated loading different type name "javax/activation/datahandler" [error   ] srve0777e: exception thrown 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) initiated loading different type name "javax/activation/datahandler"     @ org.apache.cxf.interceptor.abstractfaultchaininitiatorobserver.onmessage(abstractfaultchaininitiatorobserver.java:116)     @ [internal classes] caused by: org.apache.cxf.interceptor.fault: loader constraint violation: loader (instance of com/ibm/ws/classloading/internal/parentlastclassloader) initiated loading different type name "javax/activation/datahandler"     @ 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) initiated loading different type name "javax/activation/datahandler"     @ java.lang.classloader.defineclass1(native method)     @ java.lang.classloader.defineclass(classloader.java:760)     @ com.ibm.ws.classloading.internal.appclassloader.definepackageandclass(appclassloader.java:327)     @ [internal classes]     @ ****.eventsapi.handleuploadedeventform(eventsapi.java:174)     @ ****.eventsapi.postformdata(eventsapi.java:114)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:497)     @ com.ibm.ws.jaxrs20.server.libertyjaxrsserverfactorybean.performinvocation(libertyjaxrsserverfactorybean.java:636)     ... 1 more 

and indeed there's datahandler object part of apache commons email , datahandler in ibm's implementation of iattachment see javadoc, , conflicting.

so, how can resolved? can resolved through configuration? writing custom classloader isn't acceptable solution.

update: isn't clear question have 2 stages, 1 when i'm using <classloader delegation="parentlast" /> mailing work fileupload doesn't work , without <classloader delegation="parentlast" /> mailing doesn't work fileuploading work. when deploy app on liberty 8.5.5.7 or 8.5.5.8 works fine, problem exists 8.5.5.9

actually i've find workaround issue.

first of i've changed scope <scope>provided</scope> of included dependencies has library. once again, used library send emails, depend on:

    <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> 

so parent application required supply required dependencies, common-emails , commons-io. commons-io i've added through parent's pom.xml regarding commons-email i've installed feature javamail-1.5 explicitly has library. i've removed: <classloader delegation="parentlast" />

the 1 question remained unanswered why did conflict before? if provide more detailed explanation it'll great.


Comments