1. 程式人生 > >WebService(註解),CXF框架(jax-ws,Jax-rs,與spring整合)

WebService(註解),CXF框架(jax-ws,Jax-rs,與spring整合)

1     webservice的註解

1.1   案例:

模擬查詢天氣資訊,返回三天的天氣情況。

1.1.1       實現步驟

服務端:

第一步:建立一個天氣資訊pojo,包含天氣的資訊、最高、最低溫度、日期。

第二步:編寫SEI

第三步:編寫SEI實現類,返回天氣list

第四步:釋出Webservice。

1.1.2       程式碼實現

1.1.2.1    Pojo

  1. publicclass WeatherModel {  
  2.     private String info;  
  3.     privateint maxTemp;  
  4.     privateint minTemp;  
  5.     private Date date;  

1.1.2.2    SEI

天氣查詢SEI,返回三天的天氣情況

  1. @WebService
  2. publicinterface WeatherInterface {  
  3.     List<WeatherModel> queryWeather(String cityName);  
  4. }  


1.1.2.3    SEI實現類

實現類使用@WebService實現wsdl文件元素名稱的修改

  1. @WebService
    (  
  2.         //endpointInterface="com.itheima.weather.service.WeatherInterface" //可以指定SEI介面
  3.         name="WeatherInterface"//不使用SEI介面時規範portType的名稱
  4.         serviceName="WeatherService",   //服務檢視的名稱
  5.         portName="WeatherPort",         //Service節點中port節點的name屬性
  6.         targetNamespace="http://weather.itheima.com/"
       //wsdl的名稱空間  
  7. )  
  8. publicclass WeatherInterfaceImpl implements WeatherInterface {  
  9.     @Override
  10.     @WebMethod/*(exclude=true)*/
  11.     @WebResult(name="WeatherInfo")  
  12.     public List<WeatherModel> queryWeather(@WebParam(name="cityName")String cityName) {  
  13.         System.out.println("客戶端傳送的城市:" + cityName);  
  14.         //查詢天氣資訊
  15.         List<WeatherModel> info = getWeatherInfo(cityName);  
  16.         //返回天氣資訊
  17.         return info;  
  18.     }  
  19.     private List<WeatherModel> getWeatherInfo(String cityName) {  
  20.         List<WeatherModel> weatherList = new ArrayList<>();  
  21.         Calendar calendar = Calendar.getInstance();  
  22.         //第一天
  23.         WeatherModel model1 = new WeatherModel();  
  24.         model1.setInfo("雷陣雨");  
  25.         model1.setMaxTemp(31);  
  26.         model1.setMinTemp(22);  
  27.         model1.setDate(calendar.getTime());  
  28.         weatherList.add(model1);  
  29.         //第二天
  30.         WeatherModel model2 = new WeatherModel();  
  31.         model2.setInfo("多雲");  
  32.         model2.setMaxTemp(33);  
  33.         model2.setMinTemp(25);  
  34.         calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1);  
  35.         model2.setDate(calendar.getTime());  
  36.         weatherList.add(model2);  
  37.         //第三天
  38.         WeatherModel model3 = new WeatherModel();  
  39.         model3.setInfo("多雲");  
  40.         model3.setMaxTemp(35);  
  41.         model3.setMinTemp(25);  
  42.         calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1);  
  43.         model3.setDate(calendar.getTime());  
  44.         weatherList.add(model3);  
  45.         return weatherList;  
  46.     }  
  47. }  


1.1.2.4    客戶端

  1. publicclass WeatherClient {  
  2.     publicstaticvoid main(String[] args) throws Exception {  
  3.         //建立服務檢視
  4.         Service service = Service.create(new URL("http://127.0.0.1:12345/weather"),   
  5.                 new QName("http://service.weather.itheima.com/""WeatherInterfaceImplService"));  
  6.         //從服務檢視獲得protType物件
  7.         WeatherInterfaceImpl weatherInterfaceImpl = service.getPort(WeatherInterfaceImpl.class);  
  8.         //呼叫服務端方法
  9.         List<WeatherModel> list = weatherInterfaceImpl.queryWeather("北京");  
  10.         //顯示天氣資訊
  11.         for (WeatherModel weatherModel : list) {  
  12.             System.out.println(weatherModel.getDate().toGregorianCalendar().getTime().toLocaleString());  
  13.             System.out.println(weatherModel.getInfo());  
  14.             System.out.println(weatherModel.getMaxTemp());  
  15.             System.out.println(weatherModel.getMinTemp());  
  16.         }  
  17.     }  
  18. }  


