Forum Discussion

Venkat's avatar
Venkat
New Contributor
17 years ago

java.lang.NullPointerException: Cannot get property: value on null object

Hi,
      I am running my very first groovy script inside SoapUI. I get the error mentioned in the subject of this message. Here is the code I used ( which I copied from the SoapUI User guide ):
----------------------------------------------------------------------------------------
def request = testRunner.testCase.getTestStepByName( "Groovy Script" );
def property = request.getProperty( "request" );

// parse out textnodes to modify
def node = new groovy.util.XmlParser(false,false).parseText(property.value);
def textNodes = node["soapenv:Body"]["sam:getContactInfo"]["String_1"][0].children()

// modify
textNodes.clear();
textNodes.add( "test" + System.currentTimeMillis() );

// write back to string
def writer = new java.io.StringWriter();
def printer = new groovy.util.XmlNodePrinter( new PrintWriter( writer ));
printer.print( node );

// set property
property.setValue( writer.toString() )
-------------------------------------------------------------------------------------

What am I doing wrong? Should I have to set something before I run my script? I get this error even if I run the load test from the command line.

Also, is there a place I can go to for seeing working examples of groovy scripts inside SoapUI. I want to call different methods inside a Webservice and the inputs to successive webservice calls will be based on the responses to previous webservice calls.

Any help you can provide will be greatly appreciated.

Thanks,

Venkat

5 Replies

  • Just one small question,

    Have you run the step the script is referring to (Groovy Script)?

    This happends to me a lot; if I don't run the step it is referring to there is nothing for the script to point at at
    def textNodes = node["soapenv:Body"]["sam:getContactInfo"]["String_1"][0].children()
    .

    Hence the nullPointerException.

    /niclas
    eviware.com
  • The answer to the other parts.

    1) Yes, there are example projects to be downloaded from the Downloads sections in the Customer Area

    http://www.eviware.com/content/blogcategory/34/45/

    2) If i understand you right you want to take the value of one element in a response and transfer that to an element in another request?

    There's easier ways to do this than Groovy, namely PropertyTransfers and PropertyExpansions. Example on how to use both is included in the soapUI installation. Look in the folder that soapUI is installed in, there's a sample project file there containing examples on what you're looking for.

    Look at
    Simple Login and Logout w. Properties Steps
    for a PropertyTransfer example and
    Simple Login and Logout Property Expansion
    for an example of PropertyExpansions. Remember to start the MockService before running the tests. Look at http://www.soapui.org/gettingstarted/sample-project.html for more info on the sample Project, there's even a movie on about how to use it.

    /niclas
    eviware.com
  • omatzura's avatar
    omatzura
    Super Contributor
    Hi!

    just a quick check; which soapUI version are you using?

    regards!

    /Ole
    eviware.com
  • Venkat's avatar
    Venkat
    New Contributor
    Hello,
             Thanks for your replies, Niclas and Ole! Appreciate it! I am using Soap UI 2.0-beta1 version.  Your suggestion to first run the step the script is referring to (Groovy Script) helped. But now I want to print out the contents of one of the elements in the response. What is the syntax for referring to that element? I am trying to use the following code and I am not getting it to do what I wanted. Here is my code:
    ------------------------------------------------------------------
    def request = testRunner.testCase.getTestStepByName( "Test Request" );
    def property = request.getProperty( "request" );
    def writer = new java.io.StringWriter();
    def printer = new groovy.util.XmlNodePrinter( new PrintWriter( writer ));
    printer.print( "Starting test\n");
    def node = new groovy.util.XmlParser(false,false).parseText(property.value);
    def entityID = node["SOAP-ENV:Body"]["//ns:getXrefBySSPrefixSourceCompanyIDResponse[1]/ns:getXrefBySSPrefixSourceCompanyIDResult[1]/ns0:CompanyXref[1]/EntityID[1]"];
    printer.print( entityID );
    printer.print( "Ending test\n");
    ------------------------------------------------
    What am I doing wrong? Why don't I get the values of "EntityID" printed? I can see the value 32074 in the response side of "Test Request" step. Here is my output:
    ------------------------------------------------
    Starting test
    []Ending test
    --------------------------------------------------------
  • omatzura's avatar
    omatzura
    Super Contributor
    Hi Venkat,

    please try using the GroovyUtils / XmlHolder classes for accessing the content of a response as described at http://www.soapui.org/userguide/functio ... roovyUtils. They are much easier to use than the corresponding Groovy classes... (we need to update the examples for this.. sorry..)

    Hope this helps!

    regards,

    /Ole
    eviware.com