我通过将.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文件?
答案 0 :(得分:3)
要让CF加载嵌套类,您需要像这样调用它:
<cfset credential_builder = createObject("java", "com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder") />
之后,从java到CF的转换过程顺利进行。