V14へアップデート後、Javaのエラーが発生した件
最新のDomino V14では、Javaのベース部分が更新されています。
今回は、その影響で私が遭遇したJavaのエラーと解決方法について、ご紹介します。
Domino V14では、Java 17 に!
Domino V14では、JVM のバージョンは、これまでの Java1.8 から Java 17にアップグレードされています。
その為、V14へアップグレードされた場合、XPagesやJavaに関するプログラムは、念の為、動作確認を行うことが推奨されています。
「java.net.URL」でエラーが発生
まず背景としては、XPagesから外部WebサービスのAPIにHttpRequestをPOSTして情報を取得する処理がありました。このWeb APIの仕様では、クライアントサイドJavaScriptでのHttpRequestが禁止されており、サーバーサイドJavaScriptにて「java.net.URL」を利用して通信が行われていました。
■サンプルプログラム
var strUrl = "https://xxxxxxxxxxxxxxxxxxx";
var objUrl = new java.net.URL(strUrl);
var con = objUrl.openConnection();
con.setRequestMethod("POST"); //この個所でエラー
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setDoOutput(true);
//-----以下略-----
V14へのアップグレート後、上記の4行目で以下のエラーが発生しました。
解決方法は、JVMパラメータにあり!
エラーの原因は、Java のバージョンアップの影響で、必要なモジュールにアクセスできなくなったようです。
その為、JVMの起動パラメータを指定し、必要なモジュールにアクセスできるようにしました。このパラメータの指定方法については、こちらのHCLの記事を参考にしてください。
今回は、上記の記事の手順1で、以下のパラメータを指定しました。
--add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED
上記の対応で、私の環境ではプログラムを修正することなく、エラーが回避されました。
もし、同じようなエラーが発生した場合は、一度お試し頂ければと思います。ただし、『--add-exports』は、長期的な解決策ではなく、あくまで一時的な回避策としてとらえ、根本的には、そのバージョンに合ったようにプログラム修正する方が良いようです。