我正在使用wso2esb4.8.0我想转换数据但无法做到
我正在收到这样的消息输入
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:env="http://eai.parn.getv/Envelope" xmlns:open="http://www.openuri.org/" xmlns:gg="http://eai.par.getv/mm">
<soapenv:Header />
<soapenv:Body>
<open:clientRequest>
<env:EaiEnvelope>
<env:GenTimeStamp>1</env:GenTimeStamp>
<env:SentTimeStamp>1</env:SentTimeStamp>
<env:Payload>
<gg:mm>
<gg:Request>
<gg:Operation_Name>dd</gg:Operation_Name>
</gg:Request>
</gg:mm>
</env:Payload>
</env:EaiEnvelope>
</open:clientRequest>
</soapenv:Body>
</soapenv:Envelope>
但是我的适配器endggt将允许这种格式的请求。如果它是一个操作,我可以按照有效负载调解器发出我的请求,但那些是请求,所以endggt允许请求是
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:open="http://www.openuri.org/" xmlns:gg="http://eai.par.getv/mm">
<soapenv:Header/>
<soapenv:Body>
<open:dd>
<gg:mm>
<gg:Request>
<gg:Operation_Name>dd</gg:Operation_Name>
</gg:Request>
</gg:mm>
</open:dd>
</soapenv:Body>
</soapenv:Envelope>
只需提取Operation_Name
并将其添加为复杂元素,但我无法执行此操作我正在尝试代理此类
代理是
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="ProxyPOC8"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property xmlns:open="http://www.openuri.org/"
xmlns:ns="http://org.apache.synapse/xsd"
xmlns:env="http://eai.parn.getv/Envelope"
xmlns:gg="http://eai.par.getv/mm"
name="payloadvalue"
expression="//env:Payload/*"
scope="default"
type="STRING"/>
<property xmlns:open="http://www.openuri.org/"
xmlns:ns="http://org.apache.synapse/xsd"
xmlns:env="http://eai.parn.getv/Envelope"
name="operation_name"
expression="concat('open:',get-property('Operation_Name'))"
scope="default"
type="STRING"/>
<xslt key="sample2.xslt">
<property name="operation_name" expression="get-property('operation_name')"/>
<property name="payloadvalue" expression="get-property('payloadvalue')"/>
</xslt>
<log level="full">
<property name="Message" expression="get-property('AddElement')"/>
</log>
</inSequence>
</target>
<description/>
</proxy>
XSLT样式表就像这样写的
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:open="http://www.openuri.org/" xmlns:env="http://eai.parn.getv/Envelope" xmlns:gg="http://eai.par.getv/mm" version="1.0">
<xsl:param name="operation_name"></xsl:param>
<xsl:param name="payloadvalue"></xsl:param>
<xsl:template match="//">
<xsl:element name="{$operation_name}">
<xsl:value-of select="$payloadvalue"></xsl:value-of>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
日志显示错误
ProxyPOC8 {super-tenant}
[2014-05-15 14:23:53,314] INFO - ProxyService成功为代理服务创建Axis2服务:ProxyPOC8
[2014-05-15 14:24:01,217]错误 - XSLTMediator样式表解析中发生致命错误:net.sf.saxon.trans.XPathException:意外的令牌&#34;&#34;在路径表达中 [2014-05-15 14:24:01,262]错误 - XSLTMediator使用以下方法创建XSLT转换器时出错:值{name =&#39; null&#39;,keyValue =&#39; sample2.xslt&#39;}
javax.xml.transform.TransformerConfigurationException:无法编译样式表。检测到1个错误。
在net.sf.saxon.PreparedStylesheet.prepare(PreparedStylesheet.java:220) at net.sf.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:132)
在org.apache.synapse.mediators.transform.XSLTMediator.createTemplate(XSLTMediator.java:383)
有人可以帮我解决这个问题吗?
提前致谢。
答案 0 :(得分:1)
变化
<xsl:template match="//">
到
<xsl:template match="/">