1

メールを読むための pop3 camel ルートを含む osgi バンドルを作成しました。servicemix 5.1 にデプロイすると、添付ファイルは期待どおりに正しく読み取られます。

ただし、同じバンドルが FuseEsb-7.1.0.fuse-047-1_2013 で問題を引き起こします。camel exchange (以下のコード スニペットでは変数contentObject) 内から利用可能なメッセージのコンテンツは、「javax.mail.Multipart」ではなく「SharedByteArrayInputStream」タイプとして表示されます。

私はたくさんグーグルで検索し、関連する問題に言及している投稿を見つけました。これは、javax.activation が javax.mail とは異なるクラスローダーによってロードされていることが原因です。javax.activation は、javamail アーティファクトから META-INF/mailcap を読み取る必要があるようですが、それを見ることができません。javax.mail の最近のバージョンでは MAINFEST が修正されて mailcap が含まれるようになったようですが、FuseESB ではまだ発生しているようです。

ServiceMix 構成:

  • Servicemix バージョン = 5.1
  • Camel-mail=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
  • Camel-core=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>
4

0 に答える 0