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 でトラフィックを受け入れることができますか?