萌えハッカーニュースリーダー

2025/08/13 13:03 Get Org.apache.xml.security Working with GraalVM

出典: https://guust.ysebie.be/blog/supporting-apache-xml-security-algorithms.html
hakase
博士

やあ、ロボ子!今日はGraalVMのネイティブコンパイルでちょっとした問題が起きたみたいじゃぞ。

roboko
ロボ子

GraalVMですか、博士。最近よく耳にしますね。どんな問題が発生したんですか?

hakase
博士

どうやら、`org.apache.xml.security`というライブラリを使っているときに、必要なリソースバンドルが見つからなかったり、ハッシュアルゴリズムが見つからなかったりするエラーが出たみたいじゃ。

roboko
ロボ子

`java.util.MissingResourceException`と`org.apache.xml.security.signature.XMLSignatureException`ですね。原因は何だったんでしょう?

hakase
博士

ネイティブコンパイルするときに、必要なリソースやクラスがうまく含まれていなかったのが原因みたいじゃな。GraalVMは、デフォルトでは必要なものだけをコンパイル対象にするから、こういうことが起こるんじゃ。

roboko
ロボ子

なるほど。解決策はあったんですか?

hakase
博士

もちろんじゃ!まず、リソースバンドルを含めるために、ビルド引数に`-H:IncludeResourceBundles=org.apache.xml.security.resource.xmlsecurity`を追加したみたいじゃ。

roboko
ロボ子

それでリソースバンドルの問題は解決したんですね。

hakase
博士

そうじゃ。そして、リフレクションが必要なクラスやメソッドをGraalVMに教えるために、`reflect-config.json`という設定ファイルを使ったみたいじゃな。

roboko
ロボ子

リフレクション設定ファイルですか。具体的にはどのような設定をするんですか?

hakase
博士

例えば、`org.apache.xml.security.algorithms.implementations.SignatureECDSA$SignatureECDSASHA1`というクラスのコンストラクタを有効にする、みたいな感じじゃ。

roboko
ロボ子

なるほど。必要なクラスやメソッドを明示的に指定するんですね。設定ファイルの指定方法はどうするんですか?

hakase
博士

`GraalVM-H:ReflectionConfigurationFiles=${basedir}/path/to/reflect-config.json`という引数を渡すことで、設定ファイルを指定できるみたいじゃ。

roboko
ロボ子

これで、ネイティブコンパイルがうまくいくようになったんですね。

hakase
博士

そういうことじゃ!ただ、毎回ユーザーが設定ファイルを用意するのは面倒じゃから、ライブラリ自体がGraalVM Reachability Metadata Repositoryを通じて設定ファイルを提供する方法も検討されているみたいじゃな。

roboko
ロボ子

それは便利になりますね。ライブラリの提供者が設定を用意してくれれば、ユーザーは手間が省けます。

hakase
博士

そうじゃな。GraalVMのネイティブコンパイルは、起動が速くてパフォーマンスも良いから、どんどん活用していきたいのじゃ。でも、こういう細かい設定がまだまだ必要なのが現状じゃな。

roboko
ロボ子

確かにそうですね。でも、今回の解決策を参考にすれば、他のライブラリでも同様の問題に対応できそうです。

hakase
博士

その通り!ロボ子も賢くなったのじゃ!

roboko
ロボ子

ありがとうございます、博士。ところで、博士はリフレクション設定ファイルのJSONを編集するとき、いつも鏡を見ているんですか?

hakase
博士

な、な、なんでそれを…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search