2015-06-01 32 views
2

我正在使用Google API Java客戶端創建憑證對象。以下代碼適用於Windows,但在OSX 10.10.3(優勝美地)上引發錯誤。ColdFusion〜Class不能是接口(僅限OSX)

<cfscript> 
    httpTransport = createObject("java", "com.google.api.client.http.javanet.NetHttpTransport").init(); 
    jsonFactory = createObject("java","com.google.api.client.json.jackson2.JacksonFactory").init(); 
    credential = createObject("java", "com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder").init(); 
</cfscript> 

我能夠調用的CreateObject對一些類的沒有問題(NetHttpTransport,JacksonFactory等),但是當我嘗試實例憑證生成器,我得到以下錯誤:

對象實例化異常。

實例化Java對象時發生異常。該類不能是接口或抽象類。錯誤:com/google/api/client/auth/oauth2/Credential $ Builder。

java.lang.NoClassDefFoundError: com/google/api/client/auth/oauth2/Credential 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
... 
    at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) 
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) 
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66) 
Caused by: java.lang.ClassNotFoundException: com.google.api.client.auth.oauth2.Credential 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 60 more 

,我最終設法內的ColdFusion重現的Java代碼:

GoogleCredential credential = new GoogleCredential.Builder() 
     .setTransport(httpTransport) 
     .setJsonFactory(JSON_FACTORY) 
     .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
     .setServiceAccountPrivateKeyFromP12File(new File(KEY_FILE_LOCATION)) 
     .setServiceAccountScopes(AnalyticsScopes.all()) 
     .build(); 

Here's the full Stack Trace

+1

即對Java對象的鍋爐板錯誤消息。你能發佈完整的堆棧跟蹤嗎? – Leigh

+0

謝謝。跟蹤表示其中一個必需的類丟失或無法訪問:'由於:java.lang.ClassNotFoundException:com.google.api.client.auth.oauth2.Credential'。驗證您是否已將包含該類的jar添加到CF類路徑 - 或者對於CF10 + [應用程序庫路徑](http://help.adobe.com/en_US/ColdFusion/10.0/Developing/WSe61e35da8d318518-106e125d1353e804331-7ffd.html )。 – Leigh

回答

2

直接訪問可以工作了一些類,而不是爲別人,因爲那些不工作的人可能期望輔助類在classPath中。將您的Google API Java文件位置的路徑添加到jvm.config文件(例如jrun4/bin/jvm.config)並重新啓動CF服務器可能會解決此問題。

# JVM classpath 
java.class.path={application.home}/servers/lib,{application.home}/servers/lib,{application.home}/servers/cfusion/cfusion-ear/cfusion-war/WEB-INF/cfusion/lib/oosdk/classes,{application.home}/servers/cfusion/cfusion-ear/cfusion-war/WEB-INF/cfusion/lib/oosdk/lib,{application.home}/lib 
+0

是的,這是ClassNotFoundException指示的內容。 CF類路徑中缺少一個或多個類和/或無法訪問。在這種情況下'com.google.api.client.auth.oauth2.Credential'。對於將來的讀者,關於jvm.config的相同註釋適用於CF10 +(它使用TomCat而不是JRUN),但文件路徑不同。 – Leigh

+1

注意,從CF10 +開始,您可以通過Application.cfc [動態加載JAR](http://help.adobe.com/en_US/ColdFusion/10.0/Developing/WSe61e35da8d318518-106e125d1353e804331-7ffd.html)。如果你使用這種方法,那麼你需要添加缺少的jar路徑到'THIS.javaSettings'而不是你的jvm.config文件。 – Leigh

相關問題