在 运行 时间替换 SOAP 端点时出现问题

Issue with replacing SOAP End point at run time

我们正在尝试使用 SOAP 服务(在 Java 应用程序中),它在生产和预生产环境中具有不同的端点。我们使用 wsimport 生成客户端代码并尝试使用绑定提供程序覆盖端点。

绑定提供程序在预生产环境中工作正常(自动生成的代码来自预生产环境 wsdl)但是当我们尝试在生产环境中进行测试时,绑定提供程序无法覆盖端点。 在生产环境中,它抛出“尝试连接到预生产时连接失败”。 我们了解到,绑定提供程序需要访问 pre prod wsdl 和 prod wsdl 以覆盖端点。由于安全组限制,我们无法从 prod 访问 proprod wsdl。

我们还尝试通过在 运行 时间从 prod wsdl 调用服务来读取端点,但 wsdl 中的端口信息被硬编码为某个 IP 地址,无法更改,修复 prod wsdl 超出了范围我们的控制。

有没有其他方法可以在 运行 时间覆盖端点?

您可以使用类似 UDDI 的解决方案并为您的 SOAP 端点保留版本控制,或者您可以使用网关服务。此单个服务将在运行时将内部调用定向到不同的服务。

我更喜欢 UDDI,因为它具有很大的灵活性。 参考:https://docs.oracle.com/cd/E17904_01/admin.1111/e15867/uddi.htm#OSBAG392

问题的主要原因是存根具有硬编码的 QA 端点。我修改了客户端存根代码,从代理生成的代码中删除了硬编码端点,绑定提供程序开始工作 fine.All 其他解决方案非常耗时,并且需要更改环境级别才能使用网关服务。