在SOAP请求中嵌入XSLT

时间:2013-04-03 07:02:58

标签: xml web-services xslt soap

我正在使用将XML文件导入工作流的软件,然后使用工作流任务将其导出到Web服务。 XML文件类似于:

    <?xml version="1.0"?>
     <NostroEvent>
      <Id>1</Id>
      <AccountNumber>123</AccountNumber>
      <Debit>100</Debit>
     </NostroEvent>

导入文件,我正在编写ExportWS任务的以下SOAP请求,该请求将选择xml的所有标记并将它们发送到Web服务:(还输入了与Web服务的连接配置)在另一部分的那个任务中)

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
     <!--xsl:variable name="nostro">
     <xsl:copy-of select="NostroEvent"></xsl:copy-of>
     </xsl:variable-->
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bmt="http://bmt">
     <soapenv:Header/>
     <soapenv:Body>
      <bmt:insertNostro>
       <bmt:Xml><xsl:copy-of select="NostroEvent"/></bmt:Xml>
      </bmt:insertNostro>
     </soapenv:Body>
    </soapenv:Envelope>
    </xsl:template>
    </xsl:stylesheet>

请注意,insertNostro是web方法,Xml是参数,我从NostroEvent开始传递标记和文本集。但它不起作用。我一直得到一个空指针异常,这意味着Web服务收到一个空字符串。我尝试在顶部使用xsl变量,但它也没用。

1 个答案:

答案 0 :(得分:1)

如果问题是它是XML而不是字符串,请尝试执行以下操作:

<xsl:template match="/">
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bmt="http://bmt">
        <soapenv:Header/>
        <soapenv:Body>
            <bmt:insertNostro>
                <bmt:Xml>
                    <xsl:apply-templates select="NostroEvent" mode="toString"/>
                </bmt:Xml>
            </bmt:insertNostro>
        </soapenv:Body>
    </soapenv:Envelope>
</xsl:template>

<xsl:template match="*" mode="toString">
    &lt;<xsl:value-of select="local-name()"/>&gt;<xsl:apply-templates select="child::node()" mode="toString"></xsl:apply-templates>&lt;<xsl:value-of select="local-name()"/> /&gt;
</xsl:template>