Tuesday, July 24, 2012

How to use Apache Axis2 for consuming a web service?

About the example:


In this example we will see how to use rather consume a web service using Apache Axis2. We have a Hello World web service which is already published, it accepts a String name and prints Hello name in return. To know more about how to publish a web service, click here.

Below are the steps which shows how to consume a web service using Apache Axis2

1. Download latest version of axis2 files from http://axis.apache.org/axis2/java/core/. (i.e. axis2-1.6.2-bin.zip).


2. Extract the folder (i.e. axis2-1.6.2) in your desire location. Lets assume as C:\axis2-1.6.2.

3. Add enviroment variable AXIS2_HOME and set the value "C:\axis2-1.6.2". Also make sure that JAVA_HOME is set in enviroment variables.

4. Now you can use wsdl2java.bat file from folder "C:\axis2-1.6.2\bin" to download web service stubs. Use command prompt and go to folder C:\axis2-1.6.2\bin and run below command.

   wsdl2java.bat -uri http://localhost:8080/SimpleWebservice/hellows?wsdl

   Note : Provide your wsdl URL in above command, you can also use XSD file instead of wsdl URL. Here we have already published a hello world web services. To know how to publish a simple hello world web service, click here.

   Please see the screen shot below.



5. If everything goes well in step 4, you will find a src folder downloaded in folder C:\axis2-1.6.2\bin. Now you can import the src folder in your eclipse workspace and add the JAR files from C:\axis2-1.6.2\lib in your classpath.



6. Create a class TestClient as shown below and see the output


/* TestClient.java */


package com.javaxp;


import java.rmi.RemoteException
import com.javaxp.HelloWSImplServiceStub.SayHello;
import com.javaxp.HelloWSImplServiceStub.SayHelloResponse;


public class TestClient {
public static void main(String[] args)  {
try {
HelloWSImplServiceStub service = new HelloWSImplServiceStub();
SayHello sh = new SayHello();
sh.setArg0("Madan");


SayHelloResponse shr = service.sayHello(sh);
System.out.println(shr.get_return());
} catch(RemoteException ex)  {
ex.printStackTrace();
}
}
}


Output:



Note: Below are the known error / exceptions faced while writing this example


1. log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisOperation).
log4j:WARN Please initialize the log4j system properly.
org.apache.axis2.AxisFault: Couldn't create SOAP message due to exception: XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Premature end of file.
                at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531)
                at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:375)
                at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421)
                at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
                at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
                at com.javaxp.HelloWSImplServiceStub.sayHello(HelloWSImplServiceStub.java:182)
                at com.javaxp.TestClient.main(TestClient.java:20)

2. log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisOperation).
log4j:WARN Please initialize the log4j system properly.
org.apache.axis2.AxisFault: Couldn't create SOAP message due to exception: Unable to create StAX reader or writer
                at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531)
                at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:375)
                at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421)
                at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
                at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
                at com.javaxp.HelloWSImplServiceStub.sayHello(HelloWSImplServiceStub.java:182)
                at com.javaxp.TestClient.main(TestClient.java:20)

3. log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisOperation).
log4j:WARN Please initialize the log4j system properly.
org.apache.axis2.AxisFault: Software caused connection abort: recv failed
                at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
                at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:197)
                at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
                at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)
                at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
                at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
                at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
                at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
                at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
                at com.javaxp.HelloWSImplServiceStub.sayHello(HelloWSImplServiceStub.java:182)
                at com.javaxp.TestClient.main(TestClient.java:20)
Caused by: java.net.SocketException: Software caused connection abort: recv failed
                at java.net.SocketInputStream.socketRead0(Native Method)
                at java.net.SocketInputStream.read(SocketInputStream.java:129)
                at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
                at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
                at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
                at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
                at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
                at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1413)
                at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
                at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
                at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
                at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
                at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
                at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
                at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621)
                at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
                ... 9 more

4.  log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisOperation).
log4j:WARN Please initialize the log4j system properly.
org.apache.axis2.AxisFault: Connection refused: connect
                at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
                at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:197)
                at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
                at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)
                at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
                at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
                at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
                at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
                at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
                at com.javaxp.HelloWSImplServiceStub.sayHello(HelloWSImplServiceStub.java:182)
                at com.javaxp.TestClient.main(TestClient.java:20)
Caused by: java.net.ConnectException: Connection refused: connect
                at java.net.PlainSocketImpl.socketConnect(Native Method)
                at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
                at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
                at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
                at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
                at java.net.Socket.connect(Socket.java:529)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                at java.lang.reflect.Method.invoke(Method.java:597)
                at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:140)
                at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125)
                at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
                at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
                at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
                at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
                at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
                at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621)
                at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
                ... 9 more

6 comments:

  1. Intersting. I'm building a similar test and am getting your first known error (premature end of file). How did you fix it?

    ReplyDelete
  2. May I know how to fix the issue? I got following error as well when trying the HelloWebService.
    SocketException: Software caused connection abort: recv failed

    ReplyDelete
  3. Ridiculous story there. What happened after? Good luck!


    my web site :: s2000 auto parts

    ReplyDelete
  4. Hey there! I'm at work surfing around your blog from my new apple iphone! Just wanted to say I love reading your blog and look forward to all your posts! Carry on the outstanding work!

    Also visit my web-site; short throw

    ReplyDelete
  5. I'm impressed, I must say. Seldom do I come across a blog that's equally educative and entertaining, and
    let me tell you, you've hit the nail on the head. The issue is something which too few folks are speaking intelligently about. Now i'm very happy that I
    came across this during my search for something regarding
    this.

    my website: heart rate monitor

    ReplyDelete
  6. You could certainly see your expertise in the work you write.
    The world hopes for even more passionate writers such as you who are not afraid to mention how
    they believe. Always follow your heart.

    Also visit my web site; stop snoring remedies

    ReplyDelete