Невозможно получить вложения электронной почты или многокомпонентный контент с помощью Camel-Mail в FuseESB / OSGI

Я создал пакет osgi с верблюдным маршрутом pop3 для чтения писем. При развертывании в servicemix 5.1 вложения читаются правильно, как и ожидалось.

Тем не менее, тот же пакет создает проблему в FuseEsb-7.1.0.fuse-047-1_2013. Содержимое сообщения доступно из обмена верблюдов (в приведенном ниже фрагменте кода переменная contentObject) появляются с типом "SharedByteArrayInputStream", а не с "javax.mail.Multipart".

Я много гуглил и нашел посты, в которых упоминалась связанная проблема, которая вызвана загрузкой javax.activation другим загрузчиком классов, отличным от javax.mail. Похоже, javax.activation нужно прочитать META-INF/mailcap из артефакта javamail, но он не может его увидеть. Последние версии javax.mail, кажется, исправили MAINFEST для включения mailcap, но, похоже, все еще происходит с FuseESB.

Конфигурация ServiceMix:

  • Версия Servicemix = 5.1
  • Camel-почта =2.13.2
  • Верблюд-жильный =2.13.2
  • javax.mail = Java7
  • Javax.activation = Java7

Конфигурация FuseEsb:

  • Версия FuseESB = 7.1.0
  • Camel.mail = 2.10.0.fuse-71-047
  • Верблюд-жильный = 2.10.0.fuse-71-047
  • Javax.mail = Java7
  • javax.activation = Java7

Может кто-нибудь, пожалуйста, помогите мне решить эту проблему? Ниже приведен фрагмент кода для чтения почты и верблюжий маршрут. Пожалуйста, дайте мне знать, если какая-либо дополнительная информация требуется для устранения проблемы. Благодарю.

Фрагмент кода:

package test.mail.attachment;

import javax.mail.BodyPart;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.internet.MimeMessage;

import org.apache.camel.Exchange;
import org.apache.camel.Processor;

public class MyProcessor implements Processor {

 public void process(Exchange exchange) throws Exception {

  String result = null;
  javax.mail.Message message = exchange.getIn().getBody(
    javax.mail.Message.class);

  if (message instanceof MimeMessage) {

   MimeMessage m = (MimeMessage) message;
   Object contentObject = m.getContent();

   if (contentObject instanceof Multipart) {

    Multipart content = (Multipart) contentObject;
    int count = content.getCount();

    for (int i = 0; i < count; i++) {

     BodyPart part = content.getBodyPart(i);
     System.out.println(part.getContentType());

     if (part.isMimeType("text/plain")) {
      result = (String) part.getContent();
      break;
     } 
     else 
     if (part.isMimeType("text/html")) {
      result = (String) part.getContent();

     } 
     else
     if (part.isMimeType("multipart/alternative")) {

      Multipart mp = (Multipart) part.getContent();
      String text = null;

      for (int i1 = 0; i1 < mp.getCount(); i1++) {

       Part bp = mp.getBodyPart(i);
       if (bp.isMimeType("text/plain")) {

        if (text == null) {
         result = (String) bp.getContent();
         break;
        }

       } else if (bp.isMimeType("text/html")) {
        result = (String) bp.getContent();
       }
      }
     }
    }
   }
   else
   if(contentObject instanceof String)  {// a simple text message
    result = (String) contentObject;
   } 
   else { 
    // not a mime message
    // logger.log(Level.WARNING,"notme part or multipart {0}",message.toString());
        result = null;
       }

       System.out.println(result);
      }
 }
}

Код маршрута верблюда

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgi="http://www.springframework.org/schema/osgi"
 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:camel="http://camel.apache.org/schema/spring" xmlns:util="http://www.springframework.org/schema/util"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
                      http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
                      http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
                      http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
                      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

 <camelContext xmlns="http://camel.apache.org/schema/spring">

  <route id="mailreader">
    <from
    uri="pop3://mydomain?password=password&amp;username=user1@mydomain&amp;mapMailMessage=false&amp;delete=true&amp;unseen=true&amp;consumer.delay=2000" />

   <log message="Transforming input file" />
   <process ref="myProcessor" />
   <to uri="log:myLog" />
  </route>

 </camelContext>

 <bean id="myProcessor" class="test.mail.attachment.MyProcessor" />
</beans>

0 ответов

Другие вопросы по тегам