0

我有一个包含以下方法的 javascript 文件 myscript.js:

function getName(){
  return "Paul Simon"
}

现在,我想从我的路由中调用这个方法。我期待使用资源构造可以在一条指令中加载脚本并在后续指令中调用该方法。类似于:

from("restlet:/Bookmarkee/boolean/v3?restletMethods=POST&restletBinding=#restletBinding")
            .routeId("/Bookmarkee/boolean/v3?restletMethods=POST")
            .to("language:javascript:resource:file:/C:/Users/max777/AppData/Local/Temp/7009839156674102420/myscript.js")
            .to("language:javascript:getName()").to("mock:result");

但是,这是行不通的。我不断得到:

引起:sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:“getName”未定义。(#1)

我究竟做错了什么?

我可以看到骆驼在日志中说它找到了文件:

读取资源:file:/C:/Users/max777/AppData/Local/Temp/8119222516029335972/myscript.js 进入内容缓存使用资源:file:/C:/Users/max777/AppData/Local/Temp/8119222516029335972/myscript来自内容缓存的.js 脚本评估结果为:sun.org.mozilla.javascript.internal.InterpretedFunction@707d7290

因此,我无法理解以下两个端点之间的语义差异是什么。在语法上,我只删除了第二个中的“资源”一词:

to("language:javascript:resource:file:/C:/Users/max777/AppData/Local/Temp/7009839156674102420/myscript.js")
to("language:javascript:file:/C:/Users/max777/AppData/Local/Temp/7009839156674102420/myscript.js")
4

1 回答 1

0

将 JavaScript 复制myscript.js到类路径(在我的情况下,这是scripts目录)并更改它以便getName被调用:

function getName(){
    return "Nirvana"
}

getName();

以下路线对我有用:

public void configure() {

    // using the javaScript method
    from("direct:start1")
        .setHeader("myHeader")
        .javaScript("resource:classpath:scripts/myscript.js")
        .log("start1: header = ${header.myHeader}");

    // using the language tag
    from("direct:start2")
        .setHeader("myHeader")
        .language("javascript", "resource:classpath:scripts/myscript.js")
        .log("start3: header = ${header.myHeader}");

    // hack alert: transform=true replaces the body which later is read in the simple method
    from("direct:start3")
        .to("language:javascript:classpath:scripts/myscript.js?transform=true")
        .setHeader("myHeader")
        .simple("${body}")
        .log("start2: header = ${header.myHeader}");

}

而不是从classpath,file或读取文件http

编辑

在 Camel 2.10.X 中,您可以使用classpath:scripts/myscript.js. 对于 Camel 版本 >= 2.11.X,您必须使用resource:classpath:scripts/myscript.js.

于 2014-02-22T20:10:19.180 回答