0

我想使用 xslt 中介器在 wso2 esb 中进行 xslt 转换我写了一个 xslt 并在浏览器中尝试它工作正常但我无法在 wso2 esb 的 xslt 中介器中调用我的 xslt

4

2 回答 2

1

答:我总是使用本地条目来引用我的 XSLT

<?xml version="1.0" encoding="UTF-8"?>
<localEntry xmlns="http://ws.apache.org/ns/synapse" key="myXSLTlocalEntry" src="file:repository/resources/my.xslt"/>

B: XSLT 文件位于以下路径%WSO2_HOME%/repository/resources

C:然后我使用以下命令在序列内调用 XSLT 中介:

<xslt key="myXSLTlocalEntry"/>

有关 XSLT 中介者的更多文档可以在 WSO2 ESB 文档站点上找到: D: XSLT 当然还必须映射 Soap 信封和主体(也传递给 XSLT)。然后 body 元素包含您的有效数据:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="ws.wso2.org/dataservice">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="/">
        <xsl:apply-templates select="*"/>
    </xsl:template>

    <xsl:template match="soapenv:Envelope|soapenv:Body">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="ds:Entries">
        <!-- DO YOUR TRANFORMATION HERE -->
        <xsl:apply-templates select="*"/>
    </xsl:template>

    <xsl:template match="*|text()|@*">
        <xsl:copy>
            <xsl:apply-templates select="*|text()|@*"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
于 2012-08-27T11:44:21.027 回答
0

WSO2 ESB 使用 AXIS2 作为其底层 SOAP 引擎。在这里,您试图消除肥皂标签,这些标签将出现在 axis2 范围内的消息生命周期中。如果您只需要获取消息正文,请尝试编写自定义类中介来访问突触消息上下文并使用以下代码片段,这将返回soapbody 的子元素。

 messageContext.getEnvelope().getBody().getFirstChildWithName(**)
于 2012-08-27T14:53:56.940 回答