2010-12-03 3 views
0

J'essaie d'écrire du code qui lit les courriels et fournit des services Web reposants.Apache Jax-RS rompt printemps-intégration-mail

J'ai un fichier de test simple qui lit les messages de Gmail (over pop). Cependant, il semble que lorsque j'ajoute cxf-rf-frontend-jaxrs à mon fichier pom.xml, cela empêche le fonctionnement de ce fichier de test.

Toute personne capable de démêler cela?

Merci, du code et d'autres choses.

L'erreur est:

org.springframework.integration.core.MessagingException: failure occurred while receiving from folder 
    at org.springframework.integration.mail.AbstractMailReceiver.receive(AbstractMailReceiver.java:173) 
    at mail.GmailManualTester.testPop(GmailManualTester.java:36) 

Caused by: java.lang.NullPointerException 
    at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1166) 
    at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1135) 
    at javax.mail.internet.MimeMessage.<init>(MimeMessage.java:182) 
    at org.springframework.integration.mail.Pop3MailReceiver.deleteMessages(Pop3MailReceiver.java:78) 
    at org.springframework.integration.mail.AbstractMailReceiver.receive(AbstractMailReceiver.java:164) 

Le fichier test src/test/java/mail/GmailManualTester.java

package mail; 
import java.util.Properties; 
import javax.mail.Message; 
import org.junit.Test; 
import org.springframework.integration.mail.Pop3MailReceiver; 

public class GmailManualTester { 

    @Test 
    public void testPop() throws Exception { 

     Pop3MailReceiver mail = new Pop3MailReceiver(
     "pop3://USERNAME%40DOMAIN:[email protected]:995/INBOX"); 

     Properties props = new Properties(); 
     props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
     props.setProperty("mail.pop3.socketFactory.fallback", "false"); 

     mail.setJavaMailProperties(props); 

     Message[] messages = mail.receive(); 
     System.out.println("Got " + messages.length + " messages"); 

     for (Message message : messages) { 
      System.out.println("Subject: " + message.getSubject()); 
    } 
    } 
} 

et le pom.xml est

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>net.sf</groupId> 
    <artifactId>boom</artifactId> 
    <packaging>war</packaging> 
    <version>1.0</version> 
    <name>Example</name> 
    <url>http://maven.apache.org</url> 

    <dependencies> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.6</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxrs</artifactId> 
     <version>2.3.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.integration</groupId> 
     <artifactId>spring-integration-mail</artifactId> 
     <version>1.0.2SR1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-email</artifactId> 
     <version>1.1</version> 
    </dependency> 

    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
      <debug>false</debug> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

</project> 

Edit: a pris toutes les dépendances du fichier ~/.m2 /.../ cxf-rt-frontend-jaxrs-2.3.0.pom et les a placées dans mon propre fichier pom.xml en tant qu'exclusions. Je les ai allumés et éteints jusqu'à ce que j'en trouve un seul:

Si je mets ceci dans mon fichier pom, je peux récupérer des messages. Si je commente, je reçois l'erreur d'en haut. Encore besoin de creuser plus loin dans cela maintenant, cependant. Excluant cela brise probablement les services Web dans mon application.

<exclusion> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-core</artifactId> 
    </exclusion> 
+0

Il n'y a pas d'erreur s'il n'y a pas de messages - seulement s'il y a un message en attente. – woddle

Répondre

1

CxF-rt-core dépend de geronimo-javamail_1.4_spec qui est un fournisseur de javamail différent de ce que le printemps apporte (je pense). Cependant, cxf ne fait que l'utiliser comme fournisseur javamail, donc tout fournisseur devrait fonctionner correctement. Ainsi, si vous ajoutez une exclusion pour cela et que vous autorisez la version du printemps à entrer, vous devriez tous être prêts.

+0

Bonjour Daniel. J'ai ajouté la dépendance cxf-rt-core au pom de mon propre projet, et j'ai mis l'exclusion comme ci-dessus, et cela semble fonctionner maintenant. Je suppose que l'ordre des dépendances est important. J'étudierai votre solution plus tard/demain/lundi, aussi; Je vous remercie. – woddle

+0

Ok, mon propre mélange de dépendances a fonctionné à la maison (Linux) mais pas maintenant je suis de retour au travail (Windows). Votre suggestion d'exclure geronimo-javamail fonctionne bien. Merci beaucoup à vous! – woddle

Questions connexes