2017-01-09 1 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? Есть ли у кого-нибудь идеи о том, что мы могли бы попытаться заставить эту команду (или ее эквивалент) работать? По-видимому Apache Felix, который был понижен с 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» должен установить значение boolean в true, но если оно не существует, логическое значение должно быть ложным).

Во время выполнения команды ого WTF в ServiceMix консоли, 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' остается как строка, вместо того, чтобы переходить к логическому), что означает мы видим исключение;

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

Исходя из того, что я видел/нашел до сих пор, я не вижу, как вы собираетесь быть в состоянии сделать что-нибудь, чтобы решить эту yourdelf. Я тестировал это на 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

Смежные вопросы