【发布时间】:2016-03-23 23:45:45
【问题描述】:
我在使用 Java 1.4.2 的 AS400 系统下工作,以获取 XML,但是当我使用 getOutputStream() 发出请求时,我得到了一个 IOException 并且该消息仅返回提供者的域。
这是我的代码的一部分:
try {
url = new URL("https://test.example.it/27/xml/"); //Example URL...
} catch(MalformedURLException exMAL) {
return exMAL.getMessage();
}
//Set parameters
LinkedHashMap params = new LinkedHashMap();
params.put("id", id);
params.put("password", password);
...
params.put("description", description);
String data = "";
Set set = params.entrySet();
Iterator i = set.iterator();
//Create URL of parameters
while(i.hasNext()){
if(data != ""){
data += "&";
}
Map.Entry me = (Map.Entry)i.next();
data += me.getKey() + "=" + me.getValue();
}
try {
//Create connection
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
//Do request
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); //Error here
wr.write(data);
wr.flush();
//Get resource
InputStream is = conn.getInputStream();
outputData = readAll(is);
} catch (IOException ioEx) {
return "ERROR IOException: " + ioEx.getMessage();
}
并且消息错误是“ERROR IOException: test.example.it”。
我在一台装有 Windows XP、Netbeans 4.1、Java 1.4.2 Build 19(在 AS400 中也是如此)的计算机上测试了我的代码,我毫无问题地获得了 XML。
我可以将我的代码编译到 AS400 中,但是当我在 QSHELL 中运行该类或使用 RPG 程序时出现错误。
有人知道我还需要做什么或为什么会出现此错误吗?
谢谢!
编辑:
它是一个POST方法,实际上我在代码中包含了setDoInput和setDoOutput。
现在打印我得到的异常:
java.net.UnknownHostException: test.example.it
ERROR IOException: test.example.it
编辑:
看起来 nslookup 无法解析域,但之后我使用 IP 重试,现在出现此错误...
java.net.SocketException:为参数指定的值不正确。
ERROR IOException:为参数指定的值不正确。
我认为这可能是 AS400 安全性的问题,我应该将此域添加到列表中还是编辑系统值?
编辑:
使用 TCPCFG,然后使用选项 10,在这个主机表中我没有域 test.example.it,我想我需要添加这个域和 IP,不是吗?
编辑:
版本为V6R1M0。我添加了 IP(选项 10。使用 TCP/IP 主机表条目),现在 AS400 解析了域,但现在我遇到了一个新问题。
java.net.ConnectException:远程主机拒绝了尝试的连接操作。
在选项 12 中,我在所有选项中都有 *SAME。对于选项 1 如下:
Internet Subnet Line Line Opt Address Mask Description Type 127.0.0.1 255.0.0.0 *LOOPBACK *NONE 151.208.xxx.xx 255.255.255.0 ETHLINE *ELAN
我在一个群里找到这样的:“8080端口是在400上吗。400设置是不是通过SSL接受8080流量”。
如何让 400 接受流量?
【问题讨论】:
-
等等...你想
GET还是POST? -
打印整个堆栈跟踪并将其发布在您的问题中。 NB
setDoOutput(true)将方法设置为 POST。 -
UnknownHostException 通常是 DNS 查找失败。您能否在命令行上尝试 nslookup 以确保您可以解析主机名?
-
它看起来与
AS400 security没有任何联系。它看起来更像是一个 TCP/IP 配置问题。请从 CFGTCP 命令选项 1 和 12 将屏幕文本复制/粘贴到您的问题中。还要从选项 10 中粘贴主 IP 地址。 -
您都将请求方法设置为 POST 和调用
setDoOutput(true)。你只需要后者,你根本不需要setDoInput(true)。
标签: java ibm-midrange ioexception java1.4 iseries-navigator