Axis框架开发web service
1. 搭建axis环境
l 建立自己的web工程bookstore
l 把当前目录下的Axis.rar解压缩到一个文件夹,这里假设你解到C:/axis,把C:/axis/webapps/axis/WEB-INF/lib目录下的所有.jar文件复制到你的这个web应用程序的WEB-INF/lib下,再把C:/axis/webapps/axis/WEB-INF目录下的web.xml复制到你的web应用程序的WEB-INF下。这个步骤相当于在你的web应用程序中配置了Axis,若要集成spring则需要将当前目录下的lib/spring.jar复制到你的这个web应用程序的WEB-INF/lib下,以支持spring集成.
2. 配置环境变量
将当前目录下的lib文件夹下的所有文件复制到d:/lib下,修改环境变量CLASSPATH,在后边加上下边这一段:
d:/lib/axis.jar;d:/lib/jaxrpc.jar;d:/lib/commons-logging-1.0.4.jar;d:/lib/commons-discovery-0.2.jar;d:/lib/jaxrpc.jar;d:/lib/commons-logging-1.0.4.jar;d:/lib/saaj.jar;d:/lib/wsdl4j-1.5.1.jar;
3. 建立服务类
l 图书实体类:Book
package com.bookstore.model;
public class Book {
private String name;
private String ISDN;
private String author;
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getISDN() {
return ISDN;
}
public void setISDN(String isdn) {
ISDN = isdn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
l 业务逻辑类:BookService
package com.bookstore.service;
public class BookService {
public void printBook(com.bookstore.model.Book book){
System.out.println("name:"+book.getName());
System.out.println("ISDN:"+book.getISDN());
System.out.println("author:"+book.getAuthor());
}
}
4. 创建deploy.wsdd
在工程的WEB-INF下创建文件deploy.wsdd,编写deploy.wsdd发布文件,typeMapping定义book类的序列化配置
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="BookService" provider="java:RPC">
<parameter name="className" value="com.bookstore.service.BookService"/>
<parameter name="allowedMethods" value="*"/>
<typeMapping encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
qname="ns1:Book"
languageSpecificType="java:com.bookstore.model.book.Book"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
name="Book"/>
</deployment>
5. 生成server-config.wsdd
利用deploy.wsdd生成server-config.wsdd(axis的配置文件),无论deploy.wsdd存放于什么位置,生成的server-config.wsdd都存在于localhost:8080/bookstore/WEB-INF下
java org.apache.axis.client.AdminClient -lhttp://localhost:8080/bookstore/services/AdminService deploy.wsdd
6. 生成stub client
生成文件包括:
Book.java,
BookService_PortType.java
BookServiceService.java
BookServiceServiceLocator.java
BookServiceSoapBindingStub.java
具体用法参考第6步
java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/bookstore/services/BookService?wsdl -p com.bookstore.client
7. 编写客户端代码访问服务
package com.bookstore.test;
public class BookServiceTest {
public static void main(String[] args){
try {
com.bookstore.client.Book book=new com.bookstore.client.Book();
book.setName("读者");
book.setISDN("ISO9001-4532d-107-8970");
book.setAuthor("fool");
com.bookstore.client.BookServiceService bookService=new com.bookstore.client.BookServiceServiceLocator();
com.bookstore.client.BookService_PortType client=bookService.getBookService();
client.printBook(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
8. 集成spring
l 要是web服务的类能够和spring环境一起工作,有一些额外的工作要做,web服务的提供类必须有spring管理,因此在调用web服务时需要从web应用环境中去的代表服务类的bean,完成这一步用到了一个开放源代码组织提供的几个类http://opensource.atlassian.com/projects/spring/browse/SPR-371
SpringAxisServlet.java,SpringBeanProvider.java,SpringBeanRPCPrvider.java
SpringAxisServlet:继承自AxisServlet,用来加载spring的context,SpringBeanProvier运行的前提
SpringBeanProvider:用于获取spring context中的bean
SpringBeanRPCProvider:调用SpringBeanProvider来获得通过Spring IoC注入后的web 服务bean,这三个类在当前目录下的spring-axis文件夹下可以找到
l 将上述三个类文件复制到你的web工程中
l 建立spring业务类SpringService
package com.bookstore.service;
public class SpringService {
private String user;
public void callUser(){
System.out.println("Hi,"+user);
System.out.println("Date:"+new java.util.Date());
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
}
l WEB-INF下建立spring配置文件AxisServlet-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean
name="SpringService"
class="com.bookstore.service.SpringService"
>
<property name="user">
<value>Wang Gai</value>
</property>
</bean>
</beans>
l 在web.xml中需要加入如下配置:
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
com.bookstore.axis.SpringAxisServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationcontext.xml</param-value>
</init-param>
</servlet>
l deploy.wsdd配置如下:
<service name="SpringTest" provider="Handler" style="rpc">
<parameter name="handlerClass" value="com.bookstore.axis.SpringBeanRPCProvider"/>
<parameter name="springBean" value="SpringService"/>
<parameter name="allowedMethods" value="*"/>
</service>
l 生成server-config.wsdd
java org.apache.axis.client.AdminClient -lhttp://localhost:8080/bookstore/services/AdminService deploy.wsdd
l 生成stub client
java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/bookstore/services/SpringService?wsdl -p com.bookstore.client.spring
l 编写客户端程序测试服务
package com.bookstore.test;
public class SpringServiceTest {
public static void main(String[] args){
try {
com.bookstore.client.spring.SpringServiceService springServiceService=new com.bookstore.client.spring.SpringServiceServiceLocator();
com.bookstore.client.spring.SpringService_PortType client=springServiceService.getSpringService();
client.callUser();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}