Java Webservice Client (Best way)
JavaJax WsAxis2Wsdl2javaWebservice ClientJava Problem Overview
I have a third party WSDL, I need to write code in Java for a web service client to invoke the operations in the third party WSDL. Right now, I have generated the client stub using the WSDL2JAVA tool from Axis and used the XMLbeans for data binding.
- What is the best approach to do this JAVA?
- I read about SAAJ, looks like that will be more granular level of approach?
- Is there any other way than using the WSDL2Java tool, to generate the code. Maybe
wsimport
in another option. What are the pros and cons? - Can someone send the links for some good tutorials on these topics?
- What are the options we need to use while generating the code using the WSDL2Java?
I used some of the basic things initially. Now I have these options
C:\axis2-1.5.1\bin>wsdl2java -uri mywsdlurl -o client -p somepackage -d xmlbeans -s -t -ssi
Java Solutions
Solution 1 - Java
> What is the best approach to do this JAVA?
I would personally NOT use Axis 2, even for client side development only. Here is why I stay away from it:
- I don't like its architecture and hate its counter productive deployment model.
- I find it to be low quality project.
- I don't like its performances (see this benchmark against JAX-WS RI).
- It's always a nightmare to setup dependencies (I use Maven and I always have to fight with the gazillion of dependencies) (see #2)
- Axis sucked big time and Axis2 isn't better. No, this is not a personal opinion, there is a consensus.
- I suffered once, never again.
The only reason Axis is still around is IMO because it's used in Eclipse since ages. Thanks god, this has been fixed in Eclipse Helios and I hope Axis2 will finally die. There are just much better stacks.
> I read about SAAJ, looks like that will be more granular level of approach?
To do what?
> Is there any other way than using the WSDL2Java tool, to generate the code. Maybe wsimport in another option. What are the pros and cons?
Yes! Prefer a JAX-WS stack like CXF or JAX-WS RI (you might also read about Metro, Metro = JAX-WS RI + WSIT), they are just more elegant, simpler, easier to use. In your case, I would just use JAX-WS RI which is included in Java 6 and thus wsimport
.
> Can someone send the links for some good tutorials on these topics?
That's another pro, there are plenty of (good quality) tutorials for JAX-WS, see for example:
- Developing JAX-WS Web Service Clients (start here)
- Introducing JAX-WS 2.0 With the Java SE 6 Platform, Part 1
- Creating a Simple Web Service and Client with JAX-WS
- Creating a SOAP client with either Apache CXF or GlassFish Metro (Glen Mazza's blog is a great resources)
> What are the options we need to use while generating the code using the WSDL2Java?
No options, use wsimport
:)
See also
- Elad’s Adventures in Java WebServiceLand
- Axis2: Why bother? on the BileBlog (be prepared for the bile) - you'll have to stop the redirect.
Related questions
Solution 2 - Java
I have had good success using Spring WS for the client end of a web service app - see http://static.springsource.org/spring-ws/sites/1.5/reference/html/client.html
My project uses a combination of:
-
XMLBeans (generated from a simple Maven job using the xmlbeans-maven-plugin)
-
Spring WS - using marshalSendAndReceive() reduces the code down to one line for sending and receiving
-
some Dozer - mapping the complex XMLBeans to simple beans for the client GUI
Solution 3 - Java
You can find some resources related to developing web services client using Apache axis2 here.
http://today.java.net/pub/a/today/2006/12/13/invoking-web-services-using-apache-axis2.html
Below posts gives good explanations about developing web services using Apache axis2.
http://www.ibm.com/developerworks/opensource/library/ws-webaxis1/
Solution 4 - Java
Some ideas in the following answer:
Gives an example of a Groovy client invoking the ADB classes generated from the WSDL.
There are lots of web service frameworks out there...