1

Java ライブラリを使用して ColdFusion アプリケーションに GoCardless を実装していますが、次のエラーが発生しました。

java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String([B)Ljava/lang/String;

GoCardless のドキュメントで説明されているように、それらのライブラリは (とりわけ) Apache Commons Codec ライブラリに依存しています。GoCardless JAR を ColdFusion lib フォルダーに入れると、Apache Commons Codec JAR が既に存在することに気付きました。このエラーが何を意味するのかわかりません。

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

3

そのメソッドを呼び出していないと仮定すると、おそらくそれが言っていることを正確に意味します。jvm によってロードされたコーデック バージョンには、そのシグネチャを持つメソッドが含まれていません。クラスのインスタンスを作成しorg.apache.commons.codec.binary.Base64、利用可能なメソッドを cfdump でチェックすることで確認できます。(クラスローダーの競合の可能性もありますが、前者の可能性が高くなります。)

理由としては、jar の複数のバージョンがクラス パスに存在する場合、jvm はそのうちの 1 つしか選択できません。おそらく、ColdFusion に同梱されている古いバージョンが選択された可能性がありますが、そのバージョンにはそのメソッドがない可能性があります。参照:クラスがロードされた jar の識別.. .

新しい jar バージョンをロードする最も簡単な方法は、 の古い jar を削除/libし、新しいバージョンに置き換えて、CF を再起動することです。ライブラリは CF 自体でも使用されるため、新しいバージョンに下位互換性がない場合、何かが壊れるリスクがあることに注意してください。もう 1 つのオプションは、CF10 の動的クラス読み込み機能を使用することです。これは基本的に、Mark Mandel の JavaLoader.cfc のリッピングであり、CF にバンドルされているだけです。

于 2013-07-15T12:33:07.647 に答える