1.2   要規範wsdl需要使用到webservice註解

1.2.1       @Webservice

@WebService(

              //endpointInterface="com.itheima.weather.service.WeatherInterface"//可以指定SEI介面

              name="WeatherInterface",//不使用SEI介面時規範portType的名稱

              serviceName="WeatherService",   //服務檢視的名稱

              portName="WeatherPort",                   //Service節點中port節點的name屬性

              targetNamespace="http://weather.itheima.com/"   //wsdl的名稱空間

                     )

1.2.2       @WebMethod

如果不指定@WebMethod註解預設是吧實現類中所有的public方法都發布成服務方法。

如果類中有的public方法不想釋出成服務,就可以使用@WebMethod(exclude=true)把此方法排除,也就是不釋出為webservice方法。

注意:每個Porttype中,必須有一個public方法並且不能標註為@WebMethod(exclude=true)

1.2.3       @WebParam、@WebResult

可以規範引數的名稱

@WebResult(name="xxxx")修改返回值的元素的父標籤名字

@WebParam(name="xxxxx")修改傳入引數的元素的父標籤名字

2     CXF框架

2.1   什麼是CXF

Apache CXF = Celtix + Xfire,開始叫 Apache CeltiXfire,後來更名為 Apache CXF 了,以下簡稱為 CXF。Apache CXF 

是一個開源的 web Services 框架,CXF 幫助您構建和開發 web Services ,它支援多種協議,比如:SOAP1.1,1,2、XML/HTTP、RESTful  或者 CORBA。

RESTful:一種風格而不是一個協議。它理念是網路上的所有事物都被抽象為資源,每個資源對應一個唯一的資源識別符號。

CORBA(Common Object Request Broker Architecture公共物件請求代理體系結構,早期語言使用的WS。C,c++,C#)

Cxf是基於SOA匯流排結構,依靠spring完成模組的整合,實現SOA方式。

靈活的部署:可以執行在Tomcat,Jboss,Jetty(內建),weblogic上面。

2.2   CXF的安裝及配置

從官網下載:cxf.apache.org

學習使用的版本是:3.0.2

使用的方法,直接把cxf的jar包新增到工程中就可以了。

環境配置

JAVA_HOME 需要jdk的支援

CXF_HOME  解壓目錄(bin的上層目錄) 需要使用bin目錄的可執行命令生成客戶端程式碼

 

path = %JAVA_HOME%\bin;%CXF_HOME%\bin;

2.3   使用CXF實現java-ws規範的webservice

Soap1.1:

2.3.1       服務端

實現步驟:

第一步:建立一Java工程。

第二步:匯入jar包匯入cxf的jar包共138個。

第三步:編寫SEI,在SEI上新增@Webservice註解。

第三步:編寫SEI實現類。需要實現SEI介面,可以不加@Webservice註解

第四步:釋出服務。

1、建立一個JaxWsServerFactoryBean物件。

2、設定服務的釋出地址,是一個http url

3、設定SEI介面

4、設定SEI實現類物件

5、呼叫create方法釋出服務。

2.3.2       程式碼實現

2.3.2.1    SEI

  1. @WebService
  2. publicinterface WeatherInterface {  
  3.     String queryWeather(String cityName);  
  4. }  


2.3.2.2    實現類

  1. publicclass WeatherInterfaceImpl implements WeatherInterface {  
  2.     @Override
  3.     public String queryWeather(String cityName) {  
  4.         System.out.println("城市名稱:" + cityName);  
  5.         String result = "多雲";  
  6.         return

    相關推薦

    WebService(註解),CXF框架(jax-ws,Jax-rs,spring整合)

    1     webservice的註解 1.1   案例: 模擬查詢天氣資訊,返回三天的天氣情況。 1.1.1       實現步驟 服務端: 第一步:建立一個天氣資訊pojo,包含天氣的資訊、最高、最低溫度、日期。 第二步:編寫SEI

    CXF系列之JAX-RSCXFspring整合釋出REST服務

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transition

    WebService學習之旅(三)JAX-WSSpring整合釋出WebService

    Spring本身就提供了對JAX-WS的支援,有興趣的讀者可以研究下Spring的Spring-WS專案,專案地址: http://docs.spring.io/spring-ws/sites/1.5/downloads/releases.html 基於Sp

    WebServiceCXF框架Spring整合釋出服務入門

    1、建立WEB專案,將CXF與SPRING的包引入專案(在下載的CXF的lib包裡,裡面已經整合好了,直接引入進去就行了) 2、建立介面 package com.ckinghan.cxf.server.service; import javax.jws

    WebServiceCXF框架入門小程式

    其實CXF的服務建立及釋出相當簡單,建立方法如下: 安裝JDK1.7或以上(注意要設定環境變數,javac命令必須可用) 下載CXF,建議去官網下。 將下載 的CXF解壓,並配置環境變數(與JDK的環境變數配置差不多,配置完成後,需要wsdl2java -h

    釋出webservice 方式 cxf框架

    今天我在專案中需要釋出webservice服務,可是在這個webservice已經發布了一個服務,第二個感覺無從下手,感覺就是一個地址 怎麼能釋出兩個服務,而且我一開始只知道在main中釋出,專案中使用的是spring配置方式釋出 main中釋出

    使用CXFSpring整合實現RESTFul WebService

    以下引用與網路中!!!     一種軟體架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和伺服器互動類的軟體。基於這個風格設計的軟體可以更簡潔,更有層次,更易於實現快取等機制。   &nbs

    WebService入門 - CXFSpring整合 (maven專案)

    可參考CXF官網-使用Spring編寫服務文件:http://cxf.apache.org/docs/writing-a-service-with-spring.html 1.新增依賴 <!-- spring與cxf 整合webservice 所需 -->

    webservicecxf實現[web專案中基於mavenspring整合]

    webservice現開發的已實現元件不少,使用過的就有xfire及cxf. cxc基於maven與spring整合過程如下: STEP 1. 依賴包新增 在pom.xml檔案的標籤中增加如下(版本號依個人需要調整): <depende

    CXFSpring整合

          WebService的主要目標是跨平臺的可互操作性。為了達到這一目標,WebService完全基於XML(可擴充套件標記語言)、XSD(XMLSchema)等獨立於平臺、獨立於軟體供應商的標準,是建立可互操作的、分散式應用程式的新平臺。簡單的說WebSe

    一種古老的技術:axis1.4操作WebService,實現Spring整合

    這是pom檔案中需要的axis需要的依賴 <dependency> <groupId>org.springframework</groupId> <artifactId>spr

    訊息佇列(三)--spring整合(採用註解消費佇列)

    一、簡介 這裡採用註解方式使用kafka。 二、新增maven依賴 <dependency> <groupId>org.springframework.kafka&l

    WebService Spring整合Jax-rs規範 使用CXF框架Restful的程式設計風格 編寫服務端

    前提是專案SSM框架搭建好。 搭建cxf框架, 一、首先,將框架所需要的jar匯入,pom.xml檔案中 <!-- cxf 進行rs開發 必須匯入 --> <dependency> <groupId>org.apache.cx

    Spring Boot用Cxfjax-ws開發WebService

    contex 字符串 scope nap 1.0 地址 method ons lean 首先上項目的pom.xml: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http

    webservice服務端釋出呼叫 JAX-WS cxf axis2

    之前專案中需要用到webservice的釋出最後做出了幾個例子如下: 1 基礎 JAX-WS例項 介面釋出: package com.test; import javax.jws.WebMethod; import javax.jws.WebSer

    spring註解方式,使用jax-ws配置webservice,適合小白。看不會你打死我!

    前提條件:java –spring框架,註解(能夠掃描@webService標籤) 1.   經過一天的煎熬和掙扎,終於把webservice的其中非常簡單的配置方法給弄明白了,就是JAX-WS配置webservice,真的非常簡單,只是細節一一旦出了點問題,全盤皆輸,為了

    webservice快速入門-使用JAX-WS註解的方式快速搭建ws服務端和客戶端(一)

    WEBSERVICE快速入門的示例: 首先定義介面: package com.whaty.platform.ws.server; import javax.jws.WebService; /** * @className:IMyservice.java * @De

    Java JAX-WSJAX-RS webservice的區別和特點

    Java,,JAX-RS,webservice,區別,特點 首先說明一下:jaxb是java xml binding,是jax-rs jax-ws底層使用的物件與xml之間轉換的工具 全稱是JavaTM API forXML-Based WebServices JA

    WebService:JAX-WS實現WebService

    nload cal data- pos 接口 rri implement publish sni WebService和Java核心技術中的RMI一樣用於實現異構平臺上的應用程序之間數據的交互,唯一不同的是這樣的技術屏蔽了語言之間的差異。這也是其大行其道