2016-03-21 2 views
1

У меня есть веб-приложение, отправляющее почту. Для выполнения отправки почты я использую библиотеку, которая сама основана на Apache Commons Email 1.4. Когда я использовал Websphere Liberty 8.5.5.7, все работало нормально, но после того, как я обновился до 8.5.5.9, он прекратил работу и выбрасывал исключение: javax.mail.NoSuchProviderExceptionполная трассировка стека Я отправил в конце вопроса.javax.mail.NoSuchProviderException: при использовании Liberty 8.5.5.9 с Apache Commons Email 1.4

Опять же, я попытался запустить его на обеих установках Websphere Liberty 8.5.5.7 и 8.5.5.9, на первом он отлично работает, во-вторых, он сломан. Я попытался посмотреть, какая разница, и похоже, что у самой Liberty есть пакет com.ibm.ws.javax.mail-1.5_1.5.xx.jar, который вмешивается в Java javax-mail-1.5.2, который используется commons-email 1.4, см. Здесь pom.xml.

После некоторой отладки я обратил внимание, что: Liberty 8.5.5.9 использует com.ibm.ws.javax.mail-1.5_1.5.12.jarв то время как Liberty 8.5.5.7 использует com.ibm.ws.javax.mail-1.5_1.5.10.jar возможно, что это вызвано мою ошибку.

Итак, мой вопрос в том, как я могу устранить влияние com.ibm.ws.javax.mail, которое поставляется вместе со свободой, чтобы заставить его работать или есть другое обходное решение? Кроме того, где я могу отправить отчет об ошибке для команды Liberty?

Update: Похоже, что свобода имеет JavaMail 1.5 feature, который может быть включен или выключен, я не включил его в явном виде, это выглядит, что на моих функций позволили ему неявно, это мой список функций:

<featureManager> 
     <feature>jdbc-4.1</feature> 
     <feature>adminCenter-1.0</feature> 
     <feature>jndi-1.0</feature> 
     <feature>localConnector-1.0</feature> 
     <feature>servlet-3.1</feature> 
     <feature>ssl-1.0</feature> 
     <feature>jaxrs-2.0</feature> 
     <feature>cdi-1.2</feature> 
     <feature>ejbLite-3.2</feature> 
     <feature>jsf-2.2</feature> 
    </featureManager> 

Update 2 Я решил эту проблему с помощью этой статьи: Overriding a provided API with an alternative version

Просто сделать в вашем server.xml следующие изменения:

<application id="" name="Scholar" type="ear" location="scholar.ear"> 
    <classloader delegation="parentLast" /> 
</application> 

И теперь ваши библиотеки получат более высокий приоритет, чем библиотеки Liberty.

Полный стек след за исключением:

