使用CXF發布webservice服務及注意要點

來源:互聯網
上載者:User

標籤:local   開發   輕量   oca   spring   api   十分   上交   http   

一、概念1、什麼是webservice

Web service是一個平台獨立的,低耦合的,自包含的、基於可程式化的web的應用程式,可使用開放的XML標準來描述、發布、發現、協調和配置這些應用程式,用於開發分布式的互操作的應用程式。

2、wsdl

網路服務描述語言是一個用來描述Web服務和說明如何與Web服務通訊的XML(標準通用標記語言 (SGML)的子集)語言。為使用者提供詳細的介面說明書。

3、soap

簡易物件存取通訊協定 (SOAP)是交換資料的一種協議規範,是一種輕量的、簡單的、基於XML(標準通用標記語言 (SGML)下的一個子集)的協議,它被設計成在WEB上交換結構化的和固化的資訊。

4、JAX-WS

一種 Java 規範,名為 JAX-WS(JSR-224),全稱 Java API for XML-Based Web Services,可以將規範理解為官方定義的一系列介面。即一般所說的SOAP風格。

5、JAX-RS

為了讓 WS 的開發與使用變得更加簡單、更加輕量級,於是出現了另一種風格的 WS,名為 JAX-RS(JSR-339),全稱 Java API for RESTful Web Services,同樣也是一種規範,同樣也有若干實現,cxf是其中比較著名的一種。

二、使用cxf發布soap風格的webservice服務1、如何發布服務直接看這篇:Web Service 那點事兒(2)—— 使用 CXF 開發 SOAP 服務
文章講的十分明白易懂,如果想快速上手,跳過文章的前兩部分,直接看第三部分:“3. 在 Web 容器中使用 Spring + CXF 發布 WS”2、可能出現的問題(1)最佳化實踐在“Web Service 那點事兒(2)—— 使用 CXF 開發 SOAP 服務 ”這篇文章中,介面唯寫加了最基本的註解,比如下面這樣:
 
  1. @WebService
  2. public interface HelloService {
  3. String say(String name);
  4. }

這樣雖然也能用,但是在實際使用中容易出現各種各樣的奇怪問題,所以建議把介面名、命名空間、參數聲明之類的都加上,比如下面這樣:
 
  1. @WebService(targetNamespace="http://service.sky.com/",name="GoodDay",serviceName="GoodDay")
  2. public interface GoodDay {
  3. @WebMethod(action = "http://service.sky.com/SayHello")
  4. public String SayHello(@WebParam(name = "uname",targetNamespace="http://service.sky.com/")String uname);
  5. }

(2)javax.xml.bind.UnmarshalException: 意外的元素 (uri:"http://service.sky.com/", local:"uname")。所需元素為<{}uname>出現原因是為參數設定了參數名,卻沒有設定命名空間。比如,介面寫成如下這樣,就很容易出現這個錯誤。
 
  1. @WebService(targetNamespace="http://service.sky.com/",name="GoodDay",serviceName="GoodDay")
  2. public interface GoodDay {
  3. @WebMethod(action = "http://service.sky.com/SayHello")
  4. public String SayHello(@WebParam(name = "uname")String uname);
  5. }
解決方案是為參數加上命名空間,如下所示:
 
  1. @WebService(targetNamespace="http://service.sky.com/",name="GoodDay",serviceName="GoodDay")
  2. public interface GoodDay {
  3. @WebMethod(action = "http://service.sky.com/SayHello")
  4. public String SayHello(@WebParam(name = "uname",targetNamespace="http://service.sky.com/")String uname);
  5. }
當然這種寫法很麻煩,如果有其他辦法請大家不吝賜教。


來自為知筆記(Wiz)

使用CXF發布webservice服務及注意要點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.