gpt4 book ai didi

xml - 尽管响应 xml 持有者没有,但 getNodeValue() 返回 null

转载 作者:行者123 更新时间:2023-12-04 04:36:31 26 4
gpt4 key购买 nike

我正在使用 SOAP UI-GetCityWeatherByZip 的演示 Web 服务。该脚本是从 csv 文件中读取不同的邮政编码,将它们传递到请求 xml 中,获取响应并将结果存储在 csv 文件中。 ulresp 变量用于存储响应并且不返回 null 但 getnodevalue 返回 null。我不确定问题是什么。邮政编码被正确读取。服务也运行良好。代码如下。

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def f = new File(groovyUtils.projectPath + "\\Trial\\TestData1.csv");
int row;
log.info(f.absolutePath);


def o = new File("C:\\Users\\Ananth\\Desktop\\SOAP UI\\Trial\\Output.csv");
log.info(o.absolutePath);
o << "Zipcode,Responsetext \n";

context.fileReader = new BufferedReader(new FileReader(f));
line=context.fileReader.readLine();
row=1;
while(line!=null)
{
data=line.split(",")
zipcode=data[0].replace("\"", "");
log.info("row:${row}:zipcode:${zipcode}");

def req=groovyUtils.getXmlHolder("GetCityWeatherByZIP#Request");
req["//weat:ZIP"] = "$zipcode";
req.updateProperty();
log.info("Node Zip:${req.getNodeValue('//weat:ZIP')}");

def ulresult = testRunner.runTestStepByName("GetCityWeatherByZIP");
log.info("ulresult: ${ulresult}");
if( ulresult != null && ulresult.getStatus().toString() == "OK" )
{
log.info("Run successful");

ulresp=groovyUtils.getXmlHolder("GetCityWeatherByZIP#Response");

if( ulresp != null )
{
log.info("Response:${ulresp.getNodeValue('//ResponseText')}");
}
else
{
log.info("Response returning null");
}
}
line=context.fileReader.readLine();
row=row+1;
}

输入xml:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:weat="http://ws.cdyne.com/WeatherWS/">
<soap:Header/>
<soap:Body>
<weat:GetCityWeatherByZIP>
<!--Optional:-->
<weat:ZIP>07009</weat:ZIP>
</weat:GetCityWeatherByZIP>
</soap:Body>
</soap:Envelope>

输出 Xml:
<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>
<GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/">
<GetCityWeatherByZIPResult>
<Success>true</Success>
<ResponseText>City Found</ResponseText>
<State>NJ</State>
<City>Cedar Grove</City>
<WeatherStationCity>Caldwell</WeatherStationCity>
<WeatherID>14</WeatherID>
<Description>Cloudy</Description>
<Temperature>60</Temperature>
<RelativeHumidity>72</RelativeHumidity>
<Wind>NE7</Wind>
<Pressure>30.12S</Pressure>
<Visibility/>
<WindChill/>
<Remarks/>
</GetCityWeatherByZIPResult>
</GetCityWeatherByZIPResponse>
</soap:Body>
</soap:Envelope>

日志信息
Wed Oct 30 07:30:16 IST 2013:INFO:C:\Users\Ananth\Desktop\SOAP UI\Trial\TestData1.csv
Wed Oct 30 07:30:16 IST 2013:INFO:FIle created
Wed Oct 30 07:30:16 IST 2013:INFO:C:\Users\Ananth\Desktop\SOAP UI\Trial\Output.csv
Wed Oct 30 07:30:16 IST 2013:INFO:row:1:zipcode:07008
Wed Oct 30 07:30:18 IST 2013:INFO:Node Zip:07008
Wed Oct 30 07:30:21 IST 2013:INFO:ulresult: com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStepResult@15929b1
Wed Oct 30 07:30:21 IST 2013:INFO:Run successful
Wed Oct 30 07:30:21 IST 2013:INFO:Response:null
Wed Oct 30 07:30:21 IST 2013:INFO:row:2:zipcode:07009
Wed Oct 30 07:30:21 IST 2013:INFO:Node Zip:07009
Wed Oct 30 07:30:22 IST 2013:INFO:ulresult: com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStepResult@10b9a14
Wed Oct 30 07:30:22 IST 2013:INFO:Run successful
Wed Oct 30 07:30:22 IST 2013:INFO:Response:null

最佳答案

很可能是因为响应具有命名空间,您必须在访问响应中的项目之前定义命名空间。用作:

ulresp.namespaces["ns"] = "http://ws.cdyne.com/WeatherWS/"

然后
ulresp.getNodeValue('//ns:ResponseText')

应该看起来像
.....
ulresp=groovyUtils.getXmlHolder("GetCityWeatherByZIP#Response")
ulresp.namespaces["ns"] = "http://ws.cdyne.com/WeatherWS/"

if( ulresp != null ) {
log.info("Response:${ulresp.getNodeValue('//ns:ResponseText')}")
} else {
log.info("Response returning null")
}
......

关于xml - 尽管响应 xml 持有者没有,但 getNodeValue() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19672751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com