JBoss的保险丝/ Apache的骆驼会不会解决包的js语言(JavaScript的) [英] JBoss Fuse / Apache camel won't resolve language js (javascript) for bundle
问题描述
我部署一个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
),但请注意:这部分是未经测试。 p>
如何解决:
-
复制
激活
code从<一个href=\"http://servicemix.396122.n5.nabble.com/help-How-to-use-javascript-with-camel-in-ServiceMix-td5718477.html\"相对=nofollow>此页面并将其添加为项目中的新类。 -
修改
寄存器()
方法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);
}
} -
在你刚生成(如
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:
Copy the
Activator
code from this page and add it as a new class in your project.Modify the
register()
method inBundleLanguageResolver
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); } }
Add the class you just created (e.g.
com.my.Activator
) to the manifest as aBundle-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屋!