Java 1.4.2 AS400 上 getOutputStream() 中的 IOException
Java 1.4.2 IOException in getOutputStream() on AS400
我在使用 Java 1.4.2 的 AS400 系统下工作,以获得 XML 但是当我使用 getOutputStream() 执行请求时,我得到了一个 IOException 并且只有消息 returns 提供商的域。
这是我的部分代码:
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 中 运行 class 或使用 RPG 程序时,我得到了错误。
有人知道我还必须做什么或为什么会出现此错误吗?
谢谢!
编辑:
它是一个 POST 方法,实际上我在代码中包含了 setDoInput 和 setDoOutput。
现在打印我得到的异常:
java.net.UnknownHostException: test.example.it
ERROR IOException: test.example.it
编辑:
看起来 nslookup 没有解析域,但之后我重试使用 IP,现在我有这个错误...
java.net.SocketException: The value specified for the argument is not correct.
ERROR IOException: The value specified for the argument is not correct.
我认为这可能是 AS400 安全问题,我应该将此域添加到列表中还是编辑系统值?
编辑:
使用 TCPCFG 然后使用选项 10,在这个 table 主机中我没有域 test.example.it,我想我需要添加这个域和 IP,不是吗?
编辑:
版本为V6R1M0。我添加了 IP(选项 10。使用 TCP/IP 主机 table 条目),现在 AS400 解析了域,但现在我遇到了新问题。
java.net.ConnectException: A remote host refused an attempted connect operation.
在选项 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
我在群里找到了这个:"Is the 8080 port on the 400. Is the 400 setup to accept 8080 traffic via SSL".
如何让 400 接受流量?
最后我解决了我的问题,在主机 table 中添加了 IP 和域(正如我在编辑中提到的)但这是另一个问题。
提供商给了我一个用于请求的IP和另外两个用于响应的IP,我在主机table中添加了具有相同域的三个IP。我删除了三个 IP 中的两个,然后我尝试仅使用该 IP 进行请求并且成功了!
现在的问题是通过Java请求太慢了!但那是另一个话题。非常感谢大家。
我在使用 Java 1.4.2 的 AS400 系统下工作,以获得 XML 但是当我使用 getOutputStream() 执行请求时,我得到了一个 IOException 并且只有消息 returns 提供商的域。
这是我的部分代码:
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 中 运行 class 或使用 RPG 程序时,我得到了错误。
有人知道我还必须做什么或为什么会出现此错误吗?
谢谢!
编辑:
它是一个 POST 方法,实际上我在代码中包含了 setDoInput 和 setDoOutput。
现在打印我得到的异常:
java.net.UnknownHostException: test.example.it
ERROR IOException: test.example.it
编辑:
看起来 nslookup 没有解析域,但之后我重试使用 IP,现在我有这个错误...
java.net.SocketException: The value specified for the argument is not correct.
ERROR IOException: The value specified for the argument is not correct.
我认为这可能是 AS400 安全问题,我应该将此域添加到列表中还是编辑系统值?
编辑:
使用 TCPCFG 然后使用选项 10,在这个 table 主机中我没有域 test.example.it,我想我需要添加这个域和 IP,不是吗?
编辑:
版本为V6R1M0。我添加了 IP(选项 10。使用 TCP/IP 主机 table 条目),现在 AS400 解析了域,但现在我遇到了新问题。
java.net.ConnectException: A remote host refused an attempted connect operation.
在选项 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
我在群里找到了这个:"Is the 8080 port on the 400. Is the 400 setup to accept 8080 traffic via SSL".
如何让 400 接受流量?
最后我解决了我的问题,在主机 table 中添加了 IP 和域(正如我在编辑中提到的)但这是另一个问题。
提供商给了我一个用于请求的IP和另外两个用于响应的IP,我在主机table中添加了具有相同域的三个IP。我删除了三个 IP 中的两个,然后我尝试仅使用该 IP 进行请求并且成功了!
现在的问题是通过Java请求太慢了!但那是另一个话题。非常感谢大家。