I am creating a specific flow for mail out bound channel in dsl My flow is like this, I am sending a mail from a rest service through a Message GateWay then the message will go through a request channel to my own customize transformer, after transerming the message will go to the outbound adapter thorough a out put channel. As my transformer is a separate class so not able to write a integration flow in dsl for my entire flow. Can any ony one please provide any pointer to it as I am not able to proceed.
This is my DSL class contains mail gateway and mailSender bean.....
@MessagingGateway
interface MailGateWay{
@Gateway(requestChannel = "fromChannel")
public void sendMail(MessageDto msgDto) ;
}
@Bean
public QueueChannel fromChannel(){
return new QueueChannel();
}
@Bean
public JavaMailSenderImpl mailSender() {
JavaMailSenderImpl mail = new JavaMailSenderImpl();
Properties javaMailProperties = new Properties();
mail.setHost(host);
mail.setPort(port);
mail.setUsername(username);
mail.setPassword(password);
mail.setDefaultEncoding("UTF-8");
javaMailProperties.setProperty("mail.transport.protocol", "smtp");
javaMailProperties.setProperty("mail.smtp.auth", String.valueOf(true));
javaMailProperties.setProperty("mail.smtp.starttls.enable", String.valueOf(false));
javaMailProperties.setProperty("mail.debug", String.valueOf(true));
mail.setJavaMailProperties(javaMailProperties);
return mail;
}
Now my Transfrmer looks loke this, I have created a transformer bean in my dsl
@Bean
@Scope("prototype")
public MailMessageTransformer mailTransformer(){
return new MailMessageTransformer();
}
@Bean
public QueueChannel outboundMailChannel(){
return new QueueChannel();
}
And this is my custom MailMessageTransformer class and I need to call this transform() which is returning a MimeMessage.
public class MailMessageTransformer {
@Autowired
private JavaMailSender mailSender;
public MimeMessage transform(final MessageDto mailDto) {
if (mailDto == null) {
return null;
}
if (mailDto.getEncoding() == null) {
mailDto.setEncoding(IMailConstants.DEFAULT_ENCODING);
}
mailDto.setText(mailDto.getText().replaceAll(System.lineSeparator(), IMailConstants.HTML_NEW_LINE));
MimeMessage mimeMessage = null;
try {
mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo(mailDto.getTo());
message.setFrom(mailDto.getFrom());
message.setSubject(mailDto.getSubject());
message.setText(getMailContent(mailDto), IMailConstants.TRUE);
message.setSentDate(new Date(System.currentTimeMillis()));
if (null != mailDto.getBcc()) {
message.setBcc(mailDto.getBcc());
}
if (null != mailDto.getBcc()) {
message.setCc(mailDto.getCc());
}
if (null != mailDto.getReplyTo() && !mailDto.getReplyTo().isEmpty()) {
message.setReplyTo(mailDto.getReplyTo());
}
}
catch (MessagingException msgex) {
LOG.error("MailMessageTransformer.transformMime.Exception::: MessagingException", msgex);
}
catch (MailException mailex) {
LOG.error("MailMessageTransformer.transformMime.Exception::: MailException ", mailex);
}
catch (Exception ex) {
LOG.error("MailMessageTransformer.transformMime.Exception::: Exception", ex);
}
LOG.debug("MailMessageTransformer.transformMime.mimeMessage:::" + mimeMessage);
return mimeMessage;
}
}
Now I need to create a dsl flow through which I can call my mailTransformer() bean and add a poller like the below xml.
<int:transformer input-channel="fromChannel"
output-channel="outboundMailChannel" ref="mailTransformer" method="transform">
<int:poller fixed-rate="6000" max-messages-per-poll="10" />
<int-mail:outbound-channel-adapter
channel="outboundMailChannel" mail-sender="mailSender" />
The flow is Gateway-->RequsetChannel--->Transform--->OutboundMailChannl--->mailSender(MailAdapter)