gpt4 book ai didi

coldfusion - 调用 Java JAR 函数

转载 作者:行者123 更新时间:2023-12-01 13:13:46 25 4
gpt4 key购买 nike

我正在尝试连接到 Java (JAR) 库以与“QuickBooks Merchant Services API”通信。

每次调用 API 都需要一个 OAuth2 访问 token 。我的第一步是使用 QuickBooks 提供的 Java SDK 来获取访问 token 。

我从该页面下载了“jar-with-dependencies.jar”选项。根据 Maven,6.0.1 是当前版本。

https://search.maven.org/search?q=a:oauth2-platform-api

我在网站的根目录下创建了一个名为“java”的文件夹,并将此文件存储在该文件夹中。

oauth2-platform-api-6.0.1-jar-with-dependencies.jar

在Application.cfc中,我添加了这行代码:

<!--- Application.cfc snippet --->
<cfset this['javaSettings'] = {
LoadPaths = ["#expandPath('/java')#"]
,loadColdFusionClassPath = true
,reloadOnChange = true
,watchInterval = 100
,watchExtensions = "jar,class,xml"
}>

在 test.cfm 文件中,我在函数中有以下代码行:

variables['oauth2Config'] = createObject("java", "com.intuit.oauth2.config.OAuth2Config").OAuth2ConfigBuilder(arguments.clientId, arguments.clientSecret).callDiscoveryAPI(Environment.SANDBOX).buildConfig();

在 developer.intuit.com 网站上的示例中,Java 代码如下所示:

OAuth2Config oauth2Config = new OAuth2Config.OAuth2ConfigBuilder("clientId", "clientSecret").callDiscoveryAPI(Environment.SANDBOX).buildConfig();

当我运行代码时,我收到以下错误消息。

Class not found: com.intuit.oauth2.config.OAuth2Config

我已经用几个不同的变体替换了“LoadPaths”键,但都导致了相同的错误。

LoadPaths = ["/java"]
LoadPaths = ["./java"]
LoadPaths = ["./java/oauth2-platform-api-6.0.1-jar-with-dependencies.jar"]

我尝试修改初始化调用:

local['oauth2Config'] = createObject("java", "OAuth2Config").OAuth2ConfigBuilder(arguments.clientId, arguments.clientSecret).callDiscoveryAPI(Environment.SANDBOX).buildConfig();

这导致了基本上相同类型的错误:

Class not found: OAuth2Config

我很确定我在 Application.cfc 的 this.javaSettings 结构中做错了什么。我希望 Java JAR 方法会更简单,但我最终可能会使用 Intuit 拥有的 REST API。我仍然必须使用 OAuth2,我不确定 cfoauth 标签/函数是否适用于该系统。

如果您看到任何可以帮助我解决这个问题的东西,请告诉我。

最佳答案

  1. CF 找不到 OAuth2ConfigBuilder 因为它是内部类,需要稍微不同的语法:

    createObject("java", "com.intuit.oauth2.config.OAuth2Config$OAuth2ConfigBuilder");
  2. Environment 也是 jar 中的一个类。在使用常量 Environment.SANDBOX

  3. 之前,您必须创建对它的引用
  4. 即使在解决了这些问题之后,使用 CF2016 进行的简短测试仍会抛出 LinkageError由于自定义 jar 中包含 slf4j,同时还从 CF/lib(也包括 slf4j)加载 jar。切换到 loadColdFusionClassPath = false 似乎可以解决该错误。

    java.lang.LinkageError: loader constraint violation: when resolving method "org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;" the class loader (instance of coldfusion/runtime/java/JavaDynamicClassLoader) ...

应用程序.cfc

this['javaSettings'] = {
LoadPaths = ["#expandPath('/java')#"]
,loadColdFusionClassPath = false
, ...
};

代码:

variables['environ'] = createObject("java", "com.intuit.oauth2.config.Environment");
variables['builder'] = createObject("java", "com.intuit.oauth2.config.OAuth2Config$OAuth2ConfigBuilder");
variables['oauth2Config'] = variables['builder'].init( arguments.clientId, arguments.clientSecret).
callDiscoveryAPI( variables['environ'].SANDBOX ).buildConfig();

关于coldfusion - 调用 Java JAR 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57798356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com