Web服务:如何检测发送消息的端点

时间:2016-09-14 22:01:51

标签: java web-services rest soap

我正在开发一个处理来自大量应用程序的SOAP和REST消息的应用程序。我们使用Camel通过SOAP将消息路由到其他位置。我现在需要根据原始位置对消息采取措施。是否可以确定发送消息的URI?我还在学习网络服务,我的谷歌搜索都没有给我任何东西。

在调试代码时,我在Camel Exchange对象中找到了一个fromEndpoint对象。在我的测试中,我正在使用SoapUI。 fromEndpoint对象包含“direct:// MessageName”。当它来自另一台服务器时,它是否包含正确的信息?如果是这样,是否可以配置SoapUI以输入正确的信息?

*其他信息*

决定消息格式的WSDL和XSD在别处控制。他们的变革过程漫长而复杂。 (我们已经要求对WSDL进行简单的更改。他们说要在批准之前1到2年。)消息由许多不同的应用程序生成。是的,这是一场噩梦。因此,我们必须找到方法,使其在我们现有的范围内实现。我真的担心解决方案可能无法实现。我发现很难相信当一条消息出现时,基础设施(SOAP和/或REST)无法告诉我它来自何处而不必将其物理地放入消息本身。

3 个答案:

答案 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的内容。所以在这一点上,我没有回答这个问题,而是用明显的答案来更新它。不,这是不可能的。