java - JAR 在 Lucee 上找不到 BouncyCaSTLeProvider

标签 java coldfusion bouncycastle apache-felix lucee

我们在 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 后,将到达 Security.addProvider(new BouncyCastleProvider());通过 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.jar 是 BouncyCaSTLe)放在 /lucee-server/context/lib 中。在 .cfm/.cfc 中创建 BouncyCaSTLeProvider 确实按预期工作:
createObject("java", "org.bouncycaSTLe.jce.provider.BouncyCaSTLeProvider").init()

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

最佳答案

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

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

Amazon 库似乎不是 OSGi 友好的,尽管它可能不费吹灰之力就可以转换。

现在,我会查看 JavaLoader作为让它工作的最简单方法。我没有任何有效的亚马逊 key 来进行全面测试,但使用 JavaLoader 我至少能够调用 payConfig.setPrivateKey() 方法而不会出现 ClassNotFoundException 错误.

关于java - JAR 在 Lucee 上找不到 BouncyCaSTLeProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66037089/

相关文章:

java - 如何使用 webview 下载文件? (这个案例很奇怪)

java - 构造函数采用两个整数,它们不能相等,实现这个的最佳方法是什么?

c# - Java BouncyCaSTLe AES 解密的 C# 等价物是什么?

Java:ObjectOutputStream 存在可序列化问题

java - 什么是从树中添加的队列上的节点、指针或节点的副本?

rest - 如何让 REST 端点接受具有相同键的多个查询参数?

jquery - session 变量和 RESTful api

jquery覆盖ajax表单发布

java - 为什么保存并重新加载 KeyStore 后 Key.getAlgorithm 返回不同的结果

java - BouncycaSTLe DER长度IO错误: