3

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 ファイルを完全にロードしない理由を知っている人はいますか?

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 に答える