1. 程式人生 > >關於webService中的cxf開發配置

關於webService中的cxf開發配置

一、CXF兩種傳輸資料的方式: 1. JAX-WS,基於SOAP協議(Simple Object Access Protocol,簡單物件訪問協議),支援xml資料格式 2. JAX-RS,基於HTTP協議,支援xml資料格式或者json資料格式

二、開發步驟:(主要用jax-rs與maven專案整合的開發) 1.ws獨立釋出

    第一步:準備服務
        a.建jar工程、導座標ws、jetty:內建jetty web伺服器,很小巧,在公司測試,類似的web伺服器還有WebLogic、WebSphere ;
        b.準備實體類(javaBean),封裝資料
        c.準備介面、實現類(提供服務的方法)

    第二步:釋出服務
        address:網路訪問地址
        userService:具體的介面
        Endpoint.publish(address, userService);

    第三步:呼叫服務
        瀏覽器可以呼叫
        自己寫java程式作為客戶端可以呼叫

2.ws和Spring整合

    第一步:準備服務
        建war工程、導座標ws、spring相關context、web、test、junit
        準備實體類,封裝資料
        準備介面、實現類
重點注意:web.xml:Spring核心監聽、appcationContext.xml配置路徑、CXFServlet
    第二步:釋出服務
        在appcationContext.xml配置釋出服務的資訊
        網路訪問路徑:address
        服務介面及實現類
    第三步:呼叫服務(給別人呼叫)
        瀏覽器可以呼叫
        自己寫java程式作為客戶端可以呼叫
        http://localhost:埠/專案名/CXFServlet訪問路徑/userService123?wsdl

3.rs獨立釋出

第一步:準備服務
    建jar工程,匯入座標rs、jetty、slf4j-log4j12
    準備實體類,封裝資料,需要在實體類上加上註解:
       @XmlRootElement(name = "xxx")
 作用:@XmlRootElement指把哪些實體類轉成json或者xml格式
如果某個實體類不加@XmlRootElement,會報:Document is Empty
    準備介面、實現類
第二步:釋出服務
    訪問路徑:http://localhost:埠
    jaxrsServerFactoryBean.create();
第三步:呼叫服務(給別人呼叫)

4.Restful 介紹

Restful是一種程式設計風格,同樣的資源路徑,加上不同的註解之後,可以做不同的操作。
注意:它是一種設計風格,不是標準。

1.請求方式的註解
    @POST請求方式訪問         儲存操作(增,英文:Create)
    @DELETE請求方式訪問       刪除操作(刪,英文:Delete)
    @PUT請求方式訪問          修改操作(改,英文:Update)
    @GET請求方式訪問          查詢操作(查,英文:Retrieve)

2.訪問資源路徑的註解:@Path("/aaa")
    如果訪問aaa中的bbb方法  釋出的服務地址+/aaa/bbb

3.請求引數和返回值的註解:@Produces生成(方法返回值)@Consumes消費(方法引數)
    @Consumes({"application/xml","application/json"}) 傳參     
    與WebClient的type方法對應,表示傳入的複雜引數的解析型別,
    @Produces({"application/xml","application/json"}) 返回     
    與WebClient的accept方法對應,表示呼叫方法完後的返回給網路的資料解析型別

    @PathParam 簡單引數,表示路徑引數,常用於傳單個簡單引數的使用 
    eg: http://localhost:8080/userService/user/1    @Path("/user/{id2}")與@PathParam("id2")對應

    @QueryParam 簡單引數,表示路徑引數,常用於傳幾個簡單引數的使用 
    eg: http://localhost:8080/userService/user?id3=1 引數名id3與@QueryParam("id3")對應

    注:@Consumes與@PathParam和@QueryParam的區別:
    @PathParam和@QueryParam處理簡單引數型別,如String、Integer等
        主要是8種原始型別+8中包裝型別+String
    @Consumes處理自定義物件型別
    一般簡單引數用@PathParam和@QueryParam,如果引數較多,課封裝成物件,用@Consumes
    線上解析地址:http://tool.oschina.net/codeformat/json

5.JAX-RS整合Spring開發

1、準備服務
    1)建立maven的war工程,匯入座標rs、json轉換、Spring相關
    2)web.xml配置Spring核心監聽及applicationContext.xml路徑、配置核心CXFServlet
    <!-- spring配置檔案位置 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- spring核心監聽器 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- 解決控制檯webservice Encoding:ISO-8859-1 -->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- cxf servlet配置 -->
    <servlet>
    <servlet-name>CXFService</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>CXFService</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

    3)匯入實體類(封裝資料、傳輸資料)、服務介面及實現類
    4)applicationContext.xml上配置jaxrs:server、address、服務介面的實現類
    **applicationContext.xml路徑、配置核心CXFServlet如下:**
    <jaxrs:server id="xx" address="/路徑地址" >
    <jaxrs:serviceBeans>
        <bean class="介面實現類" />
        ...
    </jaxrs:serviceBeans>
    <!--這是內建攔截器,直接放這用 -->
    <jaxrs:inInterceptors>
        <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
    </jaxrs:inInterceptors>
    <jaxrs:outInterceptors>
        <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
    </jaxrs:outInterceptors>
</jaxrs:server>
2、釋出服務
    啟動工程即釋出服務
    訪問路徑:
    伺服器根目錄地址+web.xml配置+applicationContext.xml 的address配置 +類@Path+方法@Path,檢視當前訪問路徑是否都書寫正確,且web.xml中,路徑一般為為:/xx/*,目的是在mapping中不讓其對映所有<servlet-mapping>。
比如: http://localhost:9996/cxf_rs_spring/services/myService11111/userService/user
   localhost:9996/cxf_rs_spring對應伺服器根目錄地址
    services與web.xml對應
    myService11111與applicationContext.xml的address對應
    userService與服務介面的@Path對應
    user與方法上@Path對應
3、呼叫服務(給別人呼叫)
    1)瀏覽器呼叫
    2)WebClient呼叫

注意使用時路徑問題,很容易錯!!!