据我了解,InOut消息是可以从目标接收响应的消息。
但是,我还找不到任何有关如何将消息转换为InOut类型以及如何从目标访问响应的示例
例如,给定一条路线,例如:
from("direct:start").to("smtps://smtp.gmail.com:465?username=user@gmail.com&password=usrpw&to=address@gmail.com")
答案 0 :(得分:0)
默认情况下,每个“ .to(uri)”都位于InOut中。下一步中的正文将由InOut目标的响应替换。例如,在HTTP组件中,如果您具有以下路由:
from(direct:start)
.to(http://...)
.log(INFO, "${body}")
将记录对http呼叫的响应。
如果您在文档中找不到很好的信息,强烈建议您检查相关生产者的代码,以了解返回的信息或可以使用的信息。
例如,对于SMTP,我还没有找到文档说明主体发生了什么,但是代码非常清楚:
public void process(final Exchange exchange) {
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
try {
ClassLoader applicationClassLoader = getEndpoint().getCamelContext().getApplicationContextClassLoader();
if (applicationClassLoader != null) {
Thread.currentThread().setContextClassLoader(applicationClassLoader);
}
MimeMessage mimeMessage;
final Object body = exchange.getIn().getBody();
if (body instanceof MimeMessage) {
// Body is directly a MimeMessage
mimeMessage = (MimeMessage) body;
} else {
// Create a message with exchange data
mimeMessage = new MimeMessage(sender.getSession());
getEndpoint().getBinding().populateMailMessage(getEndpoint(), mimeMessage, exchange);
}
if (LOG.isDebugEnabled()) {
LOG.debug("Sending MimeMessage: {}", MailUtils.dumpMessage(mimeMessage));
}
sender.send(mimeMessage);
// set the message ID for further processing
exchange.getIn().setHeader(MailConstants.MAIL_MESSAGE_ID, mimeMessage.getMessageID());
} catch (MessagingException e) {
exchange.setException(e);
} catch (IOException e) {
exchange.setException(e);
} finally {
Thread.currentThread().setContextClassLoader(tccl);
}
}
您的交换将具有带有MAIL_ID(“ CamelMailMessageId”)的标头,并且在发生任何消息传递异常的情况下,该异常将被传播。即使是InOut,身体似乎也没有动过。