I have created an osgi bundle with a pop3 camel route for reading mails. When
deployed in servicemix 5.1, the attachments are getting read properly as
expected.

However, the same bundle gives problem in FuseEsb-7.1.0.fuse-047-1_2013. The
contents of message available from within camel exchange(in the code snippet
below, the variable contentObject) are appearing as of type
'SharedByteArrayInputStream' rather than 'javax.mail.Multipart'.

I Have googled a lot and found posts mentioning a related problem which is
caused by javax.activation being loaded by different classloader than
javax.mail. Seems like javax.activation needs to read META-INF/mailcap from
the javamail artifact but it can't see it. Recent versions of javax.mail
seems to have fixed the MAINFEST to include mailcap, but it still seems to
occur with FuseESB.

ServiceMix configuration :

Servicemix version=5.1
Camel-mail=2.13.2
Camel-core=2.13.2
javax.mail=Java7
Javax.activation=Java7
FuseEsb configuration :

FuseESB version=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
Can anyone please help me to resolve this issue ? Below are the code snippet
to read the mail and the camel route. Please let me know if any further
information is required to debug the problem. Thanks.

Code snippet:

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);
      }
 }
}
Camel Route Code

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



--
View this message in context: 
http://camel.465427.n5.nabble.com/Unable-to-fetch-Email-attachments-or-Multipart-content-using-Camel-Mail-in-FuseESB-OSGI-tp5757189.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to