微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Lucee 上的 JAR 未找到 BouncyCastleProvider

如何解决Lucee 上的 JAR 未找到 BouncyCastleProvider

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

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

但是,在调用 setPrivateKey 时,它将通过 PayConfiguration 到达 Security.addProvider(new BouncyCastleProvider());,我们收到一个 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.jar 为 BouncyCastle)放置在 /lucee-server/context/lib 中。在 .cfm/.cfc 中创建 BouncyCastleProvider 确实按预期工作:
createObject("java","org.bouncycastle.jce.provider.BouncyCastleProvider").init()

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

解决方法

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

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

Amazon 库似乎对 OSGi 不友好,尽管它可能无需太多努力即可转换。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。