Перенос данных узла в XML-файл из ответа в пользовательском интерфейсе Soap

#xml #groovy #soapui

#xml #groovy #soapui

Вопрос:

Если у меня есть следующий ответ в Soap UI:

 <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <ConvertTempResponse xmlns="http://www.webserviceX.NET/">
      <ConvertTempResult>40</ConvertTempResult>
      </ConvertTempResponse>
   </soap:Body>
</soap:Envelope>
  

Я могу скопировать весь ответ в текстовый файл, используя:

  //create folder and file. 
 createFolder = new File("C:/SOAPUI")  
 createFolder.mkdir()
 file = new File("C:/SOAPUI/test.txt")
 file.createNewFile()

 a = testRunner.testCase.getTestStepByName("Property Transfer")
 responsedata = a.getProperty('transfer')

 file.write(responsedata)
  

Как мне скопировать данные для определенного узла. Например, если требуется только скопировать ’40’. Как я могу этого добиться?

Ответ №1:

Вы можете использовать XmlHolder, а затем применить XPath для получения значения узла, см. Код ниже:

 //create folder and file
createFolder = new File("C:/SOAPUI")  
createFolder.mkdir()
file = new File("C:/SOAPUI/test.txt")
file.createNewFile()

a = testRunner.testCase.getTestStepByName("Property Transfer")
responsedata = a.getProperty('transfer')

// create an XmlHolder
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
// get the response as string
def responseAsString = responsedata.getProperty('response').getValue()    
def xml = groovyUtils.getXmlHolder(responseAsString)
// get the node value
def nodeValue = xml.getNodeValue("//*:ConvertTempResult")
log.info nodeValue;

file.write(nodeValue)
  

Надеюсь, это поможет,

Комментарии:

1. При использовании приведенного выше кода я получаю следующую ошибку: groovy.lang.MissingMethodException: нет подписи метода: com.eviware.soapui.support.GroovyUtils.getXmlHolder() применяется для типов аргументов: (com.eviware.soapui.impl.wsdl.teststeps. WsdlTestRequestStep$3) значения: [com.eviware.soapui.impl.wsdl.teststeps. WsdlTestRequestStep$3@781081b9] Возможные решения: getXmlHolder(java.lang. Строка) ошибка в строке: 11

2. Извините, я предположил, что ваши responsedata были строкой с ответом, но это тестовый шаг, поэтому вам нужно получить ответ в виде строки, прежде чем работать с XmlHolder. Я обновляю ответ этим изменением :).