Coldfusion サーバーの WEB-INF/lib フォルダーに .jar ファイルを配置することで、サービス アカウント認証用に 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 ファイルを完全にロードしない理由を知っている人はいますか?