見出し画像

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行目で以下のエラーが発生しました。

java.lang.IllegalAccessException: class com.ibm.jscript.types.JavaAccessObject cannot access class sun.net.www.protocol.https.HttpsURLConnectionImpl (in module java.base) because module java.base does not export sun.net.www.protocol.https to unnamed modul

解決方法は、JVMパラメータにあり!

エラーの原因は、Java のバージョンアップの影響で、必要なモジュールにアクセスできなくなったようです。
その為、JVMの起動パラメータを指定し、必要なモジュールにアクセスできるようにしました。このパラメータの指定方法については、こちらのHCLの記事を参考にしてください。

今回は、上記の記事の手順1で、以下のパラメータを指定しました。

--add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED

上記の対応で、私の環境ではプログラムを修正することなく、エラーが回避されました。

もし、同じようなエラーが発生した場合は、一度お試し頂ければと思います。ただし、『--add-exports』は、長期的な解決策ではなく、あくまで一時的な回避策としてとらえ、根本的には、そのバージョンに合ったようにプログラム修正する方が良いようです。

いいなと思ったら応援しよう!