Groovy在SoapUI响应中从XML获取节点值
我尝试从Groovy在SoapUI响应中从XML获取节点值,xml,groovy,soapui,xmlslurper,Xml,Groovy,Soapui,Xmlslurper,我尝试从SoapUI中的Groovy脚本中的XML响应中获取节点值。XML文件示例: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns2:validateSignatureResponse xmlns:ns2="http://validation.dss.esig.europa.eu/" xmlns:ns3="http://d
SoapUI
中的Groovy
脚本中的XML
响应中获取节点值。XML文件示例:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:validateSignatureResponse xmlns:ns2="http://validation.dss.esig.europa.eu/" xmlns:ns3="http://dss.esig.europa.eu/validation/diagnostic" xmlns:ns4="http://dss.esig.europa.eu/validation/simple-report" xmlns:ns5="http://dss.esig.europa.eu/validation/detailed-report">
<WSReportsDTO>
<ns3:diagnosticData>
<ns3:DocumentName>testSigned.pdf</ns3:DocumentName>
<ns3:ValidationDate>2019-08-08T09:54:34</ns3:ValidationDate>
<ns3:Signatures>
<ns3:Signature Id="id-547ee2a04f4daf63g7e8g784b9920188719ca1f589e514egeg4573c1d1e0ea697b">
<ns3:SignatureFilename>testSigned.pdf</ns3:SignatureFilename>
<ns3:DateTime>2017-07-05T14:34:34</ns3:DateTime>
<ns3:SignatureFormat>PAdES-BASELINE-T</ns3:SignatureFormat>
<ns3:StructuralValidation>
<ns3:Valid>true</ns3:Valid>
</ns3:StructuralValidation>
我收到错误消息:
groovy.lang.MissingMethodException:没有方法的签名:
Script23.$()适用于参数类型:
(Script23$\u运行\u结束1)值:[Script23$\u运行_closure1@1e6835]
可能的解决方案:is(java.lang.Object)、run()、run()、any(),
使用([Ljava.lang.Object;),第13行的任何(groovy.lang.Closure)错误
之后,我尝试使用这段代码,并没有得到任何错误消息,但执行后属性值为空
def slurped = new XmlSlurper().parseText(response);
def indication = slurped.diagnosticData.Signatures.StructuralValidation.Valid;
我也以不同的形式尝试了同样的方法:
def code = new XmlSlurper().parseText(xml)
.Body
.validateSignatureResponse
.WSReportsDTO
.diagnosticData
.Signatures
.Signature
.StructuralValidation
.Valid
.text()
您可以使用GPath(Groovy的XPath等价物)直接进入元素,而不是在层次结构中导航:
def response = '''
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:validateSignatureResponse xmlns:ns2="http://validation.dss.esig.europa.eu/" xmlns:ns3="http://dss.esig.europa.eu/validation/diagnostic" xmlns:ns4="http://dss.esig.europa.eu/validation/simple-report" xmlns:ns5="http://dss.esig.europa.eu/validation/detailed-report">
<WSReportsDTO>
<ns3:diagnosticData>
<ns3:DocumentName>testSigned.pdf</ns3:DocumentName>
<ns3:ValidationDate>2019-08-08T09:54:34</ns3:ValidationDate>
<ns3:Signatures>
<ns3:Signature Id="id-547ee2a04f4daf63g7e8g784b9920188719ca1f589e514egeg4573c1d1e0ea697b">
<ns3:SignatureFilename>testSigned.pdf</ns3:SignatureFilename>
<ns3:DateTime>2017-07-05T14:34:34</ns3:DateTime>
<ns3:SignatureFormat>PAdES-BASELINE-T</ns3:SignatureFormat>
<ns3:StructuralValidation>
<ns3:Valid>true</ns3:Valid>
</ns3:StructuralValidation>
</ns3:Signature>
</ns3:Signatures>
</ns3:diagnosticData>
</WSReportsDTO>
</ns2:validateSignatureResponse>
</soap:Body>
</soap:Envelope>
'''
def parsedXML = new XmlSlurper().parseText(response)
def status = parsedXML.'**'.findAll { it.name() == 'Valid' }
println(status)
def响应=“”
testSigned.pdf
2019-08-08T09:54:34
testSigned.pdf
2017-07-05T14:34:34
PAdES-BASELINE-T
符合事实的
'''
def parsedXML=new XmlSlurper().parseText(响应)
def status=parsedXML.'**'.findAll{it.name()=='Valid'}
println(状态)
请参阅,以获得温和的介绍
def response = '''
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:validateSignatureResponse xmlns:ns2="http://validation.dss.esig.europa.eu/" xmlns:ns3="http://dss.esig.europa.eu/validation/diagnostic" xmlns:ns4="http://dss.esig.europa.eu/validation/simple-report" xmlns:ns5="http://dss.esig.europa.eu/validation/detailed-report">
<WSReportsDTO>
<ns3:diagnosticData>
<ns3:DocumentName>testSigned.pdf</ns3:DocumentName>
<ns3:ValidationDate>2019-08-08T09:54:34</ns3:ValidationDate>
<ns3:Signatures>
<ns3:Signature Id="id-547ee2a04f4daf63g7e8g784b9920188719ca1f589e514egeg4573c1d1e0ea697b">
<ns3:SignatureFilename>testSigned.pdf</ns3:SignatureFilename>
<ns3:DateTime>2017-07-05T14:34:34</ns3:DateTime>
<ns3:SignatureFormat>PAdES-BASELINE-T</ns3:SignatureFormat>
<ns3:StructuralValidation>
<ns3:Valid>true</ns3:Valid>
</ns3:StructuralValidation>
</ns3:Signature>
</ns3:Signatures>
</ns3:diagnosticData>
</WSReportsDTO>
</ns2:validateSignatureResponse>
</soap:Body>
</soap:Envelope>
'''
def parsedXML = new XmlSlurper().parseText(response)
def status = parsedXML.'**'.findAll { it.name() == 'Valid' }
println(status)