2014-01-08 27 views
0

我將一個osgi應用程序部署到JBoss Fuse/Apache Camel,並且javascript語言不想解析。JBoss Fuse/Apache camel無法解析軟件包的語言js(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") 

Maven的:

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

其中駱駝版本2.10.0.redhat-60024

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

回答

0

的問題是由於沒有被註冊的JavaScript語言。

我修改了一些代碼,我發現在servicemix nabble,以確保JavaScript引擎已註冊並具有密鑰(語言名稱)js而不是ECMAScript

同樣適用於groovy(而不是Groovy),但請注意:這部分未經測試。

如何解決:

  1. 複製Activator代碼this page,並把它添加在你的項目中的新類。

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

    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。行家束,插件線可以是這樣的:

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

也許還有另一種解決方案,但同時這對我的作品。

0

而且你已經安裝的功能

features:install camel-script 

而且有可能是一個特殊的沿的行JavaScript代碼命名的東西:

features:install camel-script-javascript 
+0

克勞斯您好,感謝,我開始有一些問題讓這些功能作爲依賴安裝我自己的功能,所以我手動安裝他們在我的個人資料 - 他們現在安裝,但我仍然得到錯誤。難道這是由於我想知道:http://servicemix.396122.n5.nabble.com/help-How-to-use-javascript-with-camel-in-ServiceMix-td5718477.html org.apache.camel。 script.osgi。Activation in v2.10.0.readhat-60024 is missing'languageResolvers' ... – vikingsteve

+0

好的,我有一個解決方案,這是由於'RhinoScriptEngineFactory'從'getLanguageName()'返回的值不是'js'!它返回'ECMAScript',並且沒有被語言解析器找到。我會整理我的代碼,並在稍後給你看看:) – vikingsteve

+0

歡迎您在Apache Camel上登錄JIRA,以便我們也可以將ECMAScript作爲js名稱進行檢測。 –

0

爲是時間(我用駱駝2.16.5)加入谷歌的的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> 
相關問題