gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:38:54 25 4
gpt4 key购买 nike

我正在开发一个处理来自大量应用程序的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com