2017-01-09 16 views
0

我们在Servicemix 5.4.0(http://servicemix.apache.org/downloads/servicemix-5.4.0.html)中部署了一个应用程序,并且最近尝试升级到Servicemix 6.1.2(http://servicemix.apache.org/downloads/servicemix-6.1.2.html)。我们依赖的一件事是Felix Dependency Manager,特别是'dm wtf'命令(请参阅http://felix.apache.org/documentation/subprojects/apache-felix-dependency-manager/tutorials/leveraging-the-shell.html)。然而之后尝试我们的代码与后来的ServiceMix的,我们得到这样的: -将Servicemix从5.4.0升级到6.1.2后,依存关系管理器命令不工作

[email protected]>dm wtf 
Error executing command: Cannot coerce dm(String) to any of [(CommandSession, boolean, String, boolean, boolean, boolean, String, String, String, String)] 

涉及的版本(当我们运行列表)是: -

76 | Active | 80 | 1.0.10        | Apache Felix MetatypeService 
77 | Active | 80 | 3.2.0        | Apache Felix Dependency Manager 
78 | Active | 80 | 3.2.0        | Apache Felix Dependency Manager Shell 

有没有人试图让菲利克斯与ServiceMix的6.1工作0.2? 有没有人有任何想法,我们可以尝试让这个命令(或等效)的工作?显然阿帕奇菲利克斯这是从降级到4.4.1 4.2.1但Karaf从2.4.1到3.0.7所以不知道,如果我们需要修改我们的功能配置升级: -

<feature name="example-feature" version="X.X.X"> 
       <bundle>mvn:org.apache.felix/org.apache.felix.metatype/1.0.10</bundle> 
       <bundle>mvn:org.apache.felix/org.apache.felix.dependencymanager/3.2.0</bundle> 
       <bundle>mvn:org.apache.felix/org.apache.felix.dependencymanager.shell/3.2.0</bundle> 
</feature> 

回答

1

我一直调试它并发现问题是由DMCommand.dm()方法的参数注释引起的。这个方法的参数是dm命令(wtf,stats,nodeps等)中可用选项的名称,这些参数的注释定义了这些选项应该如何在DMCommand对象中映射(即如果'wtf'存在它应该将布尔值设置为true,但如果不存在,布尔值应该为false)。

在ServiceMix控制台中执行dm wtf命令期间,org.apache.felix.gogo.runtime.Reflective.transformParameters()使用这些注释,通过调用java.lang.reflect.method.getParameterAnnotations(),将命令字符串中的选项值转换为正确值类型和值的数组(即将字符串'wtf'转换为true)。

ServiceMix 6.1.2中的问题是对java.lang.reflect.method.getParameterAnnotations()的调用返回一个空java.lang.annotation.Annotation对象的数组。这意味着org.apache.felix.gogo.runtime.Reflective.transformParameters()中不会发生任何转换,从而导致不正确的参数类型和值('wtf'选项保留为String,而不是转换为布尔值),这意味着我们看到了这个例外;

Cannot coerce dm(String) to any of [(CommandSession, boolean, String, boolean, boolean, boolean, String, String, String, String)] 

根据我目前看到/发现的内容,我没有看到你将如何去做任何事情来解决你的问题。我已经在ServiceMix 5.4.0和6.1.2上使用相同的JDK(1.7.0_79)对此进行了测试,所以它似乎是Karaf和Felix版本变化的一个问题。

+0

感谢Mike,我尝试了Servicemix 5.4.1,并且也看到了同样的问题,因此它看起来像Servicemix 5.4.0和5.4.1之间发生了一些变化,它改变了Felix Dependency Manager的行为,但我认为我们都希望知道我们能做些什么以及如何处理? – RodAllen

相关问题