[MGNLREST-348] Multiple mail jars. Created: 16/Nov/21  Updated: 19/Sep/22  Resolved: 21/Feb/22

Status: Closed
Project: Magnolia REST Framework
Component/s: None
Affects Version/s: None
Fix Version/s: 2.2.12

Type: Bug Priority: Neutral
Reporter: Michiel Meeuwissen Assignee: Mikaël Geljić
Resolution: Fixed Votes: 2
Labels: None
Remaining Estimate: Not Specified
Time Spent: 0d
Original Estimate: Not Specified

Issue Links:
Relates
relates to MGNLREST-450 Multiple activation jars. Closed
causality
is causing MGNLREST-418 Missing javax.mail dependency Open
Template:
Acceptance criteria:
Empty
Task DoD:
[X]* Doc/release notes changes? Comment present?
[X]* Downstream builds green?
[X]* Solution information and context easily available?
[X]* Tests
[X]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled
Date of First Response:

 Description   

I find in our application three mail jars:

[INFO] +- info.magnolia.pur:magnolia-module-public-user-registration:jar:2.7.5:compile
[INFO] | - javax.mail:mail:jar:1.4.5:compile

[INFO] +- info.magnolia.form:magnolia-form:jar:2.7.3:compile
[INFO] | - info.magnolia:magnolia-module-mail:jar:5.5.8:compile
[INFO] | +- com.sun.mail:javax.mail:jar:1.6.2:compile

and another one via resteasy:
- org.jboss.resteasy:resteasy-multipart-provider:jar:4.6.1.Final:compile
[INFO] | | +- com.sun.mail:jakarta.mail:jar:1.6.5:compile

It would be nice if versions (and groupids) were in sync. I think the last one has the most up to date groupId/artifactid.



 Comments   
Comment by Mikaël Geljić [ 18/Feb/22 ]

Hi mihxil,

com.sun.mail:jakarta.mail and com.sun.mail:javax.mail are equivalent in terms of spec (but they also contain some impl).

