Java Spring WS-transformingInterceptor XSLT复制请求

Java Spring WS-transformingInterceptor XSLT复制请求,java,spring,web-services,soap,Java,Spring,Web Services,Soap,我试图修改进入SpringWS-webservice的SOAP请求。我使用转换拦截器来转换文档,但不是修改现有值,而是使用修改后的值发出重复请求 以下是我的XSLT代码(仅限于xsl版本1.0): SOAP请求示例: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header /> <soapenv:Body>

我试图修改进入SpringWS-webservice的SOAP请求。我使用转换拦截器来转换文档,但不是修改现有值,而是使用修改后的值发出重复请求

以下是我的XSLT代码(仅限于xsl版本1.0):


SOAP请求示例:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header />
   <soapenv:Body>
      <LinkRequest>
         <PayorFirstName>Jimmy</PayorFirstName>
         <PayorLastName>Test</PayorLastName>
         <Description>Some top secret test</Description>
         <CustomMessage>Eat it, Yoshi</CustomMessage>
      </LinkRequest>
   </soapenv:Body>
</soapenv:Envelope>

吉米
试验
一些绝密测试
吃吧,Yoshi
以及转换后请求的外观:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header />
   <soapenv:Body>
      <LinkRequest>
         <PayorFirstName>Jimmy</PayorFirstName>
         <PayorLastName>Test</PayorLastName>
         <Description>Some top secret test</Description>
         <CustomMessage>Eat it, Yoshi</CustomMessage>
      </LinkRequest>
      <LinkRequest>
         <PayorFirstName>Jimmy</PayorFirstName>
         <PayorLastName>Test</PayorLastName>
         <Description>Some top secret test</Description>
         <CustomMessage>Eat it, Cannot do that here</CustomMessage>
      </LinkRequest>
   </soapenv:Body>
</soapenv:Envelope>

吉米
试验
一些绝密测试
吃吧,Yoshi
吉米
试验
一些绝密测试
吃了它,不能在这里做

我想在请求中搜索一个单词的所有实例(在本例中为“Yoshi”),并将这些实例替换为其他实例(在本例中为“此处不能这样做”)

当我将样式表应用于输入XML时,它会生成以下XML,因此我认为您的XSLT是正确的,但捕获它并写回结果的代码可能会再次将其插入正文中

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header />
  <soapenv:Body>
    <LinkRequest>
      <PayorFirstName>Jimmy</PayorFirstName>
      <PayorLastName>Test</PayorLastName>
      <Description>Some top secret test</Description>
      <CustomMessage>Eat it, Cannot do that here</CustomMessage>
    </LinkRequest>
  </soapenv:Body>
</soapenv:Envelope>

谢谢你的帮助。我发现了同样的东西,离线测试,它按预期工作,但一旦它被实现到Web服务中,它就失败了。但是我会使用xslt来更好地实现,尽管它不能解决问题。@Orin可能是一个好主意,可以问一个关于这一部分的新的Java/spring专用问题,解释并显示用于调用样式表的代码,这可能会对此有所帮助。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header />
  <soapenv:Body>
    <LinkRequest>
      <PayorFirstName>Jimmy</PayorFirstName>
      <PayorLastName>Test</PayorLastName>
      <Description>Some top secret test</Description>
      <CustomMessage>Eat it, Cannot do that here</CustomMessage>
    </LinkRequest>
  </soapenv:Body>
</soapenv:Envelope>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:strip-space elements="*" />

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="text()[parent::*[not(namespace-uri(.) = 'http://schemas.xmlsoap.org/soap/envelope/')]]">
        <xsl:call-template name="string-replace-all">
            <xsl:with-param name="text" select="." />
            <xsl:with-param name="replace" select="'Yoshi'" />
            <xsl:with-param name="by" select="'Cannot do that here'" />
        </xsl:call-template>
    </xsl:template>

</xsl:stylesheet>