2010-12-03 3 views
0

Я пытаюсь написать код, который читает электронную почту и предоставляет успокоительные веб-службы.Apache Jax-RS breaks spring-integration-mail

У меня есть простой тестовый файл, который читает сообщения из gmail (over pop). Однако кажется, что когда я добавляю cxf-rf-frontend-jaxrs в свой pom.xml, он останавливает работу тестового файла.

Любой, кто может распутать это?

Спасибо, код и прочее следует.

Ошибка:

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) 

тест файл SRC/тест/Java/почта/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()); 
    } 
    } 
} 

и pom.xml является

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

Правка: взяла ВСЕ зависимости из файла ~/.m2 /.../ cxf-rt-frontend-jaxrs-2.3.0.pom и поместила их в свой собственный pom.xml в качестве исключений. Включил их и выключил, пока не нашел только один причиняющий его:

Если я поместил это в мой файл pom, я могу получить сообщения. Если я прокомментирую это, я получаю ошибку сверху. Тем не менее, нужно еще больше копаться в этом. Исключая это, возможно, нарушает веб-службы в моем приложении.

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

Это не ошибка, если нет сообщений - только если есть ожидание сообщения. – woddle 2010-12-03 18:08:16

ответ

1

CXF-RT-ядро зависит от Джеронимо-javamail_1.4_spec, который является другим поставщиком JavaMail, чем то, что приносит весну в (я думаю). Однако cxf просто использует его как поставщик javamail, поэтому любой поставщик должен работать нормально. Таким образом, если вы добавите исключение для этого и включите версию весны, вы должны быть настроены.

+0

Привет, Даниэль. Я добавил зависимость cxf-rt-core к pom моего собственного проекта и включил исключение, как указано выше, и, похоже, работает сейчас. Я предполагаю, что порядок зависимостей имеет значение. Я буду исследовать ваше решение позже/завтра/в понедельник; Спасибо. – woddle 2010-12-04 11:40:00

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