Moving this ticket to MGNLREST as we will apply an exclusion to the resteasy-multipart-provider usage. We keep the javax.mail one because Magnolia 6.2 is on a Java EE 8 baseline (see also https://eclipse-ee4j.github.io/mail/).

Regarding the old version coming through public-user-registration, we cannot exclude this one for you as PUR is not part of the standard bundle, but your dependency should look like that:

<dependency>
  <groupId>info.magnolia.pur</groupId>
  <artifactId>magnolia-module-public-user-registration</artifactId>
  <exclusions>
    <exclusion>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
    </exclusion>
  </exclusions>
</dependency>
Comment by Michiel Meeuwissen [ 29/Mar/22 ]

So, who is maintaining pur? It seems that it is in the info.magnolia domain ,and it is extending the 'magnolia-external-dependencies' poms, which defined two mail jars:

 <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.5</version>
      </dependency>
      <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.5.6</version>
      </dependency>

I think it would be a good idea to try to arrange that everything depending on magnolia, e.g. by using (one of its) parent poms(s) should use the same idea of that mail-jars it should depend on.

Comment by Mikaël Geljić [ 01/Apr/22 ]

Hi Michiel, thanks for reporting back, PUR is not bundled but it is indeed officially maintained by us. I'll look up why I initially dismissed it being an issue (could be) and get back to you.

Comment by Richard Gange [ 06/Jun/22 ]

It seems now that rest is dependent on the mail module. If I try to exclude it then I run into this issue:

2022-06-06 10:23:10,464 INFO  info.magnolia.cms.filters.CompositeFilter         : Initializing filter [Wrapper for DamDownloadServlet servlet]
2022-06-06 10:23:10,465 INFO  info.magnolia.cms.filters.CompositeFilter         : Initializing filter [Wrapper for RestDispatcherServlet servlet]
2022-06-06 10:23:10,998 WARN  org.jboss.resteasy.resteasy_jaxrs.i18n            : RESTEASY002145: NoClassDefFoundError: Unable to load builtin provider org.jboss.resteasy.plugins.providers.multipart.MimeMultipartProvider from jar:file:/Users/rich.gange/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/light-author-webapp/WEB-INF/lib/resteasy-multipart-provider-4.6.1.Final.jar!/META-INF/services/javax.ws.rs.ext.Providers
java.lang.NoClassDefFoundError: javax/mail/MessagingException
	at java.lang.Class.getDeclaredConstructors0(Native Method) ~[?:1.8.0_261]
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) ~[?:1.8.0_261]
	at java.lang.Class.getConstructors(Class.java:1651) ~[?:1.8.0_261]
	at org.jboss.resteasy.spi.util.PickConstructor.pickSingletonConstructor(PickConstructor.java:30) ~[resteasy-core-spi-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.core.providerfactory.Utils.createConstructorInjector(Utils.java:111) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.core.providerfactory.Utils.createProviderInstance(Utils.java:100) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.core.providerfactory.CommonProviders.processProviderContracts(CommonProviders.java:87) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.core.providerfactory.ClientHelper.processProviderContracts(ClientHelper.java:104) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.core.providerfactory.ResteasyProviderFactoryImpl.processProviderContracts(ResteasyProviderFactoryImpl.java:841) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.core.providerfactory.ResteasyProviderFactoryImpl.registerProvider(ResteasyProviderFactoryImpl.java:829) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.core.providerfactory.ResteasyProviderFactoryImpl.registerProvider(ResteasyProviderFactoryImpl.java:816) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.plugins.providers.RegisterBuiltin.registerProviders(RegisterBuiltin.java:109) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.plugins.providers.RegisterBuiltin.register(RegisterBuiltin.java:74) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.core.ResteasyDeploymentImpl.startInternal(ResteasyDeploymentImpl.java:148) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.core.ResteasyDeploymentImpl.start(ResteasyDeploymentImpl.java:121) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:144) ~[resteasy-core-4.6.1.Final.jar:4.6.1.Final]
	at info.magnolia.rest.RestDispatcherServlet.init(RestDispatcherServlet.java:123) ~[magnolia-rest-integration-2.2.13.jar:?]
	at info.magnolia.cms.filters.ServletDispatchingFilter.initializeServlet(ServletDispatchingFilter.java:112) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.ServletDispatchingFilter.init(ServletDispatchingFilter.java:103) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.CompositeFilter.initFilters(CompositeFilter.java:136) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.CompositeFilter.init(CompositeFilter.java:111) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.CompositeFilter.initFilters(CompositeFilter.java:136) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.CompositeFilter.init(CompositeFilter.java:111) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.FilterManagerImpl.initRootFilter(FilterManagerImpl.java:177) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.FilterManagerImpl.resetRootFilter(FilterManagerImpl.java:150) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.FilterManagerImpl.startUsingConfiguredFilters(FilterManagerImpl.java:140) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.module.ui.InstallationFilter.doFilter(InstallationFilter.java:102) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:75) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.SafeDestroyMgnlFilterWrapper.doFilter(SafeDestroyMgnlFilterWrapper.java:107) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:67) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:110) ~[magnolia-core-6.2.19.jar:?]
	at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:96) ~[magnolia-core-6.2.19.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.50]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.50]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[catalina.jar:9.0.50]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:9.0.50]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[catalina.jar:9.0.50]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[catalina.jar:9.0.50]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.50]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) ~[catalina.jar:9.0.50]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:9.0.50]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[catalina.jar:9.0.50]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-coyote.jar:9.0.50]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-coyote.jar:9.0.50]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-coyote.jar:9.0.50]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723) ~[tomcat-coyote.jar:9.0.50]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.50]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_261]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_261]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.50]
	at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_261]
Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407) ~[catalina.jar:9.0.50]
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215) ~[catalina.jar:9.0.50]
	... 55 more

Maybe we need to make sure that javax.mail is a dependency in the rest-integration module pom?

Generated at Mon Feb 12 06:59:02 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.