VamsiKrishna
VamsiKrishna

Reputation: 791

access response in SOAP UI in Groovy Script

I am new to Groovy Scripting. I am trying to access the value of a Response node below is the script

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context);
def responseHolder = groovyUtils.getXmlHolder( testRunner.testCase.testSteps["request"].testRequest.response.responseContent );
responseHolder.namespaces["ns0"]="http://xmlns.int.com/orders/xsd/v1"
String mySection = responseHolder.getNodeValue["//ns0:MT_OrderCreateDTCFulfillmentResponse/ns0:StatusCode"] ;
log.info mySection

mySection is printed as []

Response XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header xmlns:v1="http://xmlns.int.com/orders/xsd/v1"/>
   <soapenv:Body xmlns:v1="http://xmlns.int.com/orders/xsd/v1">
      <ns0:MT_OrderCreateDTCFulfillmentResponse xmlns:ns0="http://xmlns.int.com/orders/xsd/v1">
         <StatusCode>000</StatusCode>
         <ReferenceDocNbr>NA</ReferenceDocNbr>
         <SchemaValidationStatus>Validated</SchemaValidationStatus>
         <StatusTimestamp>2015-08-03T18:58:01.602</StatusTimestamp>
         <FaultDetails>Request for customer order number NA received successfully and format validated.</FaultDetails>
      </ns0:MT_OrderCreateDTCFulfillmentResponse>
   </soapenv:Body>
</soapenv:Envelope>

SOAP UI Project Structure - I am running Test_Script. Suggest me what i am missing SOAP UI Project structue

Upvotes: 0

Views: 6113

Answers (1)

albciff
albciff

Reputation: 18507

You've to use:

responseHolder.getNodeValue("//ns0:MT_OrderCreateDTCFulfillmentResponse/StatusCode");

instead of responseHolder.getNodeValue["//ns0:MT_OrderCreateDTCFulfillmentResponse/ns0:StatusCode"];

Note that I change responseHolder.getNodeValue invocation to use () instead of [], and also change your xpath since in your response <StatusCode> it's not defined in xmlns:ns0="http://xmlns.int.com/orders/xsd/v1".

Another option is to use the * wildcard as a namespace to map anyone. So in this case you can use:

responseHolder.getNodeValue("//*:MT_OrderCreateDTCFulfillmentResponse/*:StatusCode");

Additionally, note that probably you XML is wrong, since I suppose that all sub elements of <MT_OrderCreateDTCFulfillmentResponse> must belongs to "http://xmlns.int.com/orders/xsd/v1" namespace... so you've to declare it as:

<ns0:MT_OrderCreateDTCFulfillmentResponse xmlns:ns0="http://xmlns.int.com/orders/xsd/v1">
         <ns0:StatusCode>000</ns0:StatusCode>
         <ns0:ReferenceDocNbr>NA</ns0:ReferenceDocNbr>
         <ns0:SchemaValidationStatus>Validated</ns0:SchemaValidationStatus>
         <ns0:StatusTimestamp>2015-08-03T18:58:01.602</ns0:StatusTimestamp>
         <ns0:FaultDetails>Request for customer order number NA received successfully and format validated.</ns0:FaultDetails>
      </ns0:MT_OrderCreateDTCFulfillmentResponse>

Or using as default for this tag:

<MT_OrderCreateDTCFulfillmentResponse xmlns="http://xmlns.int.com/orders/xsd/v1">
         <StatusCode>000</StatusCode>
         <ReferenceDocNbr>NA</ReferenceDocNbr>
         <SchemaValidationStatus>Validated</SchemaValidationStatus>
         <StatusTimestamp>2015-08-03T18:58:01.602</StatusTimestamp>
         <FaultDetails>Request for customer order number NA received successfully and format validated.</FaultDetails>
      </MT_OrderCreateDTCFulfillmentResponse>

Note that if you change you XML with my indication your first XPath it's correct since now StatusCode belongs to your namespace.

Hope it helps,

Upvotes: 1

Related Questions