我想使用xslt mediator在wso2 esb中进行xslt转换我写了一个xslt并在浏览器中尝试了它工作正常但是我无法在wso2 esb的xslt介体中调用我的xslt
答案 0 :(得分:1)
答:我总是使用 local-entry 来引用我的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 Mediator的更多文档on the WSO2 ESB Documentation Site: D: XSLT当然也必须映射Soap信封和body(也传递给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>
答案 1 :(得分:0)
WSO2 ESB使用AXIS2作为其底层SOAP引擎。您正试图消除soap标签,这些标签将出现在axis2范围内的消息生命周期中。如果您只需要获取消息正文,请尝试编写自定义类调解器以获取synapse messagecontext的访问权限并使用以下代码片段,该代码片段将返回soapbody的子元素。
messageContext.getEnvelope().getBody().getFirstChildWithName(**)