Передача свойств SoapUI и форматирование чисел xpath / xquery - PullRequest
1 голос
/ 15 июня 2011

У меня есть этот перенос свойства в SoapUI:

declare namespace soapEnv="http://schemas.xmlsoap.org/soap/envelope/";
//soapEnv:Body/LoginResponse/baseSequenceId

и, допустим, он возвращает 123456 .Но я хочу 123457 (что я получаю +1)

Я пробовал это:

declare namespace soapEnv="http://schemas.xmlsoap.org/soap/envelope/";
//soapEnv:Body/LoginResponse/baseSequenceId + 1

, но в результате получаю 123457.0 .Я попробовал некоторые методы переформатирования, которые нашел, но, скорее всего, я не использовал их правильно.Я новичок в этом деле.

Я также попробовал это (с xquery):

declare namespace soapEnv="http://schemas.xmlsoap.org/soap/envelope/";
let $x := //soapEnv:Body/LoginResponse/baseSequenceId
return $x

и попробовал несколько вещей с $ x , но все, что я пытался, заканчивалось нулем или InvocationTargetException.

Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Большое спасибо за ваши предложения, хотя я не смог заставить их работать: (
Возможно, что-то не так с моим SoapUI, потому что все функции xpath возвращают нуль ..

Я заставил его работатьGroovy:

groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )

loginResponse = groovyUtils.getXmlHolder("Login#Response")
loginResponse.declareNamespace( "soapEnv", "http://schemas.xmlsoap.org/soap/envelope/" )
sessionIdStr = loginResponse.getNodeValue( "//soapEnv:Body/LoginResponse/sessionId" )
baseSequenceIdStr = loginResponse.getNodeValue( "//soapEnv:Body/LoginResponse/baseSequenceId" )
sequenceIdStr = (baseSequenceIdStr.toInteger() + 1).toString()

createRequest = groovyUtils.getXmlHolder("Create#Request")
createRequest.declareNamespace( "soapEnv", "http://schemas.xmlsoap.org/soap/envelope/" )
createRequest.setNodeValue( "//soapEnv:Header/SessionId", sessionIdStr )
createRequest.setNodeValue( "//soapEnv:Header/TransactionId", baseSequenceIdStr )
createRequest.setNodeValue( "//soapEnv:Header/SequenceId", sequenceIdStr )
createRequest.updateProperty()
1 голос
/ 15 июня 2011

Обратите внимание, что если значение //soapEnv:Body/LoginResponse/baseSequenceId + 1 является целым числом, XPath не следует вводить десятичную точку при преобразовании его в строку.

Но, возможно, в этом случае XPathвозвращая число, и именно SoapUI преобразует его в строку и использует десятичную точку.

Сначала я бы попытался (обновлено) :

string(//soapEnv:Body/LoginResponse/baseSequenceId + 1)

Thisчтобы заставить преобразование в строку происходить в XPath, чтобы у SoapUI не было возможности сделать что-нибудь смешное с числовым значением.

В качестве альтернативы вы можете попробовать

floor(//soapEnv:Body/LoginResponse/baseSequenceId + 1)

или даже

string(floor(...))

Если это не сработает, вы можете попробовать

substring-before(//soapEnv:Body/LoginResponse/baseSequenceId + 1, '.')

Это не очень элегантно, но может сработать.

...