在 Domino 上使用 org.apache.axis.client.Call 和 运行 构建的 Web 服务消费者上设置超时
Setting a timeout on webservice consumer built with org.apache.axis.client.Call and running on Domino
我正在维护一个过时的 Notes 应用程序,它通过手动连接到 SAP 后端 'Webservice'
服务器是 运行ning Domino Release 7.0.4FP2 HF97。
Webservice 不是最近的 Webservice Consumer,而是使用 Apache soap.jar (org.apache.soap) 的大型 Java 代理。下面是调用代码的示例。
private Call setupSOAPCall() {
Call call = new Call();
SOAPHTTPConnection conn = new SOAPHTTPConnection();
call.setSOAPTransport(conn);
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
SAP 系统发生了变化,现在需要 8 分钟才能完成(经 SAP 团队验证)。
我收到如下错误消息:
[SOAPException: faultCode=SOAP-ENV:Client; msg=For input string: "906 "; targetException=java.lang.NumberFormatException: For input string: "906 "]
我找到了一篇非常详细地描述错误消息的博客文章:
https://thejavablog.wordpress.com/category/jmeter/
我假设这是一条返回我的 Call 对象的超时消息,并且该超时消息被错误地解析,因此出现 NumberFormat 异常。
查看我的日志,我发现我的调用和响应之间存在 62 秒的时间差。
我建议将服务器文档中的服务器设置,选项卡 Internet Protocols/HTTP/Timeouts/Request 超时从 60 秒更改为 600 秒,并使用
重新启动 http 任务
tell http restart
我已经重新运行测试了,我得到了同样的错误,而且时差仍然略微超过 60 秒,这不是我所期望的。
我阅读了 Michael Rulnau 的博客文章
http://www.mruhnau.net/2014/06/how-to-overcome-domino-webservice.html
指向这个 APR
http://www-01.ibm.com/support/docview.wss?uid=swg1LO48272
但我不相信这会适用于这种情况,因为 IBM 无法知道我的 Java 代理实际上正在进行 Soap 调用。
我目前的假设是我必须在
上使用 setTimeout() 方法之一
org.apache.axis.client.Call
https://axis.apache.org/axis/java/apiDocs/org/apache/axis/client/Call.html
或在 org.apache.soap.transport.http.SOAPHTTPConnection
并且超时值是 apache 的默认值,而不是由 Domino 服务器控制的值。
如有任何帮助,我将不胜感激。
我理解您的方法,希望这是解决您问题的正确方法。
添加显示默认超时的调试(控制台写入会很好),然后尝试将其增加到 10 分钟。
SOAPHTTPConnection conn = new SOAPHTTPConnection();
System.out.println("time out is :" + conn.getTimeout());
conn.setTimeout(600000);//10 min in ms
System.out.println("after setting it, time out is :" + conn.getTimeout());
call.setSOAPTransport(conn);
现在请记住,Dommino 也有最大 LotusScript/Java 执行时间,检查此值并(至少尝试一下)更改它:http://www.ibm.com/support/knowledgecenter/SSKTMJ_9.0.1/admin/othr_servertasksagentmanagertab_r.html(这是版本 9 的帮助,但这部分应该相同)
后来我发现不是我的代码产生了错误; apache 轴 SOAPHTTPConnetion 的默认超时为 0,即无超时。
我正在维护一个过时的 Notes 应用程序,它通过手动连接到 SAP 后端 'Webservice'
服务器是 运行ning Domino Release 7.0.4FP2 HF97。
Webservice 不是最近的 Webservice Consumer,而是使用 Apache soap.jar (org.apache.soap) 的大型 Java 代理。下面是调用代码的示例。
private Call setupSOAPCall() {
Call call = new Call();
SOAPHTTPConnection conn = new SOAPHTTPConnection();
call.setSOAPTransport(conn);
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
SAP 系统发生了变化,现在需要 8 分钟才能完成(经 SAP 团队验证)。
我收到如下错误消息:
[SOAPException: faultCode=SOAP-ENV:Client; msg=For input string: "906 "; targetException=java.lang.NumberFormatException: For input string: "906 "]
我找到了一篇非常详细地描述错误消息的博客文章:
https://thejavablog.wordpress.com/category/jmeter/
我假设这是一条返回我的 Call 对象的超时消息,并且该超时消息被错误地解析,因此出现 NumberFormat 异常。
查看我的日志,我发现我的调用和响应之间存在 62 秒的时间差。
我建议将服务器文档中的服务器设置,选项卡 Internet Protocols/HTTP/Timeouts/Request 超时从 60 秒更改为 600 秒,并使用
重新启动 http 任务tell http restart
我已经重新运行测试了,我得到了同样的错误,而且时差仍然略微超过 60 秒,这不是我所期望的。
我阅读了 Michael Rulnau 的博客文章
http://www.mruhnau.net/2014/06/how-to-overcome-domino-webservice.html
指向这个 APR
http://www-01.ibm.com/support/docview.wss?uid=swg1LO48272
但我不相信这会适用于这种情况,因为 IBM 无法知道我的 Java 代理实际上正在进行 Soap 调用。
我目前的假设是我必须在
上使用 setTimeout() 方法之一org.apache.axis.client.Call
https://axis.apache.org/axis/java/apiDocs/org/apache/axis/client/Call.html
或在 org.apache.soap.transport.http.SOAPHTTPConnection
并且超时值是 apache 的默认值,而不是由 Domino 服务器控制的值。
如有任何帮助,我将不胜感激。
我理解您的方法,希望这是解决您问题的正确方法。
添加显示默认超时的调试(控制台写入会很好),然后尝试将其增加到 10 分钟。
SOAPHTTPConnection conn = new SOAPHTTPConnection();
System.out.println("time out is :" + conn.getTimeout());
conn.setTimeout(600000);//10 min in ms
System.out.println("after setting it, time out is :" + conn.getTimeout());
call.setSOAPTransport(conn);
现在请记住,Dommino 也有最大 LotusScript/Java 执行时间,检查此值并(至少尝试一下)更改它:http://www.ibm.com/support/knowledgecenter/SSKTMJ_9.0.1/admin/othr_servertasksagentmanagertab_r.html(这是版本 9 的帮助,但这部分应该相同)
后来我发现不是我的代码产生了错误; apache 轴 SOAPHTTPConnetion 的默认超时为 0,即无超时。