Forum Discussion

max1965's avatar
max1965
Contributor
12 years ago

extract value from soap response

I need help to extract value from a soap response. The response is the following:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<env:Header/>
<env:Body env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<m:acceptRequestResponse xmlns:m="http://vassv02:7001">
<response xsi:type="xsd:string"><![CDATA[<spml:searchResponse xmlns:spml='urn:oasis:names:tc:SPML:1:0' xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' requestID='20130211113519377' result='urn:oasis:names:tc:SPML:1:0#success'>
<spml:operationalAttributes>
<dsml:attr name='id'>
<dsml:value>0802100000</dsml:value>
</dsml:attr>
<dsml:attr name='errorCode'>
<dsml:value>1000</dsml:value>
</dsml:attr>
</spml:operationalAttributes>
<spml:searchResultEntry>
<spml:identifier type='urn:oasis:names:tc:SPML:1:0#GUID'>
<spml:id>0802100000</spml:id>
</spml:identifier>
<spml:attributes>
<dsml:attr name='district'>
<dsml:value>080</dsml:value>
</dsml:attr>
<dsml:attr name='svcType'>
<dsml:value>APT</dsml:value>
</dsml:attr>
<dsml:attr name='masterCli'>
<dsml:value>0802100000</dsml:value>
</dsml:attr>
<dsml:attr name='cliDistrict'>
<dsml:value>080</dsml:value>
</dsml:attr>
<dsml:attr name='isMaster'>
<dsml:value>Y</dsml:value>
</dsml:attr>
<dsml:attr name='billingCli'>
<dsml:value>0802100000</dsml:value>
</dsml:attr>
<dsml:attr name='outboundProxy'>
<dsml:value>85.38.231.9</dsml:value>
</dsml:attr>
<dsml:attr name='presenceServer'>
<dsml:value>10.5.20.18</dsml:value>
</dsml:attr>
<dsml:attr name='applicationServer'>
<dsml:value>sip:10.8.20.8</dsml:value>
</dsml:attr>
<dsml:attr name='administrativeStatus'>
<dsml:value>ACTIVE</dsml:value>
</dsml:attr>
<dsml:attr name='operationalStatus'>
<dsml:value>RUNNING</dsml:value>
</dsml:attr>
<dsml:attr name='geographicArea'>
<dsml:value>0020230201251</dsml:value>
</dsml:attr>
<dsml:attr name='exchangeId'>
<dsml:value>0000000205465</dsml:value>
</dsml:attr>
<dsml:attr name='accessDevice'>
<dsml:value>AG</dsml:value>
</dsml:attr>
<dsml:attr name='userDevice'>
<dsml:value>WIFI</dsml:value>
</dsml:attr>
<dsml:attr name='sipKey'>
<dsml:value>fb9c96084d6e153da4be84a3f5a8633c0c430a1bef73cbee4146deb02682d8c7</dsml:value>
</dsml:attr>
<dsml:attr name='QoS'>
<dsml:value></dsml:value>
</dsml:attr>
<dsml:attr name='suppClis'>
<dsml:value>0802100001</dsml:value>
<dsml:value>0802100002</dsml:value>
<dsml:value>0802100003</dsml:value>
<dsml:value>0802100004</dsml:value>
</dsml:attr>
<dsml:attr name='suppClisKeys'>
<dsml:value>fd6a26919ff4b8755256de4e8458d2527e8bae333541c95a95bdefaf79f3f260</dsml:value>
<dsml:value>fd6a26919ff4b8755256de4e8458d2527e8bb3f55266d7ae3f21006b075e2a61</dsml:value>
<dsml:value>fd6a26919ff4b8755256de4e8458d2527e8bbf798cb0f9ca8dc572e46d8f1262</dsml:value>
<dsml:value>b0dab81899ab22b262d898eb5ed6d4b6b581090d21bd3a85ba98475e100a095f</dsml:value>
</dsml:attr>
<dsml:attr name='STS_disablingClass'>
<dsml:value>sts_subscription=access</dsml:value>
<dsml:value>disablingClass=C10</dsml:value>
</dsml:attr>
<dsml:attr name='STS_accessBidirectionalCall'>
<dsml:value>sts_subscription=number</dsml:value>
<dsml:value>accessBidirectionalCall=2</dsml:value>
</dsml:attr>
<dsml:attr name='STS_405'>
<dsml:value>sts_subscription=number</dsml:value>
<dsml:value>active=false</dsml:value>
</dsml:attr>
<dsml:attr name='STS_CLIR'>
<dsml:value>sts_subscription=number</dsml:value>
<dsml:value>blockingPeriod=1</dsml:value>
</dsml:attr>
<dsml:attr name='STS_accessTerminatedCall'>
<dsml:value>sts_subscription=number</dsml:value>
<dsml:value>accessTerminatedCall=2</dsml:value>
</dsml:attr>
<dsml:attr name='STS_400'>
<dsml:value>sts_subscription=number</dsml:value>
<dsml:value>active=false</dsml:value>
<dsml:value>billingFlag=false</dsml:value>
<dsml:value>date=0</dsml:value>
<dsml:value>number=0</dsml:value>
<dsml:value>time=0</dsml:value>
</dsml:attr>
<dsml:attr name='STS_inArrears'>
<dsml:value>sts_subscription=access</dsml:value>
<dsml:value>typeOfMorosity=NULL</dsml:value>
</dsml:attr>
<dsml:attr name='STS_accessOriginatedCall'>
<dsml:value>sts_subscription=number</dsml:value>
<dsml:value>accessOriginatedCall=2</dsml:value>
</dsml:attr>
</spml:attributes>
</spml:searchResultEntry>
</spml:searchResponse>]]></response>
</m:acceptRequestResponse>
</env:Body>
</env:Envelope>

