getNodeValue()返回null,尽管响应xml持有者不 [英] getNodeValue() returns null although response xml holder does not

查看:177
本文介绍了getNodeValue()返回null,尽管响应xml持有者不的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using the demo web service of SOAP UI-GetCityWeatherByZip. The script is to read different zip codes from a csv file, pass them in the request xml, get the response and store the results in a csv file. ulresp variable is used to store the response and is not returning null but getnodevalue is returning null. I am not sure what the problem is. The zipcodes are correctly being read. The service also runs fine.Code is as follows.

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:
$ b

Input 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


推荐答案

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

Most likely because response has a namespace, you have to define the namespace before accessing an item in the response. Use as:

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

,然后

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

/ p>

Should look like

.....
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")
}  
......

这篇关于getNodeValue()返回null,尽管响应xml持有者不的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