Property Transfer: if node doesn't exist choose value N/A to write in file
Hi,
I've a project where I want to compare responses. therefore I'm using the Property Transfer to put the response in a file with DataSink. Now in the PorpertyTransfer I need to add my namespaces before this step can go on. That's not an issue, but there are some companies that have a different node structure compared to others. e.g. for a legal person the node goes like this:
//ns3:cbeEntityReply[1]/ns3:ReplyData[1]/ns3:Entity[1]/ns4:Enterprise[1]/ns4:Type[1]
but for a business company there's no type, thus this node doesn't exist AND the path is a bit different:
//ns3:cbeEntityReply[1]/ns3:ReplyData[1]/ns3:Entity[1]/ns4:BusinessUnit
with other childnodes in it.
My question is: How can I tell the Property Transfer that if it doesn't find the node "ns4:Type" it may replace this with the string "N/A" when it writes to the textfile please?
thanks in advance.
Thanks for your time and effort but it didn't work for me. I've looked at it with a senior developper and we've found out that for my case it's actually as you had stated in the beginning. The code inside the brackets are actually far more easy than everything that has been written on the internet! ;-)
Also, your last comments were also correct. I needed to change the property for the source in result. :-)
My code looks like this:
import com.eviware.soapui.impl.wsdl.teststeps.registry.PropertyTransfersStepFactory import groovy.json.JsonSlurper import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep //response for BU def responseBU = context.expand( 'GET THE DATA WITH THE PICK AND CHOOSE ACTION IN READYAPI' ) def result = "N/A" //response for ENT def responseENT = context.expand( 'GET THE DATA WITH THE PICK AND CHOOSE ACTION IN READYAPI' ) if (responseBU == null || responseBU.toString().isAllWhitespace()) { result = responseENT.toString() } return result
the steps are like this:
soap request (xml answer)
groovy script
property transfer: source for TypeEnterprise = Groovy script, Property=result
datasink: declared 3 properties where off 1 is called Type, separator = #, Encoding = UTF-8
datasource loop
I just want to add that the existing intellisense is not working correctly. When I autocomplete (ctrl + spacebar) to see what I can choose in the menu, "isAllWhitespace" is not present. Strange thing ....
Also, we've added the isAllWhitespace as the first time we saw that responseBU gave an empty response on a response that was equal to Enterprise. So you really need to say to Groovy that the string may not be empty otherwise it's writing the empty string too.