org.apache.commons.mail.EmailException: Sending the email to the following server failed : relay.******.com:25 
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421) ~[commons-email-1.4.jar:1.4] 
    at org.apache.commons.mail.Email.send(Email.java:1448) ~[commons-email-1.4.jar:1.4] 
    at my.package.mailer.sendHtmlMail(IBMMail.java:96) ~[classes/:?] 
    at my.package.mailer.EmailGateway.sendMail(EmailGateway.java:24) [classes/:?] 
    at my.package.mailer.EventMailGateway.eventCreatedNotification(EventMailGateway.java:52) [classes/:?] 
    at **********.restful.EventsAPI.saveEvent(EventsAPI.java:99) [classes/:?] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_45] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_45] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45] 
    at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45] 
    at com.ibm.ws.jaxrs20.server.LibertyJaxRsServerFactoryBean.performInvocation(LibertyJaxRsServerFactoryBean.java:636) [com.ibm.ws.jaxrs-2.0.server_1.0.12.jar:?] 
    at com.ibm.ws.jaxrs20.server.LibertyJaxRsInvoker.performInvocation(LibertyJaxRsInvoker.java:115) [com.ibm.ws.jaxrs-2.0.server_1.0.12.jar:?] 
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:97) [cxf-core-3.0.3.jar:3.0.3] 
    at com.ibm.ws.jaxrs20.server.LibertyJaxRsInvoker.invoke(LibertyJaxRsInvoker.java:210) [com.ibm.ws.jaxrs-2.0.server_1.0.12.jar:?] 
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:200) [cxf-rt-frontend-jaxrs-3.0.3.jar:3.0.3] 
    at com.ibm.ws.jaxrs20.server.LibertyJaxRsInvoker.invoke(LibertyJaxRsInvoker.java:381) [com.ibm.ws.jaxrs-2.0.server_1.0.12.jar:?] 
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99) [cxf-rt-frontend-jaxrs-3.0.3.jar:3.0.3] 
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59) [cxf-core-3.0.3.jar:3.0.3] 
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96) [cxf-core-3.0.3.jar:3.0.3] 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) [cxf-core-3.0.3.jar:3.0.3] 
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:124) [com.ibm.ws.jaxrs-2.0.common_1.0.12.jar:3.0.3] 
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:256) [cxf-rt-transports-http-3.0.3.jar:3.0.3] 
    at com.ibm.ws.jaxrs20.endpoint.AbstractJaxRsWebEndpoint.invoke(AbstractJaxRsWebEndpoint.java:134) [com.ibm.ws.jaxrs-2.0.common_1.0.12.jar:?] 
    at com.ibm.websphere.jaxrs.server.IBMRestServlet.handleRequest(IBMRestServlet.java:149) [com.ibm.ws.jaxrs-2.0.server_1.0.12.jar:?] 
    at com.ibm.websphere.jaxrs.server.IBMRestServlet.doPost(IBMRestServlet.java:107) [com.ibm.ws.jaxrs-2.0.server_1.0.12.jar:?] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [com.ibm.ws.javaee.servlet.3.1_1.0.12.jar:?] 
    at com.ibm.websphere.jaxrs.server.IBMRestServlet.service(IBMRestServlet.java:99) [com.ibm.ws.jaxrs-2.0.server_1.0.12.jar:?] 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1290) [com.ibm.ws.webcontainer_1.1.12.jar:?] 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:778) [com.ibm.ws.webcontainer_1.1.12.jar:?] 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:475) [com.ibm.ws.webcontainer_1.1.12.jar:?] 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1161) [com.ibm.ws.webcontainer_1.1.12.jar:?] 
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:82) [com.ibm.ws.webcontainer_1.1.12.jar:?] 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:928) [com.ibm.ws.webcontainer_1.1.12.jar:?] 
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:262) [com.ibm.ws.webcontainer_1.1.12.jar:?] 
    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:955) [com.ibm.ws.transport.http_1.0.12.jar:?] 
    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:341) [com.ibm.ws.transport.http_1.0.12.jar:?] 
    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:471) [com.ibm.ws.transport.http_1.0.12.jar:?] 
    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:405) [com.ibm.ws.transport.http_1.0.12.jar:?] 
    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:285) [com.ibm.ws.transport.http_1.0.12.jar:?] 
    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:256) [com.ibm.ws.transport.http_1.0.12.jar:?] 
    at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:174) [com.ibm.ws.channelfw_1.0.12.jar:?] 
    at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:83) [com.ibm.ws.channelfw_1.0.12.jar:?] 
    at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:504) [com.ibm.ws.channelfw_1.0.12.jar:?] 
    at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:574) [com.ibm.ws.channelfw_1.0.12.jar:?] 
    at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:929) [com.ibm.ws.channelfw_1.0.12.jar:?] 
    at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1018) [com.ibm.ws.channelfw_1.0.12.jar:?] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_45] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_45] 
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45] 
Caused by: javax.mail.NoSuchProviderException: smtp 
    at javax.mail.Session.getService(Session.java:820) ~[javax.mail-1.5.2.jar:1.5.2] 
    at javax.mail.Session.getTransport(Session.java:742) ~[javax.mail-1.5.2.jar:1.5.2] 
    at javax.mail.Session.getTransport(Session.java:682) ~[javax.mail-1.5.2.jar:1.5.2] 
    at javax.mail.Session.getTransport(Session.java:662) ~[javax.mail-1.5.2.jar:1.5.2] 
    at javax.mail.Session.getTransport(Session.java:719) ~[javax.mail-1.5.2.jar:1.5.2] 
    at javax.mail.Transport.send0(Transport.java:248) ~[javax.mail-1.5.2.jar:1.5.2] 
    at javax.mail.Transport.send(Transport.java:124) ~[javax.mail-1.5.2.jar:1.5.2] 
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1411) ~[commons-email-1.4.jar:1.4] 
    ... 48 more 
+1

Если такая же конфигурация работала в 8.5.5.7, это выглядит как ошибка. Вы можете сообщать об ошибках в IBM через процесс PMR (http://www-01.ibm.com/support/docview.wss?uid=swg21507639), или они отслеживают этот форум и могут решить его таким образом. Согласно Центру знаний для функции javaMail-1.5 (http://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.wlp.nd.multiplatform.doc/ae/rwlp_feature_javaMail-1.5.html), ни одна из функций, которые вы включили, должна включать javaMail-1.5. –

+0

Связано: [Ошибка 6668 - пропустить непригодные классы Store и Transport] (https://kenai.com/bugzilla/show_bug.cgi?id=6668), который исправлен в JavaMail 1.5.3 и более поздних версиях. Попробуйте обновить JavaMail до новой версии. – jmehrens

ответ

1

Я решил эту проблему с помощью этой статьи: Overriding a provided API with an alternative version

Просто сделать в вашем server.xml следующие изменения:

<application id="" name="Scholar" type="ear" location="scholar.ear"> 
    <classloader delegation="parentLast" /> 
</application> 

И теперь ваши библиотеки получат более высокий приоритет, чем библиотеки Liberty.

0

Я ударил javax.mail.NoSuchProviderException: smtp после обновления от Liberty 8.5.5.8 до 8.5.5.9. Добавление <feature>javaMail-1.5</feature> к моему серверу.xml сработало для меня.

Смежные вопросы