0

我正在将 osgi 应用程序部署到 JBoss Fuse / Apache Camel 并且 javascript 语言不想解决。

此错误出现在日志中:

ERROR | BluePrinntContainerImpl | Bundle my-service is waiting for dependencies
[(&(language=js)(objectClass=org.apache.camel.spi.LanguageResolver))]

我最近在语句中添加了.javaScript()表达式定义.choice()

.choice()
    .when()
    .javaScript("request.body.updateSeq > exchange.getProperty('PrevUpdateSeq') + 1")
    .to("dosomething")

马文:

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-script</artifactId>
        <version>${camel.version}</version>
    </dependency>

骆驼版在哪里2.10.0.redhat-60024

有没有办法解决这个问题?

4

3 回答 3

0

并且您已经安装了这些功能

features:install camel-script

并且可能有一个特殊的 javascript 命名为:

features:install camel-script-javascript
于 2014-01-08T14:31:38.840 回答
0

问题是由于未注册 javascript 语言。

我修改了在 servicemix nabble 上找到的一些代码,以确保 javascript 引擎已注册并且具有密钥(语言名称) js而不是ECMAScript.

groovy(而不是)也是如此Groovy,但请注意:这部分未经测试。

怎么修:

  1. 从此页面复制Activator代码并将其作为新类添加到您的项目中。

  2. 修改register()方法BundleLanguageResolver如下:

    public void register() {
        try
        {
            String language = factory.getLanguageName();
    
            // Hack to register languages correctly
            if ("ECMAScript".equals(language)) language = "js";
            if ("Groovy".equals(language)) language = "groovy";
    
            Hashtable<String, Object> properties =
                    new Hashtable<String, Object>();
    
            properties.put("language", language);
    
            reg = bundle.getBundleContext().registerService(
                    LanguageResolver.class,
                    new ScriptLanguageResolver(), properties);
    
            LOG.debug("Register LanguageResolver: " + language);
        } catch(Exception e)
        {
            LOG.warn("Cannot register LanguageResolver: " + e.getClass().getName(), e);
        }
    }
    
  3. 将您刚刚创建的类(例如com.my.Activator)添加到清单中作为Bundle-Activator. maven-bundle-plugin 行可能如下所示:

    <Bundle-Activator>com.my.Activator</Bundle-Activator>
    

也许还有另一种解决方案,但同时这对我有用。

于 2014-01-09T11:13:53.080 回答
0

暂时(我正在使用 Camel 2.16.5)添加 google 的脚本引擎作为依赖项可以解决问题:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-script</artifactId>
    <version>${camel.version}</version>
</dependency>
<dependency>
    <groupId>com.google.code.scriptengines</groupId>
    <artifactId>scriptengines-javascript</artifactId>
    <version>1.1.1</version>
</dependency>
于 2017-07-17T08:49:05.337 回答