java - 网络服务 : How do I detect the endpoint that sent the message

标签 java web-services rest soap

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

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

*附加信息*

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

最佳答案

我终于在这里找到了问题的答案。您可以将 WebServiceContext 注入(inject)到 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;
}

当我需要请求信息时,我会调用该方法。

效果很好!

关于java - 网络服务 : How do I detect the endpoint that sent the message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39500328/

相关文章:

java - 带android注释的productFlavors应用程序id

java - 将多个调试器连接到一个调试器(Java、JPDA)

java - 从 JOptionPane 中删除标题栏

java - 在 JAX-WS Web 服务中启用 SpringBeanAutowiringSupport 时出错

c# - 如何在 C# 中通过 DropBoxRest API 获取 Dropbox 文件?

node.js - OpenID + API REST + Node 服务器

java - RxJava。 Observable.OnSubscribe 无法解析为类型

java - 更改使用 JAXWS 生成的默认 XML 命名空间前缀

java - 计数(唯一) View Spring boot REST

ruby-on-rails - 如何为 Rails POST 方法构建 postman 请求