更改 Axis 1.4 生成的 SOAP Java 客户端的超时设置

Posted

技术标签:

【中文标题】更改 Axis 1.4 生成的 SOAP Java 客户端的超时设置【英文标题】:Altering the timeout setting of an Axis 1.4 generated SOAP Java client 【发布时间】:2012-04-01 22:41:54 【问题描述】:

我在更改 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方法

【问题讨论】:

你们都找到解决这个问题的方法了吗? 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

(即)

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);

【讨论】:

上述解决方案不起作用。使用 Axis 1.4 和 Java 1.7。事实上,没有一种方法适用于 Axis 读取超时.. 惊喜!尝试了以下链接中提到的所有选项 - wiki.apache.org/ws/FrontPage/Axis/AxisCommonsHTTP --/-- coderanch.com/t/544075/Web-Services/java/… --/-- samaxes.com/2009/04/axis-14-read-timed-out-and-http-11

以上是关于更改 Axis 1.4 生成的 SOAP Java 客户端的超时设置的主要内容,如果未能解决你的问题,请参考以下文章

使用axis 1.4 生成金蝶EAS webservice客户端

Axis2 Web 服务名称空间前缀转换

java axis调用带有soap头(soapheader)的.net webservice

PHP调用JAVA的WebService简单实例

如何使用 Apache Axis2 和 WSDL2Java 向 SOAP 响应添加命名空间引用

java webservice怎么生成wsdl文件