0

All,

I am having an issue with the HTTPBuilder class in my Groovy script while trying to POST my request in XML format to a WSDL. What am I doing wrong?

Below is my code:

import groovyx.net.http.HTTPBuilder.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*

def baseURL      = "http://server:port"
def pathIn       = "/folder1/folder2"

/* Groovy Utilities Declaration */
def groovyUtils  = new com.eviware.soapui.support.GroovyUtils(context)

/* Request - modified - Holder Setup */
def modRequest       = context.expand('${Groovy Script - Modify Request#Result}')
def modRequestHolder     = groovyUtils.getXmlHolder("modRequest")

/* Define few variables for httpbuilder */
def httpWSDL = new HTTPBuilder(baseURL)
def respReturn = null

// Post the request against the WSDL using (httpbuilder.request(Method POST, ContentType XML); set uri.path to the path after base url of wsdl & body to requestholder.xml
// perform a POST request, expecting XML response
httpWSDL.request(POST, XML){ req ->
    uri.path     = pathIn
    body         = modRequestHolder.xml

    // response handler for a success response code
    response.success = { resp, reader ->

        ret = reader.getXML()

        println 'Response data: -----'
        println respReturn
        println '--------------------'
    }
}

Below is the exception:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script1.groovy: 26: unable to resolve class HTTPBuilder @ line 26, column 24. 
def httpWSDL = new HTTPBuilder(baseURL) ^ 
org.codehaus.groovy.syntax.SyntaxException: unable to resolve class HTTPBuilder @ line 26, column 24. 
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.addError(ClassCodeVisitorSupport.java:146) 
at org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:222) 
at org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:232) 
at org.codehaus.groovy.control.ResolveVisitor.transformConstructorCallExpression(ResolveVisitor.java:969) 
at org.codehaus.groovy.control.ResolveVisitor.transform(ResolveVisitor.java:646) 
at org.codehaus.groovy.control.ResolveVisitor.transformDeclarationExpression(ResolveVisitor.java:1010) 
at org.codehaus.groovy.control.ResolveVisitor.transform(ResolveVisitor.java:638) 
at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:139) 
at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40) 
at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35) 
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163) 
at org.codehaus.groovy.control.ResolveVisitor.visitBlockStatement(ResolveVisitor.java:1240) 
at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69) 
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101) 
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112) 
at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:50) 
at org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:166) 
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123) 
at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1055) 
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50) 
at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1183) 
at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:141) 
at org.codehaus.groovy.control.CompilationUnit$10.call(CompilationUnit.java:632) 
at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:912) 
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:574) 
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:523) 
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:279) 
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:258) 
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:613) 
at groovy.lang.GroovyShell.parse(GroovyShell.java:625) 
at groovy.lang.GroovyShell.parse(GroovyShell.java:652) 
at groovy.lang.GroovyShell.parse(GroovyShell.java:643) 
at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.compile(SoapUIGroovyScriptEngine.java:138) 
at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:89) 
at com.eviware.soapui.support.scripting.groovy.SoapUIProGroovyScriptEngineFactory$SoapUIProGroovyScriptEngine.run(SourceFile:79) 
at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:138) 
at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:213) 
at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runCurrentTestStep(WsdlTestCaseRunner.java:47) 
at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:139) 
at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:47) 
at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:129) 
at java.util.concurrent.Executors$RunnableAdapter.call(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) 1 error 

Note: The HTTPBuilder JAR files are installed in both ext & lib folders (I did this after reading few forums). Some of them suggested that I import REST Client. How do I do this? Also, the wsdl I'm working on is a SOAP service. Would I still have to import the REST plugin?

I'm very new to SOAPUI & Groovy and finding my way through.

It would be great is anyone can help me out. Thanks in advance!

ssc
  • 35
  • 2
  • 9

1 Answers1

0

I think that if you copy all the required jars on /ext or /lib folder, your code must works. I think the problem is that you're using the * on import for a path class which is not a path package, more exactly this:

import groovyx.net.http.HTTPBuilder.*

should be:

import groovyx.net.http.HTTPBuilder

Since groovyx.net.http.HTTPBuilder it's directly a class you can't add * to the end, this is why your groovy script is throwing org.codehaus.groovy.syntax.SyntaxException: unable to resolve class HTTPBuilder

Hope this helps,

albciff
  • 18,112
  • 4
  • 64
  • 89
  • Thanks Albciff! Yes, that's the mistake. I have to read up on that part more. Thanks again! – ssc Apr 07 '15 at 14:17
  • When I'm running the script now, I get groovyx.net.http.ParserRegistry class def not found error. Could you please help me figure out why I'm getting this error? All the JAR files are in the right places. I've tried several of the imports: import com.sun.org.apache.xml.internal.resolver.CatalogManager; import groovyx.net.http.*; import groovyx.net.http.HTTPBuilder; import static groovyx.net.http.ContentType.*; import static groovyx.net.http.Method.*; import javax.xml.parsers.ParserConfigurationException; import groovyx.net.http.HTTPBuilder.RequestConfigDelegate; – ssc Apr 08 '15 at 14:05
  • @ssc did you see the [answer in this question](http://stackoverflow.com/questions/14611349/java-lang-noclassdeffoundererror-could-not-initialize-class-groovy-net-http-par) it's says that you need to add http-builder jars and all of dependency jars. Maybe it can help `:)` – albciff Apr 08 '15 at 21:35