Lucee上的JAR未找到BouncyCastleProvider

我们amazon-pay-api-sdk-java-2.2.2.jar在 Adob​​e ColdFusion中成功地使用了 AmazonPay API for Java ( )。我们最近引入了 Lucee(在 Jetty 上,也在 OpenJDK 8 上运行)并尝试运行相同的代码(相关摘录):

payConfig = createObject("java", "com.amazon.pay.api.PayConfiguration").init();
payConfig.setPrivateKey("...");

但是,在调用 时setPrivateKey,它将到达Security.addProvider(new BouncyCastleProvider());through PayConfiguration,我们收到一个java.lang.ClassNotFoundException

lucee.runtime.exp.NativeException: org.bouncycastle.jce.provider.BouncyCastleProvider
  at com.amazon.pay.api.PayConfiguration.setPrivateKey(PayConfiguration.java:77)
  [...]
  at java.lang.Thread.run(Thread.java:823)
 Caused by: java.lang.NoClassDefFoundError: org.bouncycastle.jce.provider.BouncyCastleProvider
  ... 57 more
 Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider not found by amazon.pay.api.sdk.java.2.2.2 [49]
  at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1597)
  at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
  at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:881)
  ... 57 more

我们已将所有依赖项(即bcprov-jdk15on-1.65.jarBouncyCastle)放在/lucee-server/context/lib. BouncyCastleProvider在 .cfm/.cfc 中创建确实按预期工作:
createObject("java", "org.bouncycastle.jce.provider.BouncyCastleProvider").init()

我不明白 Lucee 的类加载器在这里做什么。我错过了什么?

回答

老实说,我不知道 Lucee 的类加载器在做什么,但是当通过 Lucee/lib路径加载某些更复杂的 jar 时,这种错误似乎很常见。很可能在某处发生了“阶级冲突”。

Lucee 现在是基于 OSGi 的,这意味着避免这种情况的最好方法是将第三方 Java 库作为 OSGi 包加载。一些库已经为 OSGi 打包,而其他库可以很容易地转换。更多细节在这里。

Amazon 库似乎不是 OSGi 友好的,尽管它可能不需要太多努力就可以转换。

现在,我会将JavaLoader视为使其工作的最简单方法。我没有任何有效的亚马逊密钥可以完全测试,但是使用 JavaLoader 我至少能够调用该payConfig.setPrivateKey()方法而不会ClassNotFoundException出错。


以上是Lucee上的JAR未找到BouncyCastleProvider的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>