两个Web服务之间的通信

时间:2009-12-16 12:22:00

标签: java web-services websphere

我的网络服务有问题。它们在Java中编程并在WASCE服务器上运行(两者都在同一台服务器上)。 我想解决的问题: 我们有两个Web服务:App1和App2

在App1中,我想调用App2中的函数。我怎样才能做到这一点?这甚至可能吗? 我尝试在App1中创建一个soapClient,这样我就可以连接到App2,但这不起作用。 EXP: 我有一个客户端调用app1从app1获取数据并将其发送到app2然后从app2获取响应数据并将其发送到app1中的其他函数。

我想要做的是跳过客户端部分直接进行操作,以便app1可以直接将数据发送到app2,然后根据需要接收答案。

注意:两个Web服务都使用与数据库的连接。

提前谢谢你。 (已使用其他数据进行了编辑)

2 个答案:

答案 0 :(得分:1)

它绝对是可能,具有不同程度的复杂性和可行性,具体取决于您想要的内容以及您对其的限制。

如果您对App2中的方法没有问题,最简单的方法之一就是创建一个公开该方法的Web服务,并从App1调用。

如果你希望App2的方法基本上是“受保护的”,那么它可以由App1调用而不是由公共客户调用,那么有几种替代选项。首先,您可以使用防火墙或等效服务来阻止对服务URL的外部请求。或者,您可以通过某种形式的进程间通信来公开该方法; RMI将是Java的明显原生代(在App2中设置RMI方法并通过管理器导出,然后在App1中获取引用并远程调用该方法)。根据您想要做什么,您可能会更好地使用一个框架来完成所有这些工作;例如通过类似Terracotta的分发对象。

你应该在你的问题中提供更多细节 - 目前你唯一真正指定的是你想从App1中调用App2中的“一个函数”。有几十种(如果不是数百种)方法可以解决这个问题,最好的方法取决于你要做的事情的细节。

编辑(根据评论):这不是你想要做的缺少的细节 - 我很清楚你想要调用某些方法App1中的App2。它更多的是架构细节 - 客户端编码的语言是什么,您使用哪些库来执行Web服务,是同一台机器上的客户端还是单独的客户端(如果是相同的机器,是否是相同的JVM),有没有可能会阻止某些类型的连接的防火墙问题,是否有任何办公室政治限制可能会阻止您的选择,是否有任何安全限制可以做同样的事情(例如您是否可以公开地公开App2方法的功能)。所有这些都将塑造可能和最佳的东西 - 因为在一天结束时,所有网络基本上都是我想在 远程计算机上使用这里的资源< / EM> 即可。如果没有更多的架构细节,你可以通过几十种方式实现这一目标。

关于说明:您将创建一个Web服务来公开App2的功能,就像创建任何其他Web服务一样(详细信息取决于您正在使用的工具/框架)。例如,如果您使用的是支持JSR-181注释的工具,那么您将在App2中编写一个执行此功能的方法,并使用@WebMethod对其进行注释。然后,您将确保如果此方法不是现有Web服务类的一部分,则使用@WebService对其类进行批注。我假设你已经有了几个Web服务,你就知道如何编写/定义它们。

至于从App1访问Web服务,这可以通过Java SOAP客户端完成。诸如WSDL2Java之类的工具可以创建一个存根类,用于建模您可以调用的远程服务;或者,您可以通过CXF等方式获得更丰富的界面。

您当前使用的是什么WS库,以及在尝试使用它来执行此交互时遇到的错误?

答案 1 :(得分:1)

“不起作用”是什么意思?究竟发生了什么?

首先为App2生成一些客户端代码。你可以从一些简单的Java环境中使用它,或者说一个Servlet。如果可行,那么当您尝试从App 1服务实现代码中调用它时会发生什么?

但是:如果这些是在同一JVM中运行的相关服务,则无法使用java库建立一些更简单的关系。我开发服务的首选方法是首先开发一些有用的Java代码,并确保它有效,然后将其“包装”为Web服务。在这种情况下,我有一个可调用的例程,只能作为Java调用。