更改 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客户端
java axis调用带有soap头(soapheader)的.net webservice