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();
}
}