在WSO2ESB中使用XSLT介体时出错

时间:2014-05-15 09:00:06

标签: xslt wso2 transform wso2esb

我正在使用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)

有人可以帮我解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

变化

<xsl:template match="//">

<xsl:template match="/">