Axis框架開發web service

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,用來加載springcontextSpringBeanProvier運行的前提
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();

           }

      }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發佈了24 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章