【问题标题】:Java 1.4.2 IOException in getOutputStream() on AS400AS400 上 getOutputStream() 中的 Java 1.4.2 IOException
【发布时间】: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


【解决方案1】:

最后我解决了我的问题,在主机表中添加了 IP 和域(正如我在编辑中提到的那样),但这是另一个问题。

提供商给了我一个 IP 用于请求,另外两个 IP 用于响应,我在主机表中添加了三个具有相同域的 IP。我删除了三个 IP 中的两个,然后我尝试仅使用 IP 进行请求,它成功了!

现在的问题是通过 Java 的请求太慢了!但这是另一个话题。非常感谢大家。

【讨论】:

    猜你喜欢
    • 2016-04-18
    • 2014-06-28
    • 2014-04-18
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    相关资源
    最近更新 更多