0

我试图通过样式表的参数将多个节点集传递到 WSO2 ESB 中的 XSLT 中介器中的 XSLT。但是,当试图引用 XSLT 处理器中传递的参数时,会说这些值是字符串类型。

XSLT 中介配置本身的结构如下:

<xslt key="conf:/Test/TestMapping.xsl">
      <property xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd" name="originalMsg" expression="get-property('OriginalMsg')" />
   </xslt>

在 XSLT 本身中,当传递的参数用于尝试引用此数据中的元素时,例如

<xsl:value-of select="$originalMsg/ns1:Node/ns1:OtherNode"/>

错误报告“/”操作在需要节点集时无法应用于字符串。

我试图传递节点集,它是流程中上一步的消息体,我尝试了各种方法来保存它:

通过丰富调解员:

<enrich>
<source clone="true" type="body" xpath="" property="" />
<target action="replace" type="property" xpath="" property="OriginalMsg" />
</enrich>

通过财产调解员:

<property xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd" name="OriginalMsg" expression="$body" scope="default" type="OM" />

但这并没有奏效。

或者,有没有办法在 ESB 函数中使用 document() 来引用消息上下文数据或其他方法?

4

2 回答 2

1

我通过使用 Enrich 调解器向消息正文中的当前根元素添加额外的 XML 数据层次结构来解决这个问题。

这使得所有不同的数据都可以在 XSLT 中使用。

然后在 XSLT 中介配置中,我将源路径设置为 $body(即消息体)而不是默认值(它是消息体的第一个子项),并在 XSLT 本身中添加了一个 SOAP Body 元素作为根元素。通过这种方式,消息正文的所有子项都被替换为单个目标 XML 结构。

于 2012-04-02T19:52:06.200 回答
0

这是因为在 XSLT 中介代码中:

 private void  applyProperties(Transformer transformer, MessageContext synCtx, SynapseLog synLog) {

    for (MediatorProperty prop : properties) {
        if (prop != null) {
            String value;
            if (prop.getValue() != null) {
                value = prop.getValue();
            } else {
                value = prop.getExpression().stringValueOf(synCtx);
            }
            if (synLog.isTraceOrDebugEnabled()) {
                if (value == null) {
                    synLog.traceOrDebug("Not setting parameter '" + prop.getName() + "'");
                } else {
                    synLog.traceOrDebug("Setting parameter '" + prop.getName() + "' to '"
                            + value + "'");
                }
            }
            if (value != null) {
                transformer.setParameter(prop.getName(), value);
            }
        }
    }

您可以看到该始终是一个字符串。我建议在注入变压器之前为属性添加属性类型。

你怎么看?

于 2012-11-26T11:03:51.077 回答