Доступ к spring bean-компоненту в выражении SpEL, избегая конфликта имен с переменной области действия веб-потока

У меня есть следующий код в веб-потоке:

<action-state id="blah">
   <evaluate result="flowScope.payPageProxyUrl" expression="payPageProxyUrl"/>

где payPageProxyUrl в выражении определяется как Spring bean:

<bean id="payPageProxyUrl" class="java.lang.String">
    <constructor-arg value="payPage/Request"/>
</bean>

похоже, что большую часть времени в потоке flowScope.payPageProxyUrl правильно установлено значение «payPage/Request», однако в некоторых случаях (другие JVM в кластере weblogic) я получаю приведенное ниже исключение, предполагающее, что выражение SpEL «payPageProxyUrl» равно null. Я подозреваю, что SpEL не всегда обращается к bean-компоненту, но что вы думаете и как я могу защититься от этого, не меняя имена bean-компонентов/областей потока?

Вот исключение:

org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing [AnnotatedAction@21634dc0 targetAction = [EvaluateAction@7e85895f expression = payPageProxyUrl, resultExpression = flowScope.payPageProxyUrl], attributes = map[[empty]]] in state 'blah' of flow 'blah-payment' -- action execution attributes were 'map[[empty]]'
    at org.springframework.webflow.execution.ActionExecutor.execute(ActionExecutor.java:60) ~[spring-webflow-2.3.1.RELEASE.jar:2.3.1.RELEASE]

...

Caused by: java.lang.NullPointerException: null
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:88) ~[spring-expression-3.2.6.RELEASE.jar:3.2.6.RELEASE]

person user3738284    schedule 13.06.2014    source источник


Ответы (1)


Почему вы хотите пройти через Spring bean для String, оценить, конструктор строки и т.д.; вы можете просто использовать set as:

    <action-state id="blah">
        <set name="flowScope.payPageProxyUrl" value="'payPage/Request'"/>
        ...
    </action-state> 
person Prasad    schedule 13.06.2014
comment
Привет, Прасад, я хотел бы знать, почему я получаю несовместимый сбой с моим кодом и как этого избежать. Перекодирование может решить проблему, но на данный момент я не понимаю, в чем проблема. - person user3738284; 16.06.2014