Динамический адрес для входящей конечной точки HTTP Mule

Я пытаюсь получить динамический адрес для моей входящей конечной точки http для службы SOAP.

<http:inbound-endpoint exchange-pattern="request-response" address="#[app.registry.appversion.getNewAddress()]" doc:name="HTTP"/>

Контекст Spring имеет определение bean-компонента:

<bean id="appversion" class="com.visit.util.Application">

getNewAddress() в классе Application возвращает строку.

Однако он выдает исключение как:

Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'protocol' threw exception; nested exception is java.lang.IllegalArgumentException: Address '#[app.registry.appversion.getNewAddress()]' for protocol 'http' should start with http://
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:102)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393)
... 38 more

Похоже, что MEL не оценивается и рассматривается как буквальная строка. Я что-то пропустил? Любая помощь приветствуется. Заранее спасибо.


person Pratik    schedule 27.04.2015    source источник
comment
Вместо этого попробуйте использовать Spring Expression (SpEL).   -  person David Dossot    schedule 28.04.2015
comment
@DavidDossot, не могли бы вы пояснить, почему, по вашему мнению, SpEL может работать, я предполагаю, что это как-то связано с последовательностью запуска, было бы неплохо, если бы вы могли объяснить это нам.   -  person Sudarshan    schedule 28.04.2015
comment
MEL оценивается не везде, а только там, где это было закодировано. SpEL, поскольку Mule построен на Spring, имеет больше шансов работать в любом атрибуте.   -  person David Dossot    schedule 28.04.2015
comment
@DavidDossot - Спасибо! Это сработало чудесно. <http:inbound-endpoint exchange-pattern="request-response" address="#{appversion.getNewAddress()}" doc:name="HTTP"/> Не знаю, как поставить лайк в комментарии, но спасибо за помощь.   -  person Pratik    schedule 28.04.2015
comment
Я резюмировал эти комментарии как ответ ниже.   -  person David Dossot    schedule 28.04.2015


Ответы (1)


Вместо этого используйте Spring Expression (SPeL):

<http:inbound-endpoint exchange-pattern="request-response"
      address="#{appversion.getNewAddress()}" doc:name="HTTP"/>
person David Dossot    schedule 28.04.2015