在我当前的项目中,我们使用 Apache Axis 通过 SOAP 进行远程调用。
现在有些情况下,由于防火墙限制,服务器主机+端口不能直接访问,但有可能是 SSH 隧道。
Axis 文档提到了插入自己的Socket 工厂的可能性。但是这种插入似乎只能通过在 System 属性中提供实现类的名称来实现。
我刚刚花了一个小时左右的时间来实现一个基于 JSch 会话的 SocketFactory(通过自定义的 SocketImpl 实现)——但是这个 SocketFactory 对象依赖于一个 Session 对象,不能简单地独立实例化。
我想我可以使用静态变量/方法以某种方式解决这个问题,但这肯定看起来不太好。
实际上,我希望能够为每个服务器(或服务器组)提供一个新的 SocketFactory(带有另一个基本 SSH 会话),其中可能同时存在多个 - 因此,有必要将其提供给服务定位器。
有没有办法解决这个问题?