1. 程式人生 > >生成webservice介面以及通過客戶端呼叫介面。

生成webservice介面以及通過客戶端呼叫介面。

1:新建Maven專案

目錄結構

lib包是cxf相關JAR包。

:使用CXF+Spring編寫併發布WebService

在web.xml中配置如下:

  1. <servlet>
  2.     <servlet-name>CXFServlet</servlet-name>
  3.     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  4.     <load-on-startup>1</load-on-startup>
  5.   </
    servlet>
  6.   <servlet-mapping>
  7.     <servlet-name>CXFServlet</servlet-name>
  8.     <url-pattern>/*</url-pattern>
  9.   </servlet-mapping>
  1. package Service;
    import javax.jws.WebService;

    @WebService
    public interface HelloWorld {
    public String  sayHi();
    }

接著,在建立TestServiceImpl.java,程式碼如下:

  1. package Service;


    import java.util.Date;


    import javax.jws.WebService;
    @WebService(endpointInterface="Service.HelloWorld",serviceName="HelloWorld")  
    public class HelloWorldImpl implements HelloWorld {


    public String sayHi() {
    // TODO Auto-generated method stub
    return  "你好世界。"+new Date();
    }


    }
CXF中採用註解的方式宣告哪些類作為WebService進行釋出,

@WebService:宣告webservice介面;

@WebService(endpointInterface="Service.HelloWorld",serviceName="HelloWorld"):宣告這個類是TestService介面的實現類。
        其次,在WEB-INF下新建cxf-servlet.xml檔案,程式碼如下:

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.     xmlns:jaxws="http://cxf.apache.org/jaxws"
  5.     xsi:schemaLocation="  
  6.         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  7.         http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
  8.     <importresource="classpath:META-INF/cxf/cxf.xml"/>
  9.     <importresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
  10.     <importresource="classpath:META-INF/cxf/cxf-servlet.xml"/>
  11. <jaxws:server id="HelloWorld" serviceClass="Service.HelloWorld" address="/helloWorld">  
        <jaxws:serviceBean>  
            <bean class="Service.HelloWorldImpl" />  
        </jaxws:serviceBean>  
      </jaxws:server> 
  12. </beans>
id:自定義,serviceClass:介面類的完整包名,address:此介面的訪問路徑,<jaxws:serviceBean/>標籤用於配置介面的實現類

        然後,在web.xml中配置啟動時載入cxf-servlet.xml,並配置Spring的監聽器,程式碼如下:

  1. <context-param>
  2.     <param-name>contextConfigLocation</param-name>
  3.     <param-value>/WEB-INF/cxf-servlet.xml</param-value>
  4.   </context-param>
  5.   <listener>
  6.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  7.   </listener>

web.xml檔案的完整內容如下:

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appversion="2.5"
  3.     xmlns="http://java.sun.com/xml/ns/javaee"
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7.   <context-param>
  8.     <param-name>contextConfigLocation</param-name>
  9.     <param-value>/WEB-INF/cxf-servlet.xml</param-value>
  10.   </context-param>
  11.   <listener>
  12.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  13.   </listener>
  14.   <servlet>
  15.     <servlet-name>CXFServlet</servlet-name>
  16.     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  17.     <load-on-startup>1</load-on-startup>
  18.   </servlet>
  19.   <servlet-mapping>
  20.     <servlet-name>CXFServlet</servlet-name>
  21.     <url-pattern>/*</url-pattern>
  22.   </servlet-mapping>
  23. </web-app>

        最後,釋出到tomcat中並啟動,在瀏覽器中輸入http://localhost:8080/cxftest/services/testService?wsdl,釋出成功!

2:進行服務端的呼叫

2.1:新建Java專案。new Web Service Client.輸入wsdl地址。自動生成相關程式碼。紅色框就是根據你的客戶端所生成的程式碼。

2.2:新建Main方法呼叫HelloWorldPoxy進行測試即可。


2.3:結果如圖:



3:本質理解

一次Web service請求的流程

一次web service請求的本質:

    1)客戶端向伺服器端傳送了一個soap訊息(http請求+xml片斷)

    2) 器端處理完請求後向客戶端返回一個soap訊息

  那麼它的流程是怎樣的呢?