2016-08-10 55 views
1

即时通讯Spring框架中的新增功能,我有一些麻烦将* .xml转换为Java Config。我不知道我应该怎么替换该行:Spring集成邮件 - 将XML转换为Java配置

<int:channel id="emails"/> 

你可以看到下面

xml文件我的文件:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd 
     http://www.springframework.org/schema/integration/mail http://www.springframework.org/schema/integration/mail/spring-integration-mail.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd" 
     xmlns:int="http://www.springframework.org/schema/integration" 
     xmlns:int-mail="http://www.springframework.org/schema/integration/mail" 
     xmlns:util="http://www.springframework.org/schema/util"> 

    <int:channel id="emails"/> 

    <util:properties id="javaMailProperties"> 
     <prop key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> 
     <prop key="mail.imap.socketFactory.fallback">false</prop> 
     <prop key="mail.store.protocol">imaps</prop> 
     <prop key="mail.debug">true</prop> 
    </util:properties> 

    <int-mail:imap-idle-channel-adapter id="mailAdapter" 
            store-uri="imaps://login:[email protected]:993/INBOX" 
            java-mail-properties="javaMailProperties" 
            channel="emails" 
            should-delete-messages="false" 
            should-mark-messages-as-read="true"> 
    </int-mail:imap-idle-channel-adapter> 
</beans> 

Java的配置我AREADY创建:

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.integration.mail.ImapIdleChannelAdapter; 
import org.springframework.integration.mail.ImapMailReceiver; 

import java.util.Properties; 

@Configuration 
class ImapConfiguration { 

    private Properties javaMailProperties() { 
     Properties javaMailProperties = new Properties(); 

     javaMailProperties.setProperty("mail.imap.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
     javaMailProperties.setProperty("mail.imap.socketFactory.fallback","false"); 
     javaMailProperties.setProperty("mail.store.protocol","imaps"); 
     javaMailProperties.setProperty("mail.debug","true"); 

     return javaMailProperties; 
    } 

    @Bean 
    ImapIdleChannelAdapter mailAdapter() { 
     ImapMailReceiver mailReceiver = new ImapMailReceiver("imaps://login:[email protected]:993/INBOX"); 

     mailReceiver.setJavaMailProperties(javaMailProperties()); 
     mailReceiver.setShouldDeleteMessages(false); 
     mailReceiver.setShouldMarkMessagesAsRead(true); 

     return new ImapIdleChannelAdapter(mailReceiver); 
    } 
} 

回答

2

这取决于你想要的通道上,但基本上这完全适用

Messaging Channels

@Bean 
public PollableChannel defaultChannel() { 
    return new QueueChannel(10); 
} 

@Bean 
public SubscribableChannel subscribeChannel() { 
    return new PublishSubscribeChannel(); 
} 
0

其取决于你正在使用什么类型的信息通道

如果你是你唱点指向频道,然后DirectChannel和NullChannel是你的选择。 对于发布订户频道,请使用PublishSubscribeChannel,QueueChannel,PriorityChannel,RendezvousChannel,ExecutorChannel和ScopedChannel。

我建议你回去检查你是怎么做到

applicationcontext.getBean("emails",DirectChannel.class) 

再加入

@Bean 
    public DirectChannel defaultChannel() { 
     return new DirectChannel(); 
    } 

这里是整个Java配置类。

import java.util.Properties; 

    import org.springframework.beans.factory.annotation.Value; 
    import org.springframework.context.annotation.Bean; 
    import org.springframework.context.annotation.Configuration; 
    import org.springframework.integration.channel.DirectChannel; 
    import org.springframework.integration.mail.ImapIdleChannelAdapter; 
    import org.springframework.integration.mail.ImapMailReceiver; 

    @Configuration 
    public class IMAPIdleConfiguration { 

     @Value("${imap.mailReceiverURL}") 
     private String imapMailReceiverURL; 

     private Properties javaMailProperties() { 
      Properties javaMailProperties = new Properties(); 
      /* 
      * <prop 
      * key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</ 
      * prop> <prop key="mail.imap.socketFactory.fallback">false</prop> <prop 
      * key="mail.store.protocol">imaps</prop> <prop 
      * key="mail.debug">false</prop> <prop 
      * key="mail.smtp.timeout">10000</prop> 
      */ 
      javaMailProperties.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
      javaMailProperties.setProperty("mail.imap.socketFactory.fallback", "false"); 
      javaMailProperties.setProperty("mail.store.protocol", "imaps"); 
      javaMailProperties.setProperty("mail.debug", "true"); 
      javaMailProperties.setProperty("mail.smtp.timeout", "10000"); 

      return javaMailProperties; 
     } 

     @Bean 
     ImapIdleChannelAdapter mailAdapter() { 

      ImapMailReceiver mailReceiver = new ImapMailReceiver(this.imapMailReceiverURL); 
      mailReceiver.setJavaMailProperties(javaMailProperties()); 
      mailReceiver.setShouldDeleteMessages(false); 
      mailReceiver.setShouldMarkMessagesAsRead(true); 

      ImapIdleChannelAdapter imapIdleChannelAdapter = new 
ImapIdleChannelAdapter(mailReceiver); 
      imapIdleChannelAdapter.setAutoStartup(true); 
      imapIdleChannelAdapter.setOutputChannel(directChannel()); 
      return imapIdleChannelAdapter; 

     } 

     @Bean 
     public DirectChannel directChannel() { 
      return new DirectChannel(); 
     } 

    }