簡體   English   中英

Groovy在SoapUI響應中從XML獲取節點值

[英]Groovy to get node values from XML in SoapUI response

我嘗試在SoapUIGroovy腳本中從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>

我嘗試使用XmlSlurper ,如下所示:

def slurped = new XmlSlurper().parseText(response);
def status = ${slurped.'ns3:diagnosticData'.'ns3:Signatures'.'ns3:StructuralValidation'.'ns3:Valid'};

我收到錯誤消息:

groovy.lang.MissingMethodException:方法的無簽名:Script23。$()適用於參數類型:(Script23 $ _run_closure1)值:[Script23 $ _run_closure1 @ 1e6835]可能的解決方案:is(java.lang.Object),run( ),run(),any(),use([Ljava.lang.Object;),any(groovy.lang.Closure)錯誤在第13行:

之后,我嘗試使用此代碼,但未收到任何錯誤消息,但執行后屬性值為空。

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()

您可以使用Groovy等效於XPath的GPath直接進入您的元素,而不用遍歷層次結構:

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)

請參閱Groovy Goodness:使用GPath進行導航,以進行簡要介紹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM