2012-10-02 159 views
0

我希望有人可以給我一些xslt問題的指導。我將一個通用的XML消息接收到代理服務中,然後我需要將這個XML包裝在一個soap消息中,並將它轉發給一個axis2 jms服務。wso2 ESB xslt轉換問題

我已經使用saxon和xalan引擎對我的xml進行了stylehseet測試,它們都按預期工作,但wso2不會接受它我得到一個錯誤WstxParsingException:String']]>'不允許在文本內容,如果我有CDATA部分(我需要)。

任何建議,將不勝感激 感謝 保羅

樣式表如下所示

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:klr="http://klr.com"> 
    <xsl:output method="xml" indent="yes" encoding="UTF-8" cdata-section-elements="klr:legaldocument"/> 
    <xsl:template match="/"> 
     <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:klr="http://klr.com"> 
      <SOAP-ENV:Body> 
       <klr:Hypertext> 
        <klr:legaldocument> 
         <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> 
         <xsl:apply-templates select="*"/> 
         <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text> 
        </klr:legaldocument> 
       </klr:Hypertext> 
      </SOAP-ENV:Body> 
     </SOAP-ENV:Envelope> 
    </xsl:template> 
    <xsl:template match="node()"> 
     <xsl:element name="{local-name(.)}"> 
      <xsl:copy-of select="@*"/> 
      <xsl:apply-templates select="node()|*"/> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

回答

0

只是你的第二個模板不起作用。這裏是工作完成的樣式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:klr="http://klr.com"> 
    <xsl:output method="xml" indent="yes" encoding="UTF-8" cdata-section-elements="klr:legaldocument"/> 
    <xsl:template match="/"> 
     <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:klr="http://klr.com"> 
      <SOAP-ENV:Body> 
       <klr:Hypertext> 
        <klr:legaldocument> 
         <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> 
         <xsl:apply-templates select="*"/> 
         <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text> 
        </klr:legaldocument> 
       </klr:Hypertext> 
      </SOAP-ENV:Body> 
     </SOAP-ENV:Envelope> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

For more information see this entry here.

+0

感謝。我恐怕也沒有工作。結果是相同的,實際上當我通過我的薩克斯引擎來產生它時,它會產生重複的cdata部分。我確實通過從xsl:output中移除cdata-section-elements來獲得某種形式的成功。但是現在非常混亂的是,我假設在cdat部分有一些axis soap包裝器,它正在被wso2esb使用,但我不確定 – user1557260

+0

我的輸出是'code' <?xml version ='1.0' encoding ='UTF-8'?> < soapenv:信封的xmlns:soapenv = 「http://schemas.xmlsoap.org/soap/envelope/」> < soapenv: Body> < axis2ns3:text xmlns:axis2ns3 =「http://ws.apache.org/commons/ns/payload」> & lt; Test/& gt; </axis2ns3:文本> </soapenv:身體> </soapenv:信封> 在'代碼' – user1557260

+0

請原諒上一篇文章的拼寫。炸腦。 – user1557260