2010-12-03 76 views
0

我正在嘗試編寫一些讀取電子郵件並提供寧靜的Web服務的代碼。Apache Jax-RS打破彈簧整合郵件

我有一個簡單的測試文件,從Gmail讀取消息(通過彈出)。但是,似乎當我將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文件,我可以檢索郵件。如果我註釋掉,我會從上面得到錯誤。儘管如此,仍然需要進一步深入研究。排除這可能會打破我的應用程序中的Web服務。

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

如果沒有消息 - 只有在有消息在等待時纔會出錯。 – woddle 2010-12-03 18:08:16

回答

1

CXF-RT-核心在於Geronimo的javamail_1.4_spec它比春季(我認爲)帶來了不同的JavaMail的提供者。但是,cxf只是將它用作javamail提供程序,所以任何提供程序都應該正常工作。因此,如果您爲此添加排除項並允許彈簧版本進入,則應該全部設置。

+0

嗨丹尼爾。我將cxf-rt-core依賴項添加到了我自己的項目的pom中,並且像上面那樣放入了排除項,並且它現在似乎正在工作。我猜依賴性順序很重要。我將在晚些時候/明天/星期一調查您的解決方案;謝謝。 – woddle 2010-12-04 11:40:00