我想在我的coldfusion文件中访问java方法的返回值。我已经在coldfusion文件中加载了所有jar文件,并成功获得了java类对象。使用类对象,我想访问返回Set
的java类方法;但我无法获得任何返回值。这是我的Java代码:
public Set getSession(String url) {
result+="hello";
try {
DesiredCapabilities caps = new DesiredCapabilities();
caps.setJavascriptEnabled(true);
caps.setCapability("takesScreenshot", false);
caps.setCapability(
PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,
"E:\TicketScraper\phantomjs\phantomjs.exe"
);
driver = new PhantomJSDriver(caps);
driver.get(url);
driver.findElement(By.id("login:loginName")).sendKeys("XXXX");
driver.findElement(By.id("login:password")).sendKeys("XXXX");
waitForJQueryProcessing(driver, 5);
driver.findElement(By.id("login:j_idt145")).click();
Thread.sleep(10000);
Set<org.openqa.selenium.Cookie> allCookies=driver.manage().getCookies();
for ( org.openqa.selenium.Cookie loadedCookie : allCookies) {
System.out.println(String.format("%s -> %s", loadedCookie.getName(),loadedCookie.getValue()));
}
} catch(Exception e) {
System.out.println(e);
}
return allCookies;
}
java代码运行Phantom JS驱动程序,登录到上述代码中的URL,并获取所有cookie。所有 cookie 都收集在 Set
变量中,并从方法返回。我想在 CF 代码中获取这个集合变量。
但是当我尝试在 CF 中访问 java 方法的 Set
变量时,它不会返回任何值。相比之下,当我注释掉所有Phantom JS代码并只返回一个String
变量时,CF可以访问字符串值。这是我的CF代码:
<cfscript>
paths = arrayNew(1);
paths[1] = expandPath("libapache-mime4j-0.6.jar");
paths[2] = expandPath("libbsh-1.3.0.jar");
paths[3] = expandPath("libcglib-nodep-2.1_3.jar");
paths[4] = expandPath("libcommons-codec-1.9.jar");
paths[5] = expandPath("libcommons-collections-3.2.1.jar");
paths[6] = expandPath("libcommons-exec-1.1.jar");
paths[7] = expandPath("libcommons-io-2.4.jar");
paths[8] = expandPath("libcommons-jxpath-1.3.jar");
paths[9] = expandPath("libcommons-lang3-3.3.2.jar");
paths[10] = expandPath("libcommons-logging-1.1.3.jar");
paths[11] = expandPath("libCounsel_Cookies_Phantom.jar");
paths[12] = expandPath("libcssparser-0.9.14.jar");
paths[13] = expandPath("libgson-2.3.jar");
paths[14] = expandPath("libguava-18.0.jar");
paths[15] = expandPath("libhamcrest-core-1.3.jar");
paths[16] = expandPath("libhamcrest-library-1.3.jar");
paths[17] = expandPath("libhtmlunit-2.15.jar");
paths[18] = expandPath("libhtmlunit-core-js-2.15.jar");
paths[19] = expandPath("libhttpclient-4.3.4.jar");
paths[20] = expandPath("libhttpcore-4.3.2.jar");
paths[21] = expandPath("libhttpmime-4.3.4.jar");
paths[22] = expandPath("libini4j-0.5.2.jar");
paths[23] = expandPath("libjcommander-1.29.jar");
paths[24] = expandPath("libjetty-websocket-8.1.8.jar");
paths[25] = expandPath("libjna-3.4.0.jar");
paths[26] = expandPath("libjna-platform-3.4.0.jar");
paths[27] = expandPath("libjunit-dep-4.11.jar");
paths[28] = expandPath("libnetty-3.5.7.Final.jar");
paths[29] = expandPath("libnekohtml-1.9.21.jar");
paths[30] = expandPath("liboperadriver-1.5.jar");
paths[31] = expandPath("libphantomjsdriver-1.1.0.jar");
paths[32] = expandPath("libprotobuf-java-2.4.1.jar");
paths[33] = expandPath("libsac-1.3.jar");
paths[34] = expandPath("libselenium-java-2.44.0.jar");
paths[35] = expandPath("libselenium-java-2.44.0-srcs.jar");
paths[36] = expandPath("libserializer-2.7.1.jar");
paths[37] = expandPath("libtestng-6.8.5.jar");
paths[38] = expandPath("libxalan-2.7.1.jar");
paths[39] = expandPath("libxercesImpl-2.11.0.jar");
paths[40] = expandPath("libxml-apis-1.4.01.jar");
paths[41] = expandPath("libSelenium_Cookies.jar");
paths[42] = expandPath("libselenium-server-2.0b2.jar");
//writeDump(paths);
//create the loader
loader = createObject("component", "javaloader.JavaLoader").init(paths,true);
//writeDump(loader);
excelObject = loader.create("counsel_cookies_phantom.Counsel_Cookies_Phantom");
//writeDump(excelObject);
//abort;
</cfscript>
<cfdump var=#excelObject.getSession("https://pacer.login.uscourts.gov/csologin/login.jsf")#/>
<cfabort>
请提供有关如何在 CF 中访问 Phantom JS 值的建议。
假设你的Set
是一个java.util.Set
,那么调用toArray()
会给你一个在CF中很容易访问的数组。
例如
<cfscript>
s = createObject("java", "java.util.HashSet").init();
s.add("foo");
s.add("bar");
s.add("bob");
arr = s.toArray();
writeDump(arr);
</cfscript>
在 TryCF.com 上运行此