I want extract the errorrCode value (1000).

8 Replies

  • Sandeepss's avatar
    Sandeepss
    Occasional Contributor
    Hi,

    The below code may help You



    // Read All response XML Using Xml Holder
    context.utils = new com.eviware.soapui.support.GroovyUtils(context)
    def response = context.expand( '${Your Operation Name here#Response}' )
    context.holder = context.utils.getXmlHolder(response)
    // context.holder.getNodeValues("//Put the tagname as below")
    context.Dueval = context.holder.getNodeValues("//dsml:value")
    def sVal = context.Dueval.toString()
    log.info sVal // you will get your result.
  • I have the following error: java.lang.RuntimeException: net.sf.saxon.trans.XPathException: XPath syntax error at char 13 on line 2 in {\n//dsml:value}: Prefix dsml has not been declared error at line: 7
  • I write the following groovy script:

    def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
    def response = context.expand( '${searchRequest APT NAKED#Response}' ) //searchRequest APT NAKED is the step name
    def holder = groovyUtils.getXmlHolder( response )
    def cdata = holder.getDomNode('//response/text()').nodeValue
    def holder2 = groovyUtils.getXmlHolder( cdata )
    def id = holder2.getDomNode('//spml:id/text()').nodeValue
    log.info id

    The id value is correctly extract from soap response:
    Wed Feb 13 13:51:58 CET 2013:INFO:0802100000

    I don't know how the script should be modify to extract the errorCode value ?
  • I modify the groovy script as follow:
    def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
    def response = context.expand( '${searchRequest APT NAKED#Response}' )
    def holder = groovyUtils.getXmlHolder( response )
    def cdata = holder.getDomNode('//response/text()').nodeValue
    def holder2 = groovyUtils.getXmlHolder( cdata )
    def errorCode = holder2.getDomNode('//dsml:attr[@name='errorCode']/dsml:value/text()').nodeValue
    log.info errorCode

    I have the following error:

    Thu Feb 14 12:37:33 CET 2013:ERROR:An error occured [startup failed:
    Script1.groovy: 6: unexpected token: errorCode @ line 6, column 56.
    etDomNode('//dsml:attr[@name='errorCode'
    ^
    org.codehaus.groovy.syntax.SyntaxException: unexpected token: errorCode @ line 6, column 56.
    at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:139)
    at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:107)
    at org.codehaus.groovy.control.SourceUnit.parse(SourceUnit.java:236)
    at org.codehaus.groovy.control.CompilationUnit$1.call(CompilationUnit.java:163)
    at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:839)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:544)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:520)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:497)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:306)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:287)
    at groovy.lang.GroovyShell.parseClass(GroovyShell.java:731)
    at groovy.lang.GroovyShell.parse(GroovyShell.java:743)
    at groovy.lang.GroovyShell.parse(GroovyShell.java:770)
    at groovy.lang.GroovyShell.parse(GroovyShell.java:761)
    at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.compile(SoapUIGroovyScriptEngine.java:148)
    at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:93)
    at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:149)
    at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:238)
    at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runCurrentTestStep(WsdlTestCaseRunner.java:48)
    at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:147)
    at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:42)
    at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:135)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Caused by: Script1.groovy:6:56: unexpected token: errorCode
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.argList(GroovyRecognizer.java:6962)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.methodCallArgs(GroovyRecognizer.java:11753)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.pathElement(GroovyRecognizer.java:11334)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.pathExpression(GroovyRecognizer.java:11464)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.postfixExpression(GroovyRecognizer.java:13175)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.unaryExpressionNotPlusMinus(GroovyRecognizer.java:13144)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.powerExpressionNotPlusMinus(GroovyRecognizer.java:12848)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.multiplicativeExpression(GroovyRecognizer.java:12780)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.additiveExpression(GroovyRecognizer.java:12450)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.shiftExpression(GroovyRecognizer.java:9664)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.relationalExpression(GroovyRecognizer.java:12355)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.equalityExpression(GroovyRecognizer.java:12279)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.regexExpression(GroovyRecognizer.java:12227)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.andExpression(GroovyRecognizer.java:12195)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.exclusiveOrExpression(GroovyRecognizer.java:12163)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.inclusiveOrExpression(GroovyRecognizer.java:12131)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.logicalAndExpression(GroovyRecognizer.java:12099)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.logicalOrExpression(GroovyRecognizer.java:12067)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.conditionalExpression(GroovyRecognizer.java:4842)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.assignmentExpression(GroovyRecognizer.java:7988)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.expression(GroovyRecognizer.java:9841)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.expressionStatementNoCheck(GroovyRecognizer.java:8314)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.varInitializer(GroovyRecognizer.java:2682)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.variableDeclarator(GroovyRecognizer.java:7889)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.listOfVariables(GroovyRecognizer.java:7843)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.variableDefinitions(GroovyRecognizer.java:2278)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.declaration(GroovyRecognizer.java:2140)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.statement(GroovyRecognizer.java:1208)
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.compilationUnit(GroovyRecognizer.java:757)
    at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:130)
    ... 27 more

    1 error
    ], see error log for details
  • hey, you can't use the single quote (') multiple times in the same string, that will means the end of your string, instead you need to use the double quote ("). this should be the correct way:
    def errorCode = holder2.getDomNode('//dsml:attr[@name="errorCode"]/dsml:value/text()').nodeValue