webservice第二篇【自定義webservice服務、soa、uddi概念、soap協議】

自定義webservice服務

咱們在上一章節中已經使用wsimport生成本地代理來調用webservice的服務了,其實咱們本身寫的web應用程序也是能夠發佈webservice的java

咱們發佈了webservice的話,那麼其餘人也是能夠調用咱們本身寫的webservice!android

那麼咱們怎麼自定義webservice而後發佈出去呢???ios

在jdk 1.6 版本之後 ,經過jax-ws 包提供對webservice的支持 web

  • 該方式經過註解的方式來聲明webservice
  • 經過 jdk EndPoint.publish()發佈webserive服務

快速入門

寫一個實體:windows

public class Phone {
    private String name;//操做系統名
    private String owner;//擁有者 
    private int total;//市場佔有率
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getOwner() {
        return owner;
    }
    public void setOwner(String owner) {
        this.owner = owner;
    }
    public int getTotal() {
        return total;
    }
    public void setTotal(int total) {
        this.total = total;
    }

}

發佈service,經過註解來讓WSDL文件更加可讀…瀏覽器

package cn.it.ws.d;

import cn.it.ws.model.Phone;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/* *手機的業務類,該業務類經過webservice 對外提供服務 * 1. 聲明: @webservice * 2. 發佈 EndPoint */

@WebService (serviceName="PhoneManager",//修改服務名
   targetNamespace="http://dd.ws.it.cn") //修改命名空間 ,默認包名,取反
//聲明該業務類 對外提供webservice服務 ,默認只是對public 修飾的方法對外以webservice形式發佈
public class PhoneService {

/**@WebMethod(operationName="getMObileInfo"): 修改方法名 * @WebResult(name="phone"):修改返回參數名 * @WebParam(name="osName"):修改輸入參數名 */

    @WebMethod(operationName="getMObileInfo")
    public @WebResult(name="phone") Phone getPhoneInfo(@WebParam(name="osName")String osName){
        Phone phone=new Phone();
        if(osName.endsWith("android")){
            phone.setName("android");phone.setOwner("google");phone.setTotal(80);
        }else if(osName.endsWith("ios")){
            phone.setName("ios");phone.setOwner("apple");phone.setTotal(15);
        }else{
            phone.setName("windows phone");phone.setOwner("microsoft");phone.setTotal(5);
        }
        return phone;
    }
    @WebMethod(exclude=true)//把該方法排除在外
    public void sayHello(String city){
        System.out.println("你好:"+city);
    }
    private void sayLuck(String city){
        System.out.println("好友:"+city);
    }
     void sayGoodBye(String city){
        System.out.println("拜拜:"+city);
    }
    protected void saySayalala(String city){
         System.out.println("再見!"+city);
     }

    public static void main(String[] args) {
        String address1="http://127.0.0.1:8888/ws/phoneService";
// String address2="http://127.0.0.1:8888/ws/phoneManager";
/** * 發佈webservice服務 * 1.address:服務的地址 * 2:implementor 服務的實現對象 */

        Endpoint.publish(address1, new PhoneService());
// Endpoint.publish(address2, new PhoneService());
        System.out.println("wsdl地址 :"+address1+"?WSDL");
    }

}
  1. 在類上添加@WebService註解,表明發佈一個WebService服務
  2. 經過EndPoint(端點服務)發佈一個webService。Endpoint也是jdk提供的一個專門用於發佈服務的類,它的publish方法接收兩個參數,一個是本地的服務地址,二是提供服務的類。它位於javax.xml.ws.*包中。
  3. Endpoint.publish(String address, Object implementor) 靜態方法在給定地址處針對指定的實現者對象建立併發布端點
  4. 給類添加上@WebService註解後,類中全部的非靜態方法都將會對外公佈
  5. 若是但願某個方法不對外公開,能夠在方法上添加@WebMethod(exclude=true),阻止對外公開。
  6. 若是一個類上,被添加了@WebService註解,則必須此類至少有一個能夠公開的方法,不然將會啓動失敗。
    protected、private、final、static方法不能對外公開
@WebService // 添加了此註解,表明是一個WebService
public class HelloWorld {
    // 非 static final private 方法默認會發布
    public String sayHi(String name) {
        return "hello" + name;
    }
    @WebMethod(exclude=true)
    public void exclude(){
        // 被註解排除的方法
    }
    protected void protected1(){
        //受保護的方法默認不發佈
    }
    private void private1(){
        // 私有方法默認不發佈
    }
    public static void static1(){
        // static 方法默認不發佈
    }
    public final void final1(){
        // final 方法默認不發佈
    }
}

這裏寫圖片描述

生成的webservice可以在瀏覽器訪問markdown

這裏寫圖片描述


SOAP協議

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

目前WebService的協議主要有SOAP1.1和1.2。架構

  • 二者的命名空間不一樣。
  • SOAP1.1版本與SOAP1.2版本在頭信息上存在差別。
    • SOAP1.1存在SOAPAction的請求頭。
    • SOAP1.2沒有SOAPAction的請求頭。
  • 基於SOAP1.1生成的WSDL和基於SOAP1.2生成的WSDL也不同。
    主要看命名空間。
  • 在CXF中兩種協議請求的方式也不同。
    • 1.1爲content-Type:text/xm;charset=UTF-8
    • 1.2爲content-Type:application/soap+xml;charset=UTF-8

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

SOA、UDDI概念

SOA

Soa(Service-Oriented Architecture)面向服務的架構,它是一種思想,IBM大力倡導是即插即用的,IBM大力提倡,但願以組裝電腦的方式來開發應用併發

組成:app

  • 面向web的服務,面向web的組件 :WebService : 硬盤、cpu、內存條
  • 企業服務總線 (EnterPrise Service Bus :ESB)。主板

uddi

uddi (Universal Description, Discovery and Integration)統一描述、發現、集成

  • 它是目錄服務,經過該服務能夠註冊和發佈webservcie,以便第三方的調用者統一調用
相關文章
相關標籤/搜索