Java 如何在google';Coldfusion中的目录API

Java 如何在google';Coldfusion中的目录API,java,coldfusion,google-admin-sdk,google-directory-api,Java,Coldfusion,Google Admin Sdk,Google Directory Api,我一直在尝试创建一个脚本来使用带有谷歌目录API的服务帐户,但运气不好。到目前为止,我已经: -从下载了管理目录JAR文件,并将它们全部放在我的WEB-INF/lib-dir中 -根据他们的域委托创建了一个服务帐户——我生成了一个P12文件而不是JSON,因为实例化代码使用的就是这个文件 -我将同一指令页上的JAVA代码转换为ColdFusion,因此看起来像这样 p12File = createObject( 'java', 'java.io.File' ).init("{my file pa

我一直在尝试创建一个脚本来使用带有谷歌目录API的服务帐户,但运气不好。到目前为止,我已经:

-从下载了管理目录JAR文件,并将它们全部放在我的WEB-INF/lib-dir中

-根据他们的域委托创建了一个服务帐户——我生成了一个P12文件而不是JSON,因为实例化代码使用的就是这个文件

-我将同一指令页上的JAVA代码转换为ColdFusion,因此看起来像这样

p12File = createObject( 'java', 'java.io.File' ).init("{my file path}");
accountId = JavaCast( "string", "XXX@XXX.iam.gserviceaccount.com" );

GoogleCredential = createObject( "java", "com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder" );
HttpTransport = createObject( "java", "com.google.api.client.http.HttpTransport" );
NetHttpTransport = createObject( "java", "com.google.api.client.http.javanet.NetHttpTransport" );
JsonFactory = createObject( "java", "com.google.api.client.json.JsonFactory" );
JacksonFactory = createObject( "java", "com.google.api.client.json.jackson2.JacksonFactory" );
Directory = createObject( "java", "com.google.api.services.admin.directory.Directory$Builder" );
DirectoryScopes = createObject( "java", "com.google.api.services.admin.directory.DirectoryScopes" );
Collections = createObject( "java", "java.util.Collections" );

credential = GoogleCredential
.setTransport( NetHttpTransport )
.setJsonFactory( JacksonFactory )
.setServiceAccountId( accountId )
.setServiceAccountScopes( Collections.singleton( DirectoryScopes.ADMIN_DIRECTORY_USER ) )
.setServiceAccountUser("XXX@XXX.org")
.setServiceAccountPrivateKeyFromP12File( p12File )
.build();

service = Directory.Init( NetHttpTransport, JacksonFactory, javaCast( "null", "" ) ).setHttpRequestInitializer( credential ).build();
我在service=Directory.Init处收到一个Coldfusion错误。。。一行 “系统试图使用未定义的值,这通常表明您的代码或某些系统代码中存在编程错误。空指针是未定义值的另一个名称。”我不明白为什么。我所能弄明白的是,这是一个相当普遍的错误,对于其中一个变量来说,这似乎是一个不可接受的值

TIA需要您提供的任何帮助(来自评论…)

可能没有关系,但是。。CF代码中未初始化
NetHttpTransport
JacksonFactory
。通常,当您首次在未初始化的对象上调用方法时,CF会自动调用无参数构造函数:

如果在对象上调用公共非静态方法而不首先调用 通过调用init方法,ColdFusion隐式调用 默认构造函数

但是,我不知道在将未初始化的对象传递到构造函数中时是否适用相同的规则。尝试显式调用对象上的
init()
,以查看这是否解决了NullPointerException:

NetHttpTransport = createObject( "java", "com.google.api.client.http.javanet.NetHttpTransport" ).init();
JacksonFactory = createObject( "java", "com.google.api.client.json.jackson2.JacksonFactory" ).init();

1.转储
目录
变量,以及init()调用中的每个变量,以查看它们是否为null。2.可能是无关的,但是。。。未初始化
NetHttpTransport
JacksonFactory
。虽然通常CF在调用第一个方法时会自动调用无参数构造函数,但我不知道在将未初始化的对象传递到构造函数时是否适用。可能会尝试显式地对它们调用init()。。。。此外,如果只是为了更容易地排除问题和/或错误,您可能希望拆分链式方法调用。Leigh-谢谢您的帮助。具体地说,将.init()添加到这两个项目中似乎已经达到了目的。我现在得到一个服务对象,当我转储它时,它显示可用的方法。我之所以说“出现”,是因为我主要是一名CF人员,我的JAVA技能不是很强。当我尝试使用像
service.groups().list()
这样的方法调用时-当返回s/b 2组时,我的结果为空。IDK如果我使用的对象不正确,缺少一个步骤或谷歌不喜欢的东西。我需要做更多的测试并发布一个后续/新问题。是的-我将DirectoryScopes常量更改为ADMIN\u DIRECTORY\u GROUPAh,好的。这是有道理的。我将写下init()建议,以防它帮助其他人获得NPE。