JBoss的保险丝/ Apache的骆驼会不会解决包的js语言(JavaScript的) [英] JBoss Fuse / Apache camel won't resolve language js (javascript) for bundle

查看:186
本文介绍了JBoss的保险丝/ Apache的骆驼会不会解决包的js语言(JavaScript的)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我部署一个OSGi应用程序到JBoss保险丝/ Apache的骆驼和JavaScript语言并不想解决的问题。

出现在日志中此错误:

 错误| BluePrinntContainerImpl |捆绑我的服务正在等待相关性
[(及(语言= JS)(objectClass的= org.apache.camel.spi.LanguageResolver))]

我最近增加了一个 .javaScript()前pression定义一个 .choice()语句

  .choice()
    。什么时候()
    .javaScript(request.body.updateSeq> exchange.getProperty('prevUpdateSeq')+ 1)
    。做某事)

Maven的:

 <&依赖性GT;
        <&的groupId GT; org.apache.camel< /的groupId>
        <&的artifactId GT;骆驼脚本< / artifactId的>
        <&版GT; $ {camel.version}< /版本>
    < /依赖性>

在哪里骆驼的版本是 2.10.0.redhat-60024

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


解决方案

该问题是由于未注册的JavaScript语言。

我修改了一些code我在ServiceMix的nabble确保JavaScript引擎注册发现有钥匙(语言名称) JS 而不是<$ C的$ C>的ECMAScript 。

也是一样的常规(而不是的Groovy ),但请注意:这部分是未经测试

如何解决:


  1. 复制激活 code从<一个href=\"http://servicemix.396122.n5.nabble.com/help-How-to-use-javascript-with-camel-in-ServiceMix-td5718477.html\"相对=nofollow>此页面并将其添加为项目中的新类。


  2. 修改寄存器()方法 BundleLanguageResolver 如下:

     公共无效寄存器(){
        尝试
        {
            String语言= factory.getLanguageName();        //哈克正确注册语言
            如果(ECMAScript的.equals(语言))LANGUAGE =JS;
            如果(常规.equals(语言))LANGUAGE =常规;        哈希表&LT;弦乐,对象&gt;性能=
                    新的Hashtable&LT;弦乐,对象&gt;();        properties.put(语言,语言);        章= bundle.getBundleContext()。registerService(
                    LanguageResolver.class,
                    新ScriptLanguageResolver(),属性);        LOG.debug(注册LanguageResolver:+语言);
        }赶上(例外五)
        {
            LOG.warn(无法注册LanguageResolver:+ e.getClass()的getName(),E);
        }
    }


  3. 在你刚生成(如 com.my.Activator )将表现为一个束激活类。在Maven的束线插件可以是这样的:

     &LT;束激活&GT; com.my.Activator&LT; /束激活&GT;


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

I am deploying an osgi application to JBoss Fuse / Apache Camel and the javascript language doesn't want to resolve.

This error appears in the log:

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

I recently added a .javaScript() expression definition to a .choice() statement:

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

Maven:

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

Where camel version is 2.10.0.redhat-60024.

Is there a way to fix this?

解决方案

The problem is due to the javascript language not being registered.

I modified some code I found on servicemix nabble to make sure the javascript engine is registered and has the key (language name) js instead of ECMAScript.

Same goes for groovy (instead of Groovy), although please note: this part is untested.

How to fix:

  1. Copy the Activator code from this page and add it as a new class in your project.

  2. Modify the register() method in BundleLanguageResolver as follows:

    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. Add the class you just created (e.g. com.my.Activator) to the manifest as a Bundle-Activator. The maven-bundle-plugin line can look like this:

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

Perhaps there is another solution, but in the meantime this works for me.

这篇关于JBoss的保险丝/ Apache的骆驼会不会解决包的js语言(JavaScript的)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