我目前正在开展一个项目,该项目要求我从互联网上下载WSDL文件。
我问题之外的一切都很有效......
我使用以下代码:
private Definition getDefinition(String url) throws WSDLException {
// Read the url and return an instance to a WSDL Definition
return WSDLFactory.newInstance().newWSDLReader().readWSDL(url);
}
这个WSDLFactory是一个Thread(据我所知)。我遇到的问题是,在我提供的URL列表中,其中一些指向不再存在的WSDL。这反过来导致我的程序在实现它应该抛出FileNotFoundException之前等待非常长的时间。这是因为WSDL应该永远返回HTTP_RESPONSE代码所在的位置。
有没有办法可以将这个WSDLFactory包装成试图获取WSDL但只给它5-10秒的东西?在此之后,它说“你有太多的时间来做这件事。我们正在踩过你”?
答案 0 :(得分:2)
查看Executor和Futures框架。
答案 1 :(得分:2)
尽可能socket.setSoTimeout
或通过库中的更高级配置选项设置基础套接字的超时。
其他(如果你在类路径上有谷歌的番石榴)试试:
答案 2 :(得分:1)
您可以尝试设置http超时sun.net.client.defaultConnectTimeout
。当然这取决于WSDLReader的实现
点击这里:
networking properties
答案 3 :(得分:-1)
使用辅助线程,在5秒后调用第一个线程上的interrupt()方法。在第一个线程中处理InterruptedException。