4

我在更改 Axis 1.4 生成的 Web 服务客户端代码使用的标准选项时遇到问题。我们使用了使用旧 RPC/Encoded 样式的合作伙伴的某个 Web 服务,这基本上意味着我们无法使用 Axis 2,但仅限于 Axis 1.4。

服务客户端正在通过我们的代理从远程服务器检索数据,该代理实际上运行得非常好。

我们的应用程序被部署为一个 servlet。检索到的外部 Web 服务响应被插入到我们提供给内部系统/CMS 的 (XML) 文档中。但是,如果外部服务没有响应——这还没有发生,但可能随时发生——我们希望很好地降级并在合理的时间内返回我们生成的 XML 文档,而没有计算出的 Web 服务信息。检索到的数据是可选的(如果缺少此特定计算,则根本不是大问题)。

所以我尝试更改超时设置。我确实应用/使用了我在轴文档中可以找到的所有方法和键,以通过搜索网络来更改连接和套接字超时。这些似乎都不会影响连接超时。

谁能给我建议如何根据版本 1.4 更改轴存根/服务/端口的设置?

这是我尝试的几种配置的示例:

MyService service = new MyServiceLocator();
MyServicePort port = null;

try {
    port = service.getMyServicePort();
    javax.xml.rpc.Stub stub = (javax.xml.rpc.Stub) port;
    stub._setProperty("axis.connection.timeout", 10);
    stub._setProperty(org.apache.axis.client.Call.CONNECTION_TIMEOUT_PROPERTY, 10);
    stub._setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_CONNECTION_TIMEOUT_KEY, 10);
    stub._setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_SO_TIMEOUT_KEY, 10);

    AxisProperties.setProperty("axis.connection.timeout", "10");
    AxisProperties.setProperty(org.apache.axis.client.Call.CONNECTION_TIMEOUT_PROPERTY, "10");
    AxisProperties.setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_CONNECTION_TIMEOUT_KEY, "10");
    AxisProperties.setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_SO_TIMEOUT_KEY, "10");

    logger.error(AxisProperties.getProperties());

    service = new MyClimateServiceLocator();
    port = service.getMyServicePort();
}

我在生成服务之前分配了属性更改,之后,我在初始化期间设置了属性,我尝试了我发现的其他几个超时键,......我想我对此很生气并开始忘记我已经尝试过的东西!

我究竟做错了什么?我的意思是必须有一个选择,不是吗?

如果我没有找到合适的解决方案,我会考虑在我们的代码中设置一个带有超时的同步线程,这实际上感觉很尴尬而且有点愚蠢。你还能想象别的吗?

提前致谢

延斯


axis1.4 java client soap wsdl2java rpc/encoded xml servlet 生成 alter change setup stub timeout connection socket keys 方法

4

2 回答 2

3

我认为这可能是一个错误,如下所示:

https://issues.apache.org/jira/browse/AXIS-2493?jql=text%20~%20%22CONNECTION_DEFAULT_CONNECTION_TIMEOUT_KEY%22

于 2014-12-04T00:32:11.183 回答
0

将服务端口对象类型转换为org.apache.axis.client.Stub.

(IE)

org.apache.axis.client.Stub stub = (org.apache.axis.client.Stub) port;

然后设置所有属性:

stub._setProperty(org.apache.axis.client.Call.CONNECTION_TIMEOUT_PROPERTY, 10);
stub._setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_CONNECTION_TIMEOUT_KEY, 10);
stub._setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_SO_TIMEOUT_KEY, 10);
于 2015-10-21T17:05:45.783 回答