2016-03-16 2 views
1

У меня есть вариант использования, где я определил все мои константы в одном классе.Весной интеграции, как использовать константу Util в канале маршрутизатора

public class MyExampleConstants { 
    public static String FOO1 = "hulcSmash"; 
    public static String FOO2 = "billionairePlayBoy"; 
    public static String FOO3 = "capShield"; 
} 

Сейчас я использую что-то вроде этого в routerChan для значений отображения:

//using exact string match in mapping value, however, want to see if the constants be used here. 
<int:router input-channel="powRouterChan" resolution-required="false" expression="payload.avengersVO.powType" default-output-channel="flowEndPoint"> 
    <int:mapping value="hulcSmash" channel="avengersHulcChan" /> 
    <int:mapping value="billionairePlayBoy" channel="avengersIRManChan" /> 
    <int:mapping value="capShield" channel="avengersCapAmericaChan" /> 
</int:router> 

и маршрутизатор expresstions что-то вроде этого:

//Now these placeholders are being configured in properties 
<int:router input-channel="channelABC" expression=" !payload.avengersVO.powType.equals('${avengers.hulc.smash}') 
    and !payload.avengersVO.powType.equals('${avengers.billionaire.PlayBoy}') 
    and !payload.avengersVO.powType.equals('${avengers.capShield}') ? 'flowEndpoint' : 'civilWarsChan'"/> 

Теперь я добавил мой константы в мой контекст и хотим использовать их в моем канале маршрутизатора в качестве значений отображения:

<util:constant id="foo1" static-field="com.marvel.avengers.hulc.util.MyExampleConstants.FOO1"/> 
<util:constant id="foo2" static-field="com.marvel.avengers.hulc.util.MyExampleConstants.FOO2"/> 
<util:constant id="foo3" static-field="com.marvel.avengers.hulc.util.MyExampleConstants.FOO3"/> 

<int:router input-channel="powRouterChan" resolution-required="false" expression="payload.avengersVO.powType" default-output-channel="flowEndPoint"> 
    <int:mapping value="foo1" channel="avengersHulcChan" /> 
    <int:mapping value="foo2" channel="avengersIRManChan" /> 
    <int:mapping value="foo3" channel="avengersCapAmericaChan" /> 
</int:router> 

и хотите обновить выражение выше что-то вроде этого, используя константы, которые я упомянутых выше:

<int:router input-channel="channelABC" expression=" !payload.avengersVO.powType.equals('foo1') 
    and !payload.avengersVO.powType.equals('foo2') 
    and !payload.avengersVO.powType.equals('foo3') ? 'flowEndpoint' : 'civilWarsChan'"/> 

Пожалуйста suggust, как я могу использовать это. Заранее спасибо.

ответ

1

Вы можете сделать это непосредственно в исходном отображении маршрутизатора, используя T оператора:

<int:router input-channel="powRouterChan" resolution-required="false" expression="payload.avengersVO.powType" default-output-channel="flowEndPoint"> 
    <int:mapping value="#{T(com.marvel.avengers.hulc.util.MyExampleConstants).FOO1}" channel="avengersHulcChan" /> 
    ... 
</int:router> 

или используя статический:

<int:router input-channel="powRouterChan" resolution-required="false" expression="payload.avengersVO.powType" default-output-channel="flowEndPoint"> 
    <int:mapping value="#{foo1}" channel="avengersHulcChan" /> 
    ... 
</int:router> 

Если вы должны сделать это в выражении какой-то причине , используйте @foo1, где @ означает ссылку на компонент. Но первые два решения более эффективны.

+0

Спасибо @Gary Russell., Он работал !!! :) –

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