我试图使用 Apache AntGet
任务来获取由我们公司的另一个团队生成的 WSDL 列表。他们将它们托管在http://....com:7925/services/上的 weblogic 9.x 服务器上。我可以通过浏览器访问该页面,但是当尝试将页面复制到本地文件进行解析时,get 任务给了我一个 FileNotFoundException。我仍然能够(使用 ant 任务)获得一个没有用于 HTTP 的非标准端口 80 的 URL。
我查看了 Ant 源代码,并将错误缩小到 URLConnection。似乎 URLConnection 无法识别数据是 HTTP 流量,因为它不在标准端口上,即使协议被指定为 HTTP。我使用 WireShark 嗅探了流量,页面通过网络正确加载,但仍然收到 FileNotFoundException。
这是一个您将看到错误的示例(更改了 URL 以保护无辜者)。在connection.getInputStream()上抛出错误;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class TestGet {
private static URL source;
public static void main(String[] args) {
doGet();
}
public static void doGet() {
try {
source = new URL("http", "test.com", 7925,
"/services/index.html");
URLConnection connection = source.openConnection();
connection.connect();
InputStream is = connection.getInputStream();
} catch (Exception e) {
System.err.println(e.toString());
}
}
}