Я пытаюсь использовать скрипт Groovy в Spring DSL следующим образом:
<from uri="file://{{my.path}}">
<choice>
<when>
<groovy>properties.resolve 'file.one.isActive' == 'true'</groovy>
<to uri="file://{{file.one}}"/>
</when>
<otherwise>
<to uri="file://{{file.two}}"/>
</otherwise>
</choice>
</from>
Однако я получаю следующее исключение:
Exhausted after delivery attempt:
1 caught: groovy.lang.MissingMethodException:
No signature of method: java.util.LinkedHashMap.resolve()
is applicable for argument types:
(java.lang.Boolean) values: [false]
У меня есть эти зависимости в моем pom.xml:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-script</artifactId>
<version>2.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-groovy</artifactId>
<version>2.13.1</version>
</dependency>
На основе http://camel.apache.org/groovy.html
я должен иметь возможность использовать ссылку на properties
с помощью метода resolve
.
Любая идея, что не так?
Я столкнулся с такой же проблемой, чтобы опубликовать решение для других людей, которые столкнутся с этим в будущем.
Несмотря на информацию в документе camel, в которой говорится, что контекст скрипта предварительно сконфигурирован с атрибутом свойств org.apache.camel.builder.script.PropertiesФункция типа не происходит. Атрибут свойства разрешен для обмена свойствами. Похоже, что это дефект Верблюда (с помощью Camel 2.16.1).
Временное решение:
camelContext.resolvePropertyPlaceholders("{{file.one.isActive}}")
Я думаю, что он оценивает ('file.one.isActive' == 'true') до его разрешения. Лучше разрешить ( 'file.one.isActive' ) == 'true' для ясности