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
实现Spring Boot整合Axis实现WebService服务端,可以按照以下步骤进行: 1. 添加Axis依赖 在pom.xml文件中添加以下Axis依赖: ```xml <dependency> <groupId>axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> </dependency> ``` 2. 配置Axis Servlet 在Spring Boot的配置类中添加以下Servlet配置: ```java @Bean public ServletRegistrationBean<AxisServlet> axisServlet() { AxisServlet servlet = new AxisServlet(); ServletRegistrationBean<AxisServlet> registration = new ServletRegistrationBean<>(servlet, "/services/*"); registration.addInitParameter("axis.servicesPath", "/services"); registration.addInitParameter("axis.wsddPath", "classpath:wsdd/AxisServlet.wsdd"); return registration; } ``` 这样就可以将Axis Servlet注册到Spring Boot中,并通过"/services/*"路径映射到WebService服务。 3. 定义WebService服务 通过Axis提供的注解来定义WebService服务。 ```java @AxisService public class HelloWebService { @WebMethod public String sayHello(String name) { return "Hello, " + name + "!"; } } ``` 注意:要确保WebService服务类被Spring Boot扫描到,可以通过在配置类上添加`@ComponentScan`注解来实现。 4. 配置wsdd文件 在src/main/resources目录下创建wsdd文件夹,并创建AxisServlet.wsdd文件,配置如下: ```xml <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="HelloWebService" provider="java:RPC"> <parameter name="className" value="com.example.demo.webservice.HelloWebService"/> <parameter name="allowedMethods" value="*"/> </service> </deployment> ``` 这样就配置好了WebService服务端,可以启动Spring Boot应用并访问WebService服务了。例如,在浏览器中访问`http://localhost:8080/services/HelloWebService?wsdl`来查看WebService服务的WSDL描述文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值