Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Web服务:如何检测发送消息的端点_Java_Web Services_Rest_Soap - Fatal编程技术网

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

Java Web服务:如何检测发送消息的端点,java,web-services,rest,soap,Java,Web Services,Rest,Soap,我正在开发一个处理来自大量应用程序的SOAP和REST消息的应用程序。我们使用Camel通过SOAP将消息路由到其他位置。我现在需要根据原始位置对消息采取操作。是否可以确定从何处发送消息的URI?我还在学习网络服务,我的谷歌搜索没有给我任何东西 在调试代码时,我在Camel Exchange对象中找到了一个fromEndpoint对象。在我的测试中,我使用的是SoapUI。fromEndpoint对象包含“direct://MessageName". 当它来自另一台服务器时,是否包含正确的fr

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

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

*其他信息*


指示消息格式的WSDL和XSD在其他地方受到控制。他们的改变过程是漫长而复杂的。(我们在中已经有一个对WSDL进行简单更改的请求。他们说在批准之前1到2年。)这些消息由许多不同的应用程序生成。是的,这是一场噩梦。因此,我们必须找到办法,在我们目前拥有的范围内实现这一目标。我真的担心解决方案可能不可能。我只是觉得很难相信,当消息传入时,基础设施(SOAP和/或REST)没有一种方式可以告诉我消息来自何处,而不必将其物理地放入消息本身

我建议您添加额外的exchange标头或属性,在发送消息之前将端点名称放入属性中。这样就可以在下一个端点中检索到它。

我找不到任何允许我获取原始服务器URL的内容。因此,在这一点上,我不是不回答这个问题,而是用明显的答案更新它。不,这是不可能的。

我终于在这里找到了问题的答案。您可以将WebServiceContext注入控制器对象。通过此操作,您可以获得HttpServletRequest,从而获得该事务的远程主机和远程地址

我补充说

@Resource
WebServiceContext wsContext;
我的控制器类。然后添加了一个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;
}
当我需要请求信息时,我调用该方法


它工作得很好

这通常是我会做的。然而,我收到的信息的格式是由控制组织决定的,更改几乎不可能获得批准。你知道怎么回事。有时,我们在IT中受到最终客户要求的限制。