增加google Analytics API读取超时,将java代码转换为coldfusion

增加google Analytics API读取超时,将java代码转换为coldfusion,coldfusion,Coldfusion,简短问题:如何将以下java代码转换为ColdFusion代码 private static HttpRequestInitializer setHttpTimeout(final HttpRequestInitializer requestInitializer) { return new HttpRequestInitializer() { @Override public void initialize(HttpRequest httpReque

简短问题:如何将以下java代码转换为ColdFusion代码

private static HttpRequestInitializer setHttpTimeout(final HttpRequestInitializer requestInitializer) {
      return new HttpRequestInitializer() {
        @Override
        public void initialize(HttpRequest httpRequest) throws IOException {
          requestInitializer.initialize(httpRequest);
          httpRequest.setConnectTimeout(3 * 60000);  // 3 minutes connect timeout
          httpRequest.setReadTimeout(3 * 60000);  // 3 minutes read timeout
        }};

 }
说明: 我使用一个组件与google analytics API进行通信。这非常有效,但有时会出现读取超时。我想增加连接和读取时间。我在StackOverflow上找到了一篇文章,解释了如何在Java()中实现这一点。但是,我在将java代码转换为ColdFusion代码时遇到了问题。下面是我当前用于与Google Analytics API通信的ColdFusion组件:

<cfcomponent displayname="cfanalyticsConnector" output="false">

    <cffunction name="init" access="public" output="false" returntype="cfanalyticsConnector">
        <cfargument name="serviceAccountId" type="string" required="true" />
        <cfargument name="pathToKeyFile" type="string" required="true" />
        <cfargument name="analyticsAppName" type="string" required="true" />
        <cfscript>
            variables.serviceAccountId         = arguments.serviceAccountId;
            variables.pathToKeyFile            = arguments.pathToKeyFile;
            variables.analyticsAppName         = arguments.analyticsAppName;

            variables.HTTP_Transport           = createObject("java", "com.google.api.client.http.javanet.NetHttpTransport").init();
            variables.JSON_Factory             = createObject("java", "com.google.api.client.json.jackson2.JacksonFactory").init();
            variables.HTTP_Request_Initializer = createObject("java", "com.google.api.client.http.HttpRequestInitializer");
            variables.Credential_Builder       = createObject("java", "com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder");

            variables.Analytics_Scopes         = createObject("java", "com.google.api.services.analytics.AnalyticsScopes");
            variables.Analytics_Builder        = createObject("java", "com.google.api.services.analytics.Analytics$Builder").init(
                                                                         variables.HTTP_Transport, 
                                                                         variables.JSON_Factory, 
                                                                         javaCast("null", ""));
                                                                        
            variables.Collections              = createObject("java", "java.util.Collections");
            variables.File_Obj                 = createObject("java", "java.io.File");

            variables.credential               = "";
            variables.analytics                = "";
        </cfscript>
        <cfreturn this />
    </cffunction>

    <cffunction name="buildAnalytics" access="public" output="true" returntype="struct" hint="creates analytics object">
        <cfset local = {} />
        <cfset local.credential = "" />
        <cfset local.returnStruct = {} />
        <cfset local.returnStruct.success = true />
        <cfset local.returnStruct.error = "" />

        <!--- Access tokens issued by the Google OAuth 2.0 Authorization Server expire in one hour. 
        When an access token obtained using the assertion flow expires, then the application should 
        generate another JWT, sign it, and request another access token. 
        https://developers.google.com/accounts/docs/OAuth2ServiceAccount --->

        <cftry>
             <cfset local.credential = Credential_Builder
                            .setTransport(variables.HTTP_Transport)
                            .setJsonFactory(variables.JSON_Factory)
                            .setServiceAccountId(variables.serviceAccountId)
                            .setServiceAccountScopes(Collections.singleton(variables.Analytics_Scopes.ANALYTICS_READONLY))
                            .setServiceAccountPrivateKeyFromP12File(variables.File_Obj.Init(variables.pathToKeyFile))
                            .build() />

            <cfcatch type="any">
                <cfset local.returnStruct.error = "Credential Object Error: " & cfcatch.message & " - " & cfcatch.detail />
                <cfset local.returnStruct.success = false />
            </cfcatch>
        </cftry>

        <cfif  local.returnStruct.success>
            <cftry>
                <cfset variables.analytics = variables.Analytics_Builder
                                .setApplicationName(variables.analyticsAppName)
                                .setHttpRequestInitializer(local.credential)
                                .build() />

                <cfcatch type="any">
                    <cfset local.returnStruct.error = "Analytics Object Error: " & cfcatch.message & " - " & cfcatch.detail />
                    <cfset local.returnStruct.success = false />
                </cfcatch>
            </cftry>
        </cfif>
        
        <cfreturn local.returnStruct />
    </cffunction>
</cfcomponent>
如果我理解正确,我需要修改这行代码:

<cfset variables.analytics = variables.Analytics_Builder
    .setApplicationName(variables.analyticsAppName)
    .setHttpRequestInitializer(local.credential)
    .build() />


例如:

<cfset variables.analytics = createObject("java",
    "com.google.api.services.analytics.Analytics$Builder").init(
        variables.HTTP_Transport, 
        variables.JSON_Factory, 
        setHttpTimeout(local.credential)
    )
    .setApplicationName(variables.analyticsAppName)
    .setHttpRequestInitializer(local.credential)
    .build() />
>


>

然而,我还没有成功地将java setHttpTimeout函数转换为coldfusion。非常感谢您的帮助。

要创建3分钟的请求超时,您可以在发出http请求之前调用这行代码

标记格式

<cfsetting RequestTimeout = 3 * 60>

该函数实现一个java接口
HttpRequestInitializer
。要在CF中执行此操作,必须使用。创建一个实现函数
public void initialize(HttpRequest HttpRequest)…
的CFC。然后使用
createDynamicProxy()
创建CFC的实例。然后使用实例,而不是
setHttpTimeout(local.credential)
。此线程看起来很旧,但概述了CF请求的真实过程,但它们尝试执行不同的操作-修改单独java库的请求设置。
<cfsetting RequestTimeout = 3 * 60>
setting requesttimeout = 3 * 60;