簡體   English   中英

JBoss Fuse / Apache駱駝不會解析語言js(javascript)的捆綁軟件

[英]JBoss Fuse / Apache camel won't resolve language js (javascript) for bundle

我正在將osgi應用程序部署到JBoss Fuse / Apache Camel,並且javascript語言不想解析。

該錯誤出現在日志中:

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

我最近在.choice()語句中添加了.javaScript()表達式定義:

.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>

其中駱駝版本是2.10.0.redhat-60024

有沒有辦法解決這個問題?

並且您已經安裝了功能

features:install camel-script

對於javascript,可能有一種特殊的命名方式,類似於:

features:install camel-script-javascript

問題是由於未注冊JavaScript語言。

我修改了一些在servicemix nabble上找到的代碼,以確保JavaScript引擎已注冊並且具有鍵(語言名稱) js而不是ECMAScript

groovy (而不是Groovy )也是如此,盡管請注意:這部分未經測試。

怎么修:

  1. 從此頁面復制Activator代碼,並將其作為新類添加到您的項目中。

  2. 修改BundleLanguageResolverregister()方法,如下所示:

     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> 

也許還有另一種解決方案,但與此同時這對我有用。

暫時(我正在使用Camel 2.16.5)將Google的scriptengine作為依賴項可以解決問題:

<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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM