There was a need to develop a web service in our web project in order to make it interoperable with other system specially written in languages other than Java. We had number of options to choose from such as
Metro which is part of
GlashFish Community and
Axis2 which is from
The Apache Software Foundation.
We carried out a memory test. We developed a class with a method returning a byte[10000000] worth of data. Then exposing them with both Metro and Axis2. Our web service clients called the services in a loop of 100 with Thread.Sleep(1000) in between of each call. With the aid of
VisualVM which offers
JVM profiling and monitoring we monitored the memory usage and garbage collection. Both services were used just out of the box (without any additional configuration and tuning). They were almost the same in terms of memory usage. Annotation is the beauty of Metro. If you have your class then your are 2 steps from making your class act as a service. First annotate the class with
@WebService and second annotate a method with
@WebMethod. That's All. Isn't it easy!
Here is a simple guide
Building a simple Metro application you can give it a try.
With regard to ease of use,
Axis2 was a bit problematic. I'm going to explain more on the problem and the approach I took to solve it.
The problem:
When my class was ready, I added axis2
Servlet to
web.xml. Then, exposing the class by adding
service.xml to the folder hierarchy under WEB-INF as:
WEB-INF
|---->services
|---->myApp
|---->META-INF
|---->service.xml
service.xml defines the the description of the service. At the final step, I tried to add all the necessary jar files to the
classpath of the server. Everything seemed ok but the service was not deployed. There was no error in the logs. I checked my service by trying to checkout the
WSDL on the browser. The response was an error indicating "
No service is available at this URL" or "
The service cannot be found for
the endpoint reference (EPR) " without any further clue or any other exceptions on the server.
The solution:
axis2-web is a
"collection of JSPs that make up the Axis2 administration application "
I tried to list my service by using
axis2-web at the address below by deploying the application in my
Servlet engine.
http://address:port/context/services/listServices
After calling the address above I found out there is a missing class causing malfunction.
Although nothing was in the log files indicating ClassNotFoundException