【问题标题】:How to get java class in CF如何在 CF 中获取 java 类
【发布时间】:2015-02-18 03:08:04
【问题描述】:

我想从我的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,获取所有cookies。所有 cookie 都收集在 Set 变量中并从方法返回。我想在 CF 代码中获取这个 set 变量。

但是当我尝试访问 CF 中 java 方法的 Set 变量时,它不会返回任何值。相比之下,当我注释掉所有 Phantom JS 代码并仅返回一个 String 变量时,CF 可以访问字符串值。 这是我的 CF 代码:

<cfscript>
    paths = arrayNew(1);
    paths[1] = expandPath("lib\apache-mime4j-0.6.jar");
    paths[2] = expandPath("lib\bsh-1.3.0.jar"); 
    paths[3] = expandPath("lib\cglib-nodep-2.1_3.jar");
    paths[4] = expandPath("lib\commons-codec-1.9.jar");
    paths[5] = expandPath("lib\commons-collections-3.2.1.jar");
    paths[6] = expandPath("lib\commons-exec-1.1.jar");
    paths[7] = expandPath("lib\commons-io-2.4.jar");
    paths[8] = expandPath("lib\commons-jxpath-1.3.jar");
    paths[9] = expandPath("lib\commons-lang3-3.3.2.jar");
    paths[10] = expandPath("lib\commons-logging-1.1.3.jar");
    paths[11] = expandPath("lib\Counsel_Cookies_Phantom.jar");
    paths[12] = expandPath("lib\cssparser-0.9.14.jar");
    paths[13] = expandPath("lib\gson-2.3.jar");
    paths[14] = expandPath("lib\guava-18.0.jar");
    paths[15] = expandPath("lib\hamcrest-core-1.3.jar");
    paths[16] = expandPath("lib\hamcrest-library-1.3.jar");
    paths[17] = expandPath("lib\htmlunit-2.15.jar");
    paths[18] = expandPath("lib\htmlunit-core-js-2.15.jar");
    paths[19] = expandPath("lib\httpclient-4.3.4.jar");
    paths[20] = expandPath("lib\httpcore-4.3.2.jar");
    paths[21] = expandPath("lib\httpmime-4.3.4.jar");
    paths[22] = expandPath("lib\ini4j-0.5.2.jar");
    paths[23] = expandPath("lib\jcommander-1.29.jar");
    paths[24] = expandPath("lib\jetty-websocket-8.1.8.jar");
    paths[25] = expandPath("lib\jna-3.4.0.jar");
    paths[26] = expandPath("lib\jna-platform-3.4.0.jar");
    paths[27] = expandPath("lib\junit-dep-4.11.jar");
    paths[28] = expandPath("lib\netty-3.5.7.Final.jar");
    paths[29] = expandPath("lib\nekohtml-1.9.21.jar");
    paths[30] = expandPath("lib\operadriver-1.5.jar");
    paths[31] = expandPath("lib\phantomjsdriver-1.1.0.jar");
    paths[32] = expandPath("lib\protobuf-java-2.4.1.jar");
    paths[33] = expandPath("lib\sac-1.3.jar");
    paths[34] = expandPath("lib\selenium-java-2.44.0.jar");
    paths[35] = expandPath("lib\selenium-java-2.44.0-srcs.jar");
    paths[36] = expandPath("lib\serializer-2.7.1.jar");
    paths[37] = expandPath("lib\testng-6.8.5.jar");
    paths[38] = expandPath("lib\xalan-2.7.1.jar");
    paths[39] = expandPath("lib\xercesImpl-2.11.0.jar");
    paths[40] = expandPath("lib\xml-apis-1.4.01.jar");
    paths[41] = expandPath("lib\Selenium_Cookies.jar");
    paths[42] = expandPath("lib\selenium-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 值的建议。

【问题讨论】:

  • 你的代码有编译时错误:allCookies最后没有定义。
  • 请编辑您的问题以正确缩进您的代码,更正所有拼写错误(是 phontom js?),删除感谢和您的名字。
  • 正如@ArtjomB 所说,该代码不会在 java 中编译,所以要么它不是你的真实代码 - 要么你没有首先验证它实际上在 java 中工作。如果没有,请务必先这样做,因为如果它在 java 中不起作用,那么它肯定也不会在 CF 中起作用。还有1)如果代码什么都不做,为什么要捕获异常?和 2) System.out.println 不会在 CF 的屏幕上显示任何内容。它将输出发送到 CF 日志文件。

标签: java cookies coldfusion selenium-webdriver phantomjs


【解决方案1】:

假设您的 Setjava.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>

Run this on TryCF.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多