我们已成功使用 AmazonPay API for Java (amazon-pay-api-sdk-java-2.2.2.jar
)在 Adobe ColdFusion 中。我们最近引入了 Lucee(在 Jetty 上,也在 OpenJDK 8 上运行)并尝试运行相同的代码(相关摘录):
payConfig = createObject("java", "com.amazon.pay.api.PayConfiguration").init();
payConfig.setPrivateKey("...");
然而,在拨打电话后setPrivateKey
,这将到达Security.addProvider(new BouncyCastleProvider()); https://github.com/amzn/amazon-pay-api-sdk-java/blob/83f0fa13d4bae50218e94d010ff9360823a8616b/src/com/amazon/pay/api/Util.java#L150通过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
。创造BouncyCastleProvider
在 .cfm/.cfc 中确实按预期工作:
createObject("java", "org.bouncycastle.jce.provider.BouncyCastleProvider").init()
我不明白 Lucee 的类加载器在这里做什么。我缺少什么?
老实说,我也不知道 Lucee 的类加载器在做什么,但是当通过 Lucee 加载某些更复杂的 jar 时,这种错误似乎很常见/lib
小路。某处可能正在发生“阶级冲突”。
Lucee 现在基于 OSGi,这意味着避免这种情况的最佳方法是将第三方 java 库作为 OSGi 包加载。一些库已经为 OSGi 打包,而其他库则可以相当容易地转换。更多详情请点击这里 https://blog.simplicityweb.co.uk/121/loading-java-libraries-dynamically-in-lucee-without-javaloader.
Amazon 库似乎对 OSGi 不友好,尽管它可能不需要太多努力就可以转换。
现在,我会看看Java加载器 https://github.com/markmandel/JavaLoader/wiki/Class-Loading作为让它发挥作用的最简单方法。我没有任何有效的 Amazon 密钥来进行全面测试,但使用 JavaLoader 我至少能够调用payConfig.setPrivateKey()
方法没有得到ClassNotFoundException
error.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)