0

XML を取得するために Java 1.4.2 を使用して AS400 システムで作業していますが、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

エラー IOException: test.example.it

編集:

nslookup はドメインを解決しないように見えますが、その後 IP を使用して再試行すると、このエラーが発生します...

java.net.SocketException: 引数に指定した値が正しくありません。
エラー 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

グループでこれを見つけました:「400の8080ポートです。400はSSL経由で8080トラフィックを受け入れるように設定されていますか」 .

どうすれば 400 でトラフィックを受け入れることができますか?

4

1 に答える 1

0

最後に、ホスト テーブルに IP とドメインを追加して問題を解決しましたが (編集で述べたように)、別の問題があります。

プロバイダーは、リクエスト用に 1 つの IP と応答用にさらに 2 つの IP を提供してくれました。ホスト テーブルに同じドメインを持つ 3 つの IP を追加しました。3 つの IP のうち 2 つを削除してから、その IP のみをリクエストに使用してみましたが、うまくいきました。

問題は、Java 経由のリクエストが遅すぎることです。しかし、それは別のトピックです。本当にありがとうございました。

于 2016-03-29T23:12:11.757 に答える