Axis客户端生成及调用
创建时间: 2010-01-23
最近一个项目中需要用到调用WebService,应用的过程也是学习的过程,下面列出具体的例子,以大家参考,互相学习。
一 .环境配置
- 点击Validation可以查询需要的JAR是不是都存在,如果不存大,可以根据URL进行下载,下载后拷贝到Tomcat的webappsaxisWEB-INFlib目录下。如果JAR都存在了,则显示如下信息:
Needed Components
- Found SAAJ API ( javax.xml.soap.SOAPMessage ) at D:devapache-tomcat-6.0.14webappsaxisWEB-INFlibsaaj.jar
- Found JAX-RPC API ( javax.xml.rpc.Service ) at D:devapache-tomcat-6.0.14webappsaxisWEB-INFlibjaxrpc.jar
- Found Apache-Axis ( org.apache.axis.transport.http.AxisServlet ) at D:devapache-tomcat-6.0.14webappsaxisWEB-INFlibaxis.jar
- Found Jakarta-Commons Discovery ( org.apache.commons.discovery.Resource ) at D:devapache-tomcat-6.0.14webappsaxisWEB-INFlibcommons-discovery-0.2.jar
- Found Jakarta-Commons Logging ( org.apache.commons.logging.Log ) at D:devapache-tomcat-6.0.14webappsaxisWEB-INFlibcommons-logging-1.0.4.jar
- Found Log4j ( org.apache.log4j.Layout ) at D:devapache-tomcat-6.0.14webappsaxisWEB-INFliblog4j-1.2.8.jar
- Found IBM's WSDL4Java ( com.ibm.wsdl.factory.WSDLFactoryImpl ) at D:devapache-tomcat-6.0.14webappsaxisWEB-INFlibwsdl4j-1.5.1.jar
- Found JAXP implementation ( javax.xml.parsers.SAXParserFactory ) at an unknown location
- Found Activation API ( javax.activation.DataHandler ) at D:devapache-tomcat-6.0.14webappsaxisWEB-INFlibactivation.jar
Optional Components
- Found Mail API ( javax.mail.internet.MimeMessage ) at D:devapache-tomcat-6.0.14webappsaxisWEB-INFlibmail.jar
- Found XML Security API ( org.apache.xml.security.Init ) at D:devapache-tomcat-6.0.14webappsaxisWEB-INFlibxmlsec-1.4.1.jar
- Found Java Secure Socket Extension ( javax.net.ssl.SSLSocketFactory ) at an unknown location
|
- 到这步就可以进行Axis的服务端发布WebService了,Web Service服务端开发更多具体方法请参考其它文档。下面是一种介绍
????? 编写JAVA类Hello.java,内容如下:
java 代码
- public class Hello{ ??
- public String hello(String name){ ??
- ??if(name==null) ??
- ??? name = ""; ??
- ??return "你好"+name+",欢迎来到Web服务的世界!"; ??
- } ??
- } ??
- ??
仅此而已,无需编译,将该文件改名为Hello.jws并拷贝到AXIS应用目录Tomcat 的 webappsaxis下。
下面我们就可以测试该Web服务了,打开浏览器并输入刚刚创建的文件名对应的URL地址 http://localhost:8080/axis/Hello.jws 浏览器显示如下结果:
There is a Web Service here ??????? ??????? Click to see the WSDL |
点击可以查看到WSDL文档,如下
xml 代码
- <?xml version="1.0" encoding="UTF-8" ?>??
- -<wsdl:definitions??
- targetNamespace="http://localhost:8080/axis/Hello.jws"??
- xmlns="http://schemas.xmlsoap.org/wsdl/"??
- xmlns="http://www.w3.org/2000/xmlns/"??
- xmlns:apachesoap="http://xml.apache.org/xml-soap" ??
- xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"??
- xmlns:impl="http://localhost:8080/axis/Hello.jws" ??
- xmlns:intf="http://localhost:8080/axis/Hello.jws"??
- xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" ??
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"??
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">??
- - <wsdl:message name="helloRequest">??
- <wsdl:part name="name" type="xsd:string" /> ??
- </wsdl:message>??
- + <wsdl:message name="helloResponse">??
- - <wsdl:portType name="Hello">??
- - <wsdl:operation name="hello" parameterOrder="name">??
- <wsdl:input name="helloRequest" message="intf:helloRequest" /> ??
- <wsdl:output name="helloResponse" message="intf:helloResponse" />??
- </wsdl:operation> ??
- </wsdl:portType>??
- - <wsdl:binding name="HelloSoapBinding" type="intf:Hello"> ??
- <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />??
- - <wsdl:operation name="hello"> ??
- <wsdlsoap:operation soapAction="" />??
- - <wsdl:input name="helloRequest">??
- <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" ??
- ??namespace="http://DefaultNamespace" />?? ??
- </wsdl:input>- <wsdl:output name="helloResponse">?? ??
- <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"??
- ??namespace="http://localhost:8080/axis/Hello.jws" />??? ??
- </wsdl:output> ??
- </wsdl:operation> ??
- </wsdl:binding>??
- - <wsdl:service name="HelloService">??
- - <wsdl:port name="Hello" binding="intf:HelloSoapBinding">??
- <wsdlsoap:address location="http://localhost:8080/axis/Hello.jws" /> ??
- </wsdl:port>?? ??
- </wsdl:service> ??
- </wsdl:definitions>??
- ??
得到WSDL文档后,现在进行AXIS客户端的生成。我们前面安装的AXIS环境中已经包含着这样的工具,它是一个JAVA类,类名为:org.apache.axis.wsdl.WSDL2Java。打开命令行窗口,转到刚才TOMCAT的 webappsaxis 目录下的WEB-INF子目录。确保Tomcat服务已经处于启动状态,键入命令 :
Java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/services/Hello.jws?wsdl
执行该命令前需将 <AXIS_HOME>/lib目录下所有jar包 以及 mail.jar、activation.jar 加入classpath。
?
该命令执行的结果是在当前所在目录(TOMCAT的 webappsaxis WEB-INF子目录)下产生一个子目录 ,该目录下有四个JAVA源文件,它们分别是:
-
Hello.java 定义了Web服务接口,此例中只有一个hello方法。
HelloService.java 定义了用于获取Web服务接口的方法。
HelloServiceLocator.java 接口HelloService的具体实现。
HelloSoapBindingStub.java Web服务客户端桩,通过该类与服务器交互。
-
这四个JAVA类帮我们处理了大部分的逻辑,我们需要的仅仅是把这些类加到我们的项目然后创建一个我们自己的类来调用它们即可。为此我们新加一个类Main.java,为了方便,让这个类与刚产生的四个类都在同一个包下。内容如下:
java 代码
- //Main.java ??
- package localhost.axis.Hello_jws; ??
- public class Main{ ??
- public static void main(String[] args) throws Exception{ ??
- HelloService service = new HelloServiceLocator(); ??
- Hello hello = service.getHello(); ??
- System.out.println("Response:"+hello.hello("罐头")); ??
- } ??
- } ??
- ??
在Eclipse或把Java文件编译后执行,即可调用Axis的WebService。实现具体功能。
以上重点在于介绍Axis的客户端调用,对于初学者应该注意Axis环境的设置,和用WSDL2Java生成客户端文件。