3

我通过将 .jar 文件放在 Coldfusion 服务器的 WEB-INF/lib 文件夹中来加载 Google 的 Java 客户端以进行服务帐户授权。java对象可以这样创建:

<cfset credential = createObject("java", "com.google.api.client.googleapis.auth.oauth2.GoogleCredential") />

但是如果 java 类有任何形式的内部类,则在ClassName$InnerClassName转储对象时似乎不会加载它们。

具体来说,我试图添加从这里下载的 .jar 文件:https ://code.google.com/p/google-api-java-client/downloads/list

我试图转换为 CF 的代码是:

GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
        .setJsonFactory(JSON_FACTORY)
        .setServiceAccountId("[[INSERT SERVICE ACCOUNT EMAIL HERE]]")
        .setServiceAccountScopes(PlusScopes.PLUS_ME)
        .setServiceAccountPrivateKeyFromP12File(new File("key.p12"))
        .build();

<cfset credential = createObject("java", "com.google.api.client.googleapis.auth.oauth2.GoogleCredential") />可以很好地创建对象,但是当它被转储或在代码中调用 Builder() 方法时,转储不显示 Builder 方法,或者分别表示找不到该方法。

当我从google-api-client-1.17.0-rc.jar文件中提取类时,具有该方法的类就在那里GoogleCredential$Builder.class

底线是 .jar 文件中的所有内容似乎都井井有条,但是当它们添加到 CF 时,并非所有内容都在那里。

任何人都知道为什么 CF 没有完全加载 .jar 文件?

4

1 回答 1

3

要让 CF 加载嵌套类,您需要像这样调用它:

<cfset credential_builder = createObject("java", "com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder") />

之后,从 java 到 CF 的转换过程顺利进行。

于 2013-12-16T01:49:53.200 回答