1

很抱歉向我之前的一个在 sopaUI 中使用 Groovy 脚本 - 将 XML 持有者的内容复制到另一个(尝试克隆 SOAP 请求测试步骤)

在我之前的问题中,我刚刚意识到我错过了提及我对 CDATA 的担忧……我认为这可能会误导其他人了解我真正关心的是什么。我的错!!

重申我所做的。

肥皂请求(原始)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">
   <soapenv:Header/>
   <soapenv:Body>
      <idm:request>
         <idm:dataset-searches>
            <idm:profile-name></idm:profile-name>
         </idm:dataset-searches>
         <idm:individual-name>
            <idm:family-name>ABC</idm:family-name>
            <idm:first-given-name>DEF</idm:first-given-name>
         </idm:individual-name>
         <idm:date-of-birth>1985-12-12</idm:date-of-birth>
      </idm:request>
   </soapenv:Body>
</soapenv:Envelope>

我的 Groovy 脚本如下

def grUtils = new com.eviware.soapui.support.GroovyUtils(context)
def ReqHolder2 = grUtils.getXmlHolder("Modified#Request")

ReqHolder2.removeDomNodes("//idm:request")
ReqHolder2.updateProperty()

ReqHolder2 ["//soapenv:Body"] = context.expand( '${Original#Request#//idm:request}' )
ReqHolder2.updateProperty()

当我执行上述 groovy 脚本时,修改后的请求会使用原始请求中的内容进行更新,但更新后的内容在 CDATA 中并引用了架构。

SoapRequest(修改)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">
   <soapenv:Header/>
   <soapenv:Body>***<![CDATA[<idm:request xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">***
         <idm:dataset-searches>
            <idm:profile-name/>
         </idm:dataset-searches>
         <idm:individual-name>
            <idm:family-name>ABC</idm:family-name>
            <idm:first-given-name>DEF</idm:first-given-name>
         </idm:individual-name>
         <idm:date-of-birth>1985-12-12</idm:date-of-birth>
      </idm:request>**]]>**</soapenv:Body>
</soapenv:Envelope>

您能否建议我如何避免在 CDATA 中更新 XML。而是正确更新 XML。友善的建议。

4

1 回答 1

1

将修改后的请求更改为:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"   xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">
   <soapenv:Header/>
   <soapenv:Body>${test123}</soapenv:Body>
</soapenv:Envelope>

并将您的常规更改为:

def grUtils = new com.eviware.soapui.support.GroovyUtils(context)
def ReqHolder2 = grUtils.getXmlHolder(context.expand( '${Original#Request#//idm:request}' ))
context.setProperty("test123", ReqHolder2.getXml())

testRunner.runTestStepByName( "Modified")

log.info(grUtils.getXmlHolder(context.expand( '${Modified#Request}')).getPrettyXml())

如果您将日志复制并粘贴到文本编辑器中,您将看到:

Wed Jul 25 13:11:20 MDT 2012:INFO:<soapenv:Envelope     xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">
   <soapenv:Header/>
   <soapenv:Body>
      <idm:request>
         <idm:dataset-searches>
            <idm:profile-name/>
         </idm:dataset-searches>
         <idm:individual-name>
            <idm:family-name>ABC</idm:family-name>
            <idm:first-given-name>DEF</idm:first-given-name>
         </idm:individual-name>
         <idm:date-of-birth>1985-12-12</idm:date-of-birth>
      </idm:request>
   </soapenv:Body>
</soapenv:Envelope>
于 2012-07-25T19:15:42.077 回答