Axis实现webService 个人总结

webService开发: 个人的浅识,不妥之处,多多指教!
webService是为实现跨平台而出现的一种复合技术,也就是说不同编程语言实现的系统之间的可以通过一种标准
的协议与数据格式进行交换。若系统实现了webService,那么其他系统就可以通过其发布的wsdl对它调用。
webService是种标准,主要由UDDI(通用描述、发现和集成协议)、SOAP(简单对象访问协议(注意:不要被名称误
导了,其实针对所有数据格式而不针对对象)访问标准协议)、XML(用来传递数据、实现数据传输的跨平台)。
实现webService的技术有很多,主要有Axis等。
接下来讲下用Axis1.4怎样实现webService:

一、 搭建开发环境

搭建Axis1.4开发环境
前提条件:搭建好tomcat和jdk,要能运行,这要绝对正确了再接着往下...
之后下个Axis1.4的开发包,到apache官方。
接着讲它部署到tomcat中去,采用单独的配置xml文件配置一个应用比较好。
验证Axis环境搭建是否成功:
发现:有Error,Warning提示信息。
按提示信息将相应的包导入后,即可。

二、开发第一个简单的应用:(我用wsdd文件来管理要发布的应用接口,手动配置觉得也可以)

1.创建一个服务接口:
package com.allan.service;
import com.allan.po.Author;
public interface AuthorService {
/**
* 查询作者姓名
* @return 作者名字
*/
public String getAuthorName();
}
再创建其实现类:
package com.allan.service.impl;

import com.allan.dao.AuthorDao;
import com.allan.dao.jdbc.AuthorDaoImpl;
import com.allan.po.Author;
import com.allan.service.AuthorService;

public class AuthorServiceImpl implements AuthorService{
public String getAuthorName(){
   String name="金超";
     return name;
   }
}
目的是客户端能通过调用接口得到作者的名字。

2.配置wsdd文件。
在中间添加:
<service name="AuthorService" provider="java:RPC" style="rpc">
<parameter name="scope" value="Request"></parameter>
<parameter name="className"
value="com.allan.service.impl.AuthorServiceImpl">
</parameter>
<parameter name="allowMethods" value="*"></parameter>
</service>
其他配置信息不要改。
添加的代码:
<service>标签代表一个webService接口。
name 属性表示服务的名字,客户端调用制定的服务类。
provider 采用java的RPC(Remote Procedure Call)远程过程调用通信机制。
<parameter>的scope为Request请求状态,也可以是session会话状态。
<parameter name="className"
value="com.allan.service.impl.AuthorServiceImpl">
指定的要发布的服务类。
<parameter name="allowMethods" value="*"></parameter>  指定要发布的服务类中的方法。*表示所有方法都发布。具体方法只要是方法名即可。
确保无误后,重启应用。
3.验证是否发布成功:
在地址栏上输入:
http://localhost:8888/services/AuthorService?wsdl
出现:
……
- <wsdl:message name="getAuthorNameResponse">
  <wsdl:part name="getAuthorNameReturn" type="xsd:string" />
  </wsdl:message>
- <wsdl:portType name="AuthorServiceImpl">
- <wsdl:operation name="getAuthorName">
  <wsdl:input message="impl:getAuthorNameRequest" name="getAuthorNameRequest" />
  <wsdl:output message="impl:getAuthorNameResponse" name="getAuthorNameResponse" />
  </wsdl:operation>
……
则表示发布成功。这就是wsdl,我们可以只通过阅读它来知道服务方发布的服务。
接着就可以在客户端调用web服务了:
我在客户端用的还是java ,当然可以用其他语言,只不过代码差异。
……
String endpoint="http://localhost:8888/services/AuthorService";
Service service = new Service();
try {
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperation("getAuthorName");
String name=(String)call.invoke(new Object[]{});
System.out.println("你好!我是"+name);
……
输出:
你好!我是金超
Ok了,一个简单的返回类型为基本数据类型的webService应用完成了。

三、接下来就是怎样传回一个自定义类型:

1.添加返回Author(作者信息)的方法:(当然还得创建po:Author对象)
接口处:
/**
* 查询作者信息
* @param id 作者身份证号码
* @return
*/
public Author getAuthorInfo(String id);
实现类:
public Author getAuthorInfo(String id) {
AuthorDao ad=new AuthorDaoImpl();
Author author=ad.getAuthorInfo(id);
return author;
}
注意在创建返回的自定义对象Author是,其必须实现Serializable接口,这样可以对它进行序序列化与反序列化。
2.在wsdd中配置,采用axis提供的序列化与反序列化机制。
<beanMapping languageSpecificType= "java:com.allan.po.Author" qname= "ns1:Author" xmlns:ns1= "urn:BeanService" >
</beanMapping>
languageSpecificType 指定要序列化的与反序列化的完整路径。
Qname、xmlns:ns1 在客户端调用是使用。
3.重启应用、测试是否发布成功:
由于自定义了类型,所以会多出:
- <wsdl:types>
-<schema targetNamespace="urn:BeanService" xmlns="http://www.w3.org/2001/XMLSchema">
  <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
- <complexType name="Author">
- <sequence>
  <element name="add" nillable="true" type="xsd:string" />
  <element name="age" nillable="true" type="xsd:int" />
  <element name="id" nillable="true" type="xsd:string" />
  <element name="name" nillable="true" type="xsd:string" />
  <element name="tel" nillable="true" type="xsd:string" />
  </sequence>
  </complexType>
  </schema>
  </wsdl:types>
无错误信息,即可。

4.客户端调用:
在客户端注册自定义对象的序列化/反序列化器调用。(绿色字体部分)
……
System.out.println("*****************以下为作者的个人信息********************");
call.setOperation("getAuthorInfo");
QName qn = new QName("urn:BeanService", "Author");
call.registerTypeMapping(Author.class, qn,
new BeanSerializerFactory(Author.class, qn),
new BeanDeserializerFactory(Author.class, qn));
Author author=(Author)call.invoke(new Object[]{"330*******07101611"});
System.out.println("身份证号码:"+author.getId());
System.out.println("姓名:"+author.getName());
System.out.println("年龄:"+author.getAge());
System.out.println("电话:"+author.getAge());
System.out.println("地址:"+author.getAdd());
……
输出:
*****************以下为作者的个人信息********************
身份证号码:330*******07101611
姓名:金超
年龄:23
电话:23
地址:浙江绍兴
OK成功。

注意点:
Web.xml文件种的url配置。
地址栏种通过指定方法名与参数可以测试返回结果。如:http://localhost:8888/services/AuthorService?method=getAuthorInfo&meter=33012447

你可能感兴趣的:(DAO,tomcat,应用服务器,webservice,配置管理)