Question

So I'm having a couple of ANT scripts using Groovy to process complex calculations normal ANT can't do (at least afaik). I'm trying to access an Axis2 web service using a SOAP-envelope via Groovy. The request and response is pretty simple, except for two complexType attributes (one in the request, one in the response).

The first thing I've stumbled across was Groovy Soap. It is quite easy to use, you simply instantiate a SoapClient and call the web service method. Unfortunately it cannot handle complexType attributes in the request, which I need:

Current Limitations:

....

4: Custom data types cannot be processed on client side when using the Groovy SOAP module with the current groovy-1.0 release.

Then I've read a lot about GroovyWS. I created my Grape config file in my user.home, javac and $GROOVY_HOME are available (basically did everything as described on the project quick guide page). Grape somehow retrieved Ivy, when I first started the script (I have no experience with Grape, but I suspect it's very similar to Maven).

Then started my simple script:

@Grab(group='org.codehaus.groovy.modules', module='groovyws',version='0.5.2')
import groovyx.net.ws.WSClient
proxy = new WSClient("http://127.0.0.1/axis2/services/ReleaseService?wsdl", this.class.classLoader)
proxy.initialize()

Unfortunately I couldn't even initialize the web client (without the Groovy Soap library in the classpath):

SEVERE: Could not compile java files for http://127.0.0.1/axis2/services/ReleaseService?wsdl.
Caught: java.lang.IllegalStateException: Unable to create JAXBContext for generated packages: Provider com.sun.xml.bind.v2.ContextFactory could not be instantiated: javax.xml.bind.JAXBException: "com.intershop.qa.tae.ws.xsd" doesnt contain ObjectFactory.class or jaxb.index java.lang.IllegalStateException: Unable to create JAXBContext for generated packages: Provider com.sun.xml.bind.v2.ContextFactory could not be instantiated [...]

With the Groovy Soap library (which seems to overload some of GroovyWS' functionality) in the classpath I've got:

Caught: java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition; java.lang.NoSuchMethodError:

which looks very similar to the error I've got when I was using Groovy Soap in the first place.

So my question is: How can I communicate with an Axis2 web service using complexType parameters via ANT. I'm not limited to Groovy only, but for deployment reasons (~50 VM snapshots) I want something simple. A Java client worked, but since the deployment is quite some effort (especially if I want to change stuff in the future) I need something which is closer to ANT and easier to deploy.

Thanks in advance for suggestions of other technologies or fix ideas for my GroovyWS implementation.

Was it helpful?

Solution

I finally came up with a solution: groovy-wslight actually solved my problem and was finally able to deploy easily and access the web service without problems/exceptions.

The script:

@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='0.7.1')
import wslite.soap.*
def client = new SOAPClient("http://127.0.0.1/axis2/services/ReleaseService")
def response = client.send  {
  body {
    myFunction(xmlns:"http://my.namespace.com") {
       stringParameter("6.3.0.0")
       status() { value("default") }
       mode() { value("full") }
    }
  }
}

Where status and mode are complexTypes which consist of one "value" attribute (as an example).

println(response.myFunctionResponse.return)

gives me the object returned by the web service. Of course the names of the tokens depend on the WSDL. In my case the response of the request is called myFunctionResponse, which has a field name="return" and gives me a complexType object. The fields of the object can be retrieved according to the names given in the WSDL:

println(response.myFunctionResponse.return.location) // gives me the field value of the field "location" for my complexType

OTHER TIPS

I had a similar problem when using JDK 1.7. Switching to JDK 1.6 solved it for me.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top