【问题标题】:Listen on responses coming from a web service endpoint? [closed]监听来自 Web 服务端点的响应? [关闭]
【发布时间】:2013-12-18 16:01:26
【问题描述】:

我想编写一个监听网络服务端点的应用程序:

 hostname:port

并拦截来自该端口的任何响应。 (我稍后会将这些响应转换为事件并将它们传递给 esper 以进行 CEP。)最简单的方法是什么? (在 Java 中)

附:没有加密/安全/会话。只是一个暴露的端点,只要有请求进来就会吐出 http/xml。

编辑:我没有部署 Web 服务,我正在编写一个客户端,它将侦听和拦截来自 Web 服务的所有和任何 http 响应,由其他客户端请求。我需要一个听众...

Edit2/@Rami:我可以将它作为过滤器构建到我的 ws 堆栈中,但可以说我有 100 倍这样的 web 服务,如上所述,我的目标是将数据路由到偶数处理器。我无法在每个过滤器中构建过滤器,而且其他过滤器可能归供应商所有,重点是,我有权使用我想听的 web 服务,我只想监控最初未内置/设计的场景的响应在原始部署中

【问题讨论】:

  • 不确定你在问什么,把问题弄清楚一点。您不能侦听 Web 服务端点,只能调用 Web 服务端点。 Web 服务总是被调用。您的意思是在服务上监听一个端点,然后使用该请求生成一个 Esper 事件吗?
  • 我的意思是监听 web 服务被“暴露”的套接字......类似这样的东西,但在 java stackoverflow.com/questions/12416871/…
  • 网络服务是你的吗?我的意思是,你可以访问它背后的代码吗?
  • 是的,我有访问权限,但你为什么要问?
  • '认为人在中间,但有一个好的目的' - 我投票结束。

标签: java web-services sockets


【解决方案1】:

您的问题的解决方案是编写您自己的代理并通过该应用程序重定向所有流量。

您可以编写一个接收请求并将其转发到其他服务器(您的端点)的应用程序,获取响应并将其发送回请求它的客户端。类似于以下内容:

ServerSocket server = new ServerSocket(port);
Socket client = server.accept();
// Read input from client here using InputStream

Socket endpoint = new Socket(addressToEndpoint, endpointPort);
// Forward request to endpoint here
// Get reponse

// Do whatever you need with the response here

// Write response back to client
// close everything

除此之外,我认为唯一可行的方法是使用一些本机库与网络适配器通信以嗅探它。据我所知,Java 没有任何东西可以使您的应用程序成为中间人。

【讨论】:

  • 这不是我真正在谈论的,我本质上是在窥探来自 web 服务端点的响应。我不需要“服务器”,我不需要 servlet,我需要 smth 较低级别,快速握手和格式化/分类响应。认为中间的人,但有一个好的目的
  • 对不起,我误解了你的问题。我想我现在回答了你的问题。
  • 有什么方法可以做到这一点而不必重新引导流量?
  • 也许这就是你要找的东西:[link]stackoverflow.com/questions/3798733/…
  • 这很酷,但我不想弄清楚如何从数据包中获取 http 响应...寻找已经实现该部分的地方
【解决方案2】:

编辑:对不起,我误解了你的问题。但我希望这个答案留下来,有人会发现它很有用。

至于您的问题,我不确定如何执行该操作,因为某些端口已被另一个应用程序保留。如果你有一个 REST 客户端,也许你可以使用某种日志过滤器来扩展它。

----------------原答案------------------

我建议使用适当的 JAX-RS Web 服务框架,而不是简单的 servlet。它将使您的工作更易于管理,并使其成为“适当的” REST Web 服务。我通常选择的武器是JBoss RestEasy,但你可以选择任何你喜欢的武器,比如 Apache CXF。

Here 是一个很好的关于从 RestEasy 开始的教程,但我强烈建议您阅读一些有关 REST Web 服务的内容。

另外,请记住,Esper 必须在 Web 服务运行期间始终以某种方式保持不变。如果你只是把它放在一个带有资源方法的类中,它就不会存在于调用范围之外。您可以将 Esper 作为单例并放入 ServletContext 并像这样调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多