2010-12-03 4 views
0

이메일을 읽고 안정적인 웹 서비스를 제공하는 코드를 작성하려고합니다.Apache Jax-RS가 스프링 통합 메일을 중단합니다.

Gmail (팝업)에서 메일을 읽는 간단한 테스트 파일이 있습니다. 그러나 px.xml에 cxf-rf-frontend-jaxrs를 추가하면 테스트 파일이 작동하지 않는 것으로 보입니다.

누구나 이것을 풀 수 있습니까?

감사합니다. 코드와 내용이 이어집니다.

오류 :

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) 

테스트 파일/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> 

SRC/테스트/자바/메일입니다 편집 : ~/.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

답변

1

CXF-RT-코어는 봄 (나는 생각한다)에서 제공하는 것보다 다른있는 javamail 제공 업체입니다 제로니모 - javamail_1.4_spec에 따라 달라집니다. 그러나 cxf는이를 javamail 공급자로 사용하므로 모든 공급자가 정상적으로 작동해야합니다. 따라서, 만약 당신이 그것을 제외하고 스프링 버전이 올 수 있도록 허용한다면, 모든 설정이 필요합니다.

+0

안녕 다니엘. 나는 자신의 프로젝트의 pom에 cxf-rt-core 의존성을 추가하고 위와 같이 제외를 넣었고 지금 당장 작동하는 것으로 보인다. 나는 의존성 질서가 중요하다고 생각한다. 나중에/내일/월요일에도 해결책을 조사 할 것입니다. 고맙습니다. – woddle

+0

자, 내 자신의 의존성을 뒤섞어 집에서 (리눅스) 일했지만 지금은 직장에 돌아 가지 않습니다 (Windows). 그래도 geronimo-javamail을 제외시키는 것이 좋습니다. 많은 당신 덕분에! – woddle

관련 문제