Groovy & SoapUI - NumberFormatException

Groovy & SoapUI - NumberFormatException

在 SoapUI 中,我能够从 Web 服务获得响应,该响应为我提供了一个字符串 return.

XML Node                     Value
soap:Envelope                           {Envelope}
  soap:Body                             {Body}
    EuroConvertorResponse
      EuroConvertorResult    1.0966     {xsd:string}

我设法读取了 Groovy 脚本中的响应,但出现数字格式异常。我的代码是:

String conversionString = context.expand( 
'${EuroConvertorRequest#Response#declare namespace 
ns1=\'http://tempuri.org/\'; //ns1:EuroConvertorResponse[1]}' )

double convertedRate = Double.parseDouble(conversionString);

我得到的确切错误是:

java.lang.NumberFormatException: For input string: " 1.0966 " error at line: 10.

如果我像下面这样对响应进行硬编码,它仍然可以正常工作!

String conversionRate = "1.0966";
double convertedRate = Double.parseDouble(conversionString);

有什么想法吗?

我相信您使用的 xpath 不正确。应该查询 EuroConvertorResult,而不是 EuroConvertorResponse

尝试更改:

String conversionString = context.expand('${EuroConvertorRequest#Response#declare namespace ns1=\'http://tempuri.org/\'; //ns1:EuroConvertorResponse[1]}' )

收件人:

String conversionString = context.expand('${EuroConvertorRequest#Response#declare namespace ns1=\'http://tempuri.org/\'; //ns1:EuroConvertorResult}' )

或者实际上,通过在末尾添加 as Double 来强制获取单行本身的双精度值:

def conversionResult = context.expand('${EuroConvertorRequest#Response#declare namespace ns1=\'http://tempuri.org/\'; //ns1:EuroConvertorResult}' ) as Double
assert conversionResult instanceof Double

或者,您可以使用 XmlSlurper 来达到相同的目的:

def result = new XmlSlurper().parseText(context.expand('${EuroConvertorRequest#Response}').'**'.find{it.name() == 'EuroConvertorResult'}.text() as Double
log.info result
assert result instanceof Double