可以在DocumentBuilder上设置超时吗?

时间:2011-07-07 10:18:15

标签: java

我目前正在从PHP脚本(如下所示)中读取XML文件,该文件工作正常,但我现在想添加某种形式的HTTP超时来检索XML。

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();  
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse("http://www.mywebsite.com/returnsXML");

根据我目前的方法,这可以轻松添加,还是我需要以某种方式更改请求以支持超时?

2 个答案:

答案 0 :(得分:7)

您可以手动打开连接并为URLConnection设置超时:

URL url = new URL("http://www.mywebsite.com/returnsXML");
URLConnection con = url.openConnection();
con.setConnectTimeout(10000); // 10 seconds
Document doc = docBuilder.parse(con.getInputStream());

答案 1 :(得分:1)

其他答案似乎有一些编译问题,但在精神上是正确的。

这是一个编译的版本:

private static Document fetchDocument(String requestUrl) {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();

            URL url = new URL(requestUrl);
            URLConnection con = url.openConnection();
            con.setConnectTimeout(10000);//The timeout in mills
            Document doc = db.parse(con.getInputStream());

            return doc;

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }