0

我试着做这样的:

<bean id="xsl1" class="com.transformation.XsltPayloadTransformer">
    <property name="xslResource" value="#xpath('/root/someNode/text()', payload)">
</bean>

但它不起作用。

另外,我正在尝试这个:

<si:header-enricher id="environmentHeaderEnricher"
    input-channel="inputChannel"
    output-channel="prepareChannel">
  <!-- <si-xml:header name="environment" xpath-expression-ref="environmentXpathExpression"/> -->
  <si:header name="environment" expression="#xpath(payload, '/message/xslt', 'string')"/>
</si:header-enricher>
.....

    <bean id="xsl1" class="transformation.XsltPayloadTransformer">
        <property name="xslResource" value="#{headers.get('environment')}">
    </bean>

我得到:

原因:org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): 在“org.springframework.beans.factory.config.BeanExpressionContext”类型的对象上找不到属性或字段“headers” - 可能不是公共的? 在 org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:215) 在 org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:85)

4

1 回答 1

0

Bean Definition SpEL实际上,您误解了和之间的区别Spring Integration Runtime SpEL

任何<bean>SpEL 在应用程序启动阶段仅工作一次,并且仅适用于 Bean Factory 环境。

Spring Integration SpEL 在运行时对每个组件调用起作用,并Message在大多数情况下用作根对象。当消息到达组件时,每次都会执行这些表达式。例如,您的environment标头将填充到每个入站消息的出站消息,结果将基于当前payload请求消息。

由于xsl1bean 仅在初始化阶段应用 SpEL 结果headers,因此当前BeanFactory上下文中没有属性。

请阅读 Spring Framework Reference Manual 中有关 bean 定义阶段的 SpEL 以及其手册中 Spring Integration 中有关 Runtime SpEL 的更多信息。

现在试着解释你想要达到的目标。

于 2014-09-05T09:34:04.853 回答