我正在开发一个处理来自大量应用程序的SOAP和REST消息的应用程序。我们使用Camel通过SOAP将消息路由到其他位置。我现在需要根据原始位置对消息采取措施。是否可以确定发送消息的URI?我还在学习网络服务,我的谷歌搜索都没有给我任何东西。
在调试代码时,我在Camel Exchange对象中找到了一个fromEndpoint
对象。在我的测试中,我正在使用SoapUI。 fromEndpoint
对象包含“direct:// MessageName”。当它来自另一台服务器时,它是否包含正确的信息?如果是这样,是否可以配置SoapUI以输入正确的信息?
*其他信息*
决定消息格式的WSDL和XSD在别处控制。他们的变革过程漫长而复杂。 (我们已经要求对WSDL进行简单的更改。他们说要在批准之前1到2年。)消息由许多不同的应用程序生成。是的,这是一场噩梦。因此,我们必须找到方法,使其在我们现有的范围内实现。我真的担心解决方案可能无法实现。我发现很难相信当一条消息出现时,基础设施(SOAP和/或REST)无法告诉我它来自何处而不必将其物理地放入消息本身。
答案 0 :(得分:1)
我终于在这里遇到了问题的答案。您可以将一个WebServiceContext注入Controller对象。通过这种方式,您可以获得HttpServletRequest,从而获得该事务的远程主机和远程地址。
我添加了
@Resource
WebServiceContext wsContext;
到我的Controller类。然后添加了一个getServletRequestObject方法
protected HttpServletRequest getServletRequestObject() {
MessageContext msgContext = wsContext.getMessageContext();
HttpServletRequest request = (HttpServletRequest) msgContext.get(MessageContext.SERVLET_REQUEST);
this.log.info("Request from {} at {}", request.getRemoteHost(), request.getRemoteAddr());
return request;
}
当我需要请求信息时,我称之为该方法。
效果很好!
答案 1 :(得分:0)
我建议你添加额外的交换头或属性,在发送消息之前将端点名称放在属性中。这样就可以在下一个端点中检索它。
答案 2 :(得分:0)
我找不到任何可以让我获取原始服务器的URL的内容。所以在这一点上,我没有回答这个问题,而是用明显的答案来更新它。不,这是不可能的。