首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用Java函数

调用Java函数
EN

Stack Overflow用户
提问于 2019-09-05 04:16:56
回答 1查看 226关注 0票数 3

我正在尝试连接到Java (JAR)库,以便与"QuickBooks商人服务API“进行通信。

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

我从这个页面下载了“jar-with-truencies.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中,我添加了这一行代码:

代码语言:javascript
运行
复制
<!--- Application.cfc snippet --->
<cfset this['javaSettings'] = {
    LoadPaths = ["#expandPath('/java')#"]
    ,loadColdFusionClassPath = true
    ,reloadOnChange = true
    ,watchInterval = 100
    ,watchExtensions = "jar,class,xml"
}>

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

代码语言:javascript
运行
复制
variables['oauth2Config'] = createObject("java", "com.intuit.oauth2.config.OAuth2Config").OAuth2ConfigBuilder(arguments.clientId, arguments.clientSecret).callDiscoveryAPI(Environment.SANDBOX).buildConfig();

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

代码语言:javascript
运行
复制
OAuth2Config oauth2Config = new OAuth2Config.OAuth2ConfigBuilder("clientId", "clientSecret").callDiscoveryAPI(Environment.SANDBOX).buildConfig();

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

代码语言:javascript
运行
复制
Class not found: com.intuit.oauth2.config.OAuth2Config

我用几个不同的变体交换了"LoadPaths“键,但是都导致了相同的错误。

代码语言:javascript
运行
复制
LoadPaths = ["/java"]
LoadPaths = ["./java"]
LoadPaths = ["./java/oauth2-platform-api-6.0.1-jar-with-dependencies.jar"]

我尝试修改初始化调用:

代码语言:javascript
运行
复制
local['oauth2Config'] = createObject("java", "OAuth2Config").OAuth2ConfigBuilder(arguments.clientId, arguments.clientSecret).callDiscoveryAPI(Environment.SANDBOX).buildConfig();

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

代码语言:javascript
运行
复制
Class not found: OAuth2Config

我很确定我在Application.cfc中的Application.cfc结构中做错了什么。我希望Java方法会更容易一些,但我可能最终会使用Intuit所拥有的REST。我仍然必须使用OAuth2,我不确定cfoauth标记/函数是否适用于这个系统。

如果你看到什么能帮我解决这个问题的话,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-05 15:04:15

  1. CF找不到OAuth2ConfigBuilder,因为它是内部类,需要稍微不同的语法: "com.intuit.oauth2.config.OAuth2Config$OAuth2ConfigBuilder");createObject("java“
  2. Environment也是jar中的一个类。必须在使用常量Environment.SANDBOX之前创建对它的引用。
  3. 即使在修复了这些问题之后,CF2016的一个简单测试也会抛出一个LinkageError,这是因为在自定义jar中包含了slf4j,同时还从CF/lib (也包括slf4j )加载jar。切换到"org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;“似乎通过了error.java.lang.LinkageError:loadColdFusionClassPath = false约束违反:当解析方法时,类加载器( coldfusion/runtime/java/JavaDynamicClassLoader)的实例.

Application.cfc

代码语言:javascript
运行
复制
this['javaSettings'] = {
        LoadPaths = ["#expandPath('/java')#"]
        ,loadColdFusionClassPath = false
        , ...
};

代码:

代码语言:javascript
运行
复制
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();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57798356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档