<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0

    共享 Web 服務(wù)

    developerWorks
    第?1?頁,共?11?頁 后一頁


    對本教程的評價

    幫助我們改進這些內(nèi)容


    級別: 中級

    Nicholas Chase (ibmquestions@nicholaschase.com) Backstop Media

    2006 年 10 月 19 日

    面向服務(wù)的體系結(jié)構(gòu)(Service-Oriented Architectures,SOA)當(dāng)前強調(diào)的重點在 Web 服務(wù)上,但很容易被所傳播的各種信息搞得昏頭轉(zhuǎn)向。本系列教程將對主要 Web 服務(wù)規(guī)范進行全面說明,從簡單對象訪問協(xié)議(Simple Object Access Protocol,SOAP)一直介紹到 WS Business Process Execution Language (WS-BPEL)。在第 2 部分中,您將了解有關(guān) Web 服務(wù)描述語言的內(nèi)容,因為 Daily Moon Classified Department 需要使用 WSDL 來描述其 Web 服務(wù),以便其他人能夠方便地從任何編程語言或平臺創(chuàng)建客戶機訪問此服務(wù)。

    開始之前

    本教程旨在幫助您了解 Web 服務(wù)描述語言 (Web Services Description Language)。本教程適合希望通過使用 WSDL 公開自己的服務(wù)供他人使用的開發(fā)人員,同時也適合擁有希望訪問的服務(wù)的 WSDL 而需要創(chuàng)建客戶機的開發(fā)人員。

    為了學(xué)習(xí)本教程,您應(yīng)該具有 SOAP 的基本知識(可以通過閱讀本系列教程的第 1 部分了解 SOAP)和 XML 的基本知識。WSDL 與編程語言無關(guān),但本教程最后的示例使用了 Java 和 Apache Axis2 項目。不過,其中的概念也適用于任何編程語言和環(huán)境。與此類似,本教程側(cè)重于通常實現(xiàn)的 WSDL 1.1,但即將推出的 WSDL 2.0 的概念也與此相同,本教程將對二者的基本差異進行說明。

    關(guān)于本系列

    本系列教程以假想的報社 Daily Moon 為例,為了提高在競爭激烈的環(huán)境中的工作效率,其員工將使用各種 Web 服務(wù)來創(chuàng)建工作流系統(tǒng),我們將在此過程中講解各個 Web 服務(wù)基本概念。

    第 1 部分比較簡單,說明了 Web 服務(wù)背后的基本概念,并演示了如何使用 SOAP(后續(xù)教程討論的大部分內(nèi)容的基礎(chǔ)規(guī)范)來將 Classifieds Department 連接到內(nèi)容管理系統(tǒng)。

    在第 2 部分中,Classifieds Department 將開展進一步的工作:使用 Web 服務(wù)描述語言 (WSDL) 定義 Web 服務(wù)預(yù)期產(chǎn)生的消息,從而使團隊更方便地創(chuàng)建服務(wù)以及連接到服務(wù)的客戶機。

    在第 3 部分中,團隊希望準(zhǔn)備一系列服務(wù),并希望能方便地查找這些服務(wù)。與此對應(yīng),統(tǒng)一描述、發(fā)現(xiàn)和集成(Universal Description, Discovery and Integration,UDDI)提供了可用服務(wù)的可搜索注冊中心,以便使自己的服務(wù)為其他人所注意。

    第 4 部分和第 5 部分討論 WS-Security 和 WS-Policy,將詳細(xì)說明如何保證該報社的服務(wù)的安全,以及團隊為了訪問這些剛提供了安全保護的服務(wù)需要進行哪些更改。

    第 6 部分重點討論互操作性,因為必須從單個系統(tǒng)訪問來自幾個不同實現(xiàn)的服務(wù)。這一部分還將 WS-I 證書中涉及的要求和測試。

    最后,第 7 部分演示如何使用業(yè)務(wù)流程執(zhí)行語言(Business Process Execution Language,WS-BPEL)來從各個服務(wù)創(chuàng)建復(fù)雜應(yīng)用程序。

    接下來讓我們更為詳細(xì)地了解一下本教程中將討論的內(nèi)容。





    回頁首


    關(guān)于本教程

    本系列的第 1 部分了解 Web 服務(wù)規(guī)范:SOAP 介紹了虛構(gòu)的 Daily Moon 報社。具體來說,您了解了 Classifieds Department 所進行的工作。在該教程中,Classifieds Department 構(gòu)建了一個客戶機來在表示內(nèi)容管理系統(tǒng)的 Web 服務(wù)間發(fā)送 SOAP 消息。在本教程中,由于對所看到的結(jié)果印象深刻,Classifieds Department 決定構(gòu)建自己的 Web 服務(wù)來接收和管理 classifieds 數(shù)據(jù)庫中的廣告。不過,為了允許其他人使用此服務(wù),他們將需要創(chuàng)建 Web 服務(wù)描述語言 (WSDL) 文件。此文件將向構(gòu)建客戶機提供說明,以便了解服務(wù)預(yù)期和返回的消息。

    在本教程中,您將了解以下內(nèi)容:

    • WSDL 文件為何重要

    • 可以如何處理 WSDL 文件

    • XML 模式(出現(xiàn)在 WSDL 文件中)的基本知識

    • 如何設(shè)計 WSDL 文件的結(jié)構(gòu)

    • WSDL 1.1 和 WSDL 2.0 的基本差異

    • 如何自動從表示服務(wù)的 Java 類自動生成 WSDL 文件

    • 如何從 WSDL 文件生成表示服務(wù)的 Java 類

    • 如何從 WSDL 文件生成 Web 服務(wù)客戶機

    Classifieds Department 將構(gòu)建一個服務(wù)來接收新廣告、編輯和顯示現(xiàn)有廣告,還能結(jié)束一個主題,使其不再接受任何廣告。他們將同時使用請求/響應(yīng)和單向消息傳遞。





    回頁首


    工具和先決條件

    本教程的大部分內(nèi)容都是概念性的,但為了處理整個教程中的代碼,您將需要安裝以下軟件:

    Apache Geronimo 或其他應(yīng)用服務(wù)器——團隊將在本教程中創(chuàng)建新 Web 服務(wù),您將需要可在其上運行服務(wù)的應(yīng)用程序。當(dāng)然,由于 Web 服務(wù)應(yīng)當(dāng)可互操作,因此使用何種應(yīng)用服務(wù)器并不重要。本教程演示了 Apache Geronimo 的用法,而此應(yīng)用服務(wù)器也是 IBM 的 WebSphere Community Edition 的基礎(chǔ)。還可以使用 WebSphere Application Server 等其他應(yīng)用服務(wù)器。您可以從以下網(wǎng)址下載 Apache Geronimo:http://geronimo.apache.org/downloads.html。有關(guān)安裝 Geronimo 的更多信息,請參見本系列的第一篇教程“了解 Web 服務(wù)規(guī)范,第 1 部分:SOAP”。

    Apache Axis2 的 0 .95 或更高版本——可以手動創(chuàng)建 SOAP 消息,也可以手動對其進行解釋,但手邊如果有一個可用實現(xiàn)就會方便得多。本教程將演示 Apache Axis2 的用法,其中包含了各種 SOAP 相關(guān)的 API,可極大地簡化您的工作。可以從以下網(wǎng)址下載 Apache Axis2:http://ws.apache.org/axis2/download.cgi。本教程使用的是 0.95 版,但應(yīng)該也能使用更高版本。(請注意,在本系列教程的第 1 部分使用的是 0.94 版,但并未使用該版本對本部分的代碼進行測試。)

    Java 2 Standard Edition 的 1.4 或更高版本——所有這些工具都是基于 Java 的,本教程中將要構(gòu)建的服務(wù)和客戶機也是如此。可以從以下網(wǎng)址下載 J2SE SDK:http://java.sun.com/j2se/1.5.0/download.jsp

    另外,還需要 Web 瀏覽器和文本編輯器,但我想您已經(jīng)有了這兩個工具。如果愿意,還可以使用 Eclipse 之類的 IDE,但由于我們的重點是技術(shù)而不是工具,因此我將使用文本編輯器和命令行來編輯和編譯文件。





    回頁首

    概述

    在深入了解細(xì)節(jié)前,讓我們了解一下其總體概貌。

    Web 服務(wù)回顧

    相對于傳統(tǒng)編程方法而言,使用 Web 服務(wù)的主要優(yōu)勢是互操作性。您可以創(chuàng)建一個分布式系統(tǒng),讓分散在各個位置的計算機能夠進行通信,但在大多數(shù)情況下,您需要使用限制靈活性的專用中間件。也就是說,發(fā)送方和接收方都需要使用相同的軟件。

    Web 服務(wù)提供了基于文本(實際上是基于 XML)的方法來往返傳遞消息,這意味著應(yīng)用程序不僅不依賴計算機,而且也不依賴于操作系統(tǒng)和編程語言。只要雙方遵循相同的 Web 服務(wù)標(biāo)準(zhǔn),就不受各方運行何種軟件的影響。

    有多個用于傳輸此信息的標(biāo)準(zhǔn),但本系列教程重點討論的是 SOAP,因為此標(biāo)準(zhǔn)非常靈活,而且能與更高級的標(biāo)準(zhǔn)結(jié)合使用。

    SOAP 知識鞏固

    SOAP 消息包括三個主要部分:Header、主體和有效負(fù)載(包含在主體中)。請看以下示例:


    清單 1. 示例 SOAP 消息
                        
        >SOAPenv:Envelope 
           xmlns:SOAPenv="http://schemas.xmlSOAP.org/SOAP/envelope/" 
           xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<
     >SOAPenv:Body<
      >req:getNumberOfArticles xmlns:req="http://daily-moon.com/CMS/"<
         >req:category<classifieds>/req:category<
      >/req:getNumberOfArticles<
     >/SOAPenv:Body<
    >/SOAPenv:Envelope<
    

    整個消息稱為信封,其內(nèi)容由 Header 和主體組成。Header 包括有關(guān)消息本身的信息(如路由信息),或要由位于發(fā)送方和最終接收方之間可能對消息進行處理的“SOAP 中間層”或服務(wù)處理的信息。消息的主體中包含“有效負(fù)載”,其中包含傳遞給 Web 服務(wù)的實際數(shù)據(jù)。

    在本例中,有效負(fù)載為 getNumberOfArticles 元素及其內(nèi)容。





    回頁首


    WSDL 的用途

    創(chuàng)建服務(wù)時,通常的原因都是因為希望其他人使用此服務(wù)。為了使用服務(wù),需要知道向服務(wù)發(fā)送什么信息、服務(wù)將發(fā)送回什么信息以及在何處能找到此服務(wù)。當(dāng)然,可以將這些放入字處理文檔中,但相比之下,如果此信息采用標(biāo)準(zhǔn)的、最好為人機均可讀的格式,則要有用得多。

    WSDL 就提供了這樣的標(biāo)準(zhǔn)格式。除了不會造成混淆不清外,其主要優(yōu)勢是,由于 WSDL 是事實標(biāo)準(zhǔn),且采用 XML 格式,因而可由計算機進行處理,便于自動創(chuàng)建客戶機(甚至自動創(chuàng)建服務(wù)的框架)。Classifieds Department 將要創(chuàng)建接受和管理 classified 廣告的服務(wù),以允許其他人(如作業(yè)聚合網(wǎng)站)能更方便地使用此服務(wù),他們同樣也將使用 WSDL 文件對其進行描述。





    回頁首


    本教程的任務(wù)

    在本教程中,您將逐步了解 Daily Moon Classifieds Department 的員工如何創(chuàng)建服務(wù)并將其公開給其他人使用,從而了解有關(guān) WSDL 的知識。

    首先,Christine 將設(shè)計 XML 模式,其中定義可以在 SOAP 消息中出現(xiàn)的數(shù)據(jù)。接下來,Larry 形成實際 WSDL 文件的結(jié)構(gòu),以確定將往返傳遞何種信息。然后,Gene 拿到 WSDL 文件,以其為基礎(chǔ)設(shè)計表示服務(wù)的 Java 類,隨后,為了進一步確認(rèn),他使用 Axis2 從該 Java 類生成 WSDL 文件,以了解二者的差異。然后,F(xiàn)rancis 得到此 WSDL 文件,使用其生成基本 Web 服務(wù)和訪問該服務(wù)的客戶機。

    現(xiàn)在讓我們開始吧。





    回頁首

    XML 模式簡要介紹

    Daily Moon 是一家相當(dāng)小的報社,因此 Classifieds Department 無法承擔(dān)專用 DBA 帶來的相關(guān)支出。所以,Christine 總是將數(shù)據(jù)庫視為“自己的孩子”。了解了 WSDL 的規(guī)范后,她決定承擔(dān)起定義 SOAP 消息中可包含的數(shù)據(jù)的任務(wù)。

    驗證和選項

    在首次嘗試 Web 服務(wù)之后,員工已經(jīng)熟悉了 XML,因此 Christine 下一步就要了解有關(guān)驗證的知識。

    XML 驗證是確保 XML 的結(jié)構(gòu)和內(nèi)容符合任何預(yù)先定義的要求的過程。最初的時候,這表示要符合文檔類型定義(Document Type Definition,DTD);DTD 是從 XML 的前身 SGML 語言保留下來的結(jié)構(gòu)。DTD 并不是很難,但存在一些主要的缺點,缺乏靈活性、缺乏 XML 命名空間支持以及其他問題,因此 XML 社區(qū)轉(zhuǎn)而采用其他類型的 XML 模式。

    請注意,此處所說的“模式”不是特指的。在這里,我使用的是該術(shù)語的一般用法,即文檔的具體結(jié)構(gòu),而不是記錄此結(jié)構(gòu)的任何語言。這些 XML 模式的最常見支持是 W3C XML Schema 語言,經(jīng)常將此語言簡稱為 XML Schema。(注意首字母大寫。)

    Christine 知道將使用 XML Schema 構(gòu)建其 WSDL 1.1 文檔,但注意到 WSDL 2.0 還特別支持其他模式,如 RELAX NG 和 Schematron,可以在此處使用這些模式。





    回頁首


    實例文檔

    Christine 首先從一個與進出系統(tǒng)的預(yù)期數(shù)據(jù)近似的示例文檔著手。她以數(shù)個現(xiàn)有廣告為基礎(chǔ)創(chuàng)建了以下 XML:


    清單 2. 實例文檔
                        
    Listing 2: the instance document
    <?xml version="1.0"?>
    <ClassifiedList>
    
       <ClassifiedAd adId="1138">
          <content>Vintage 1963 T-Bird.  Less than 300 miles.  
    Driven by my daughter until I took it away.  Serious inquires
    only. 555-3264 after 7 PM.</content>
          <endDate>4/15/2007</endDate>
          <startDate>4/1/2007</startDate>
       </ClassifiedAd>
    
       <ClassifiedAd adId="2187">
          <content>30 ft ladder, only used once.  Willing to let
    go for half its worth. Has slight dent near the middle.  
    Harder than a human head. $150 OBO.</content>
          <endDate>4/30/2007</endDate>
          <startDate>4/10/2007</startDate>
       </ClassifiedAd>
    
    </ClassifiedList>
    

    此文檔稱為“實例文檔”,代表 XML 模式所定義的數(shù)據(jù)。在本例中,它包括兩個作為 ClassifiedList 元素子項的 ClassifiedAd 元素。每個 ClassifiedAd 都包含一個 adId 屬性(此屬性與數(shù)據(jù)庫內(nèi)的主鍵對應(yīng))、廣告內(nèi)容以及廣告的開始和結(jié)束日期。

    她將此文檔命名為 classifieds.xml





    回頁首


    基本模式

    Christie 下一步將創(chuàng)建基本模式文檔,以便對系統(tǒng)進行測試。實際模式本身也是一個 XML 文檔,因此她創(chuàng)建了基礎(chǔ)文件 classifieds.xsd 和一個 schema 元素,如清單 3 中所示:


    清單 3. Schema 元素
                        
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
    </xsd:schema>
    

    此元素將作為 Christine 創(chuàng)建的所有定義的父項。





    回頁首


    驗證文檔

    測試系統(tǒng)的下一步是形成一個簡單的 Java 應(yīng)用程序,以根據(jù)模式驗證實例文檔。該類所需要進行的工作就是指定驗證并對文檔進行解析,如清單 4 中所示。


    清單 4. ValidateWithSchema 類
                        
    import java.io.File;
    import java.io.IOException;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import org.w3c.dom.Document;
    import org.xml.sax.SAXException;
     
    public class ValidateWithSchema {
     
        public static void main(String args[]) {
    
            DocumentBuilderFactory dbf = 
                            DocumentBuilderFactory.newInstance();
            dbf.setValidating(true);
    
            dbf.setAttribute(
              "http://java.sun.com/xml/jaxp/properties/schemaLanguage", 
              "http://www.w3.org/2001/XMLSchema");
            dbf.setAttribute(
              "http://java.sun.com/xml/jaxp/properties/schemaSource",
              "classifieds.xsd");
    
            Document doc = null;
            try{        
               DocumentBuilder parser = dbf.newDocumentBuilder();
               doc = parser.parse("classifieds.xml");
            } catch (Exception e){
               e.printStackTrace();
            }
        }
    }
    

    實際進行解析的方法并不十分重要;在本例中,Christine 將使用 DOM 解析器構(gòu)建應(yīng)用程序。首先,構(gòu)建一個工廠,然后指定其創(chuàng)建的所有解析器都應(yīng)為“驗證解析器”。(并不會使用所有解析器進行驗證。有些僅驗證文檔是否“形式良好”,而不會驗證其實際結(jié)構(gòu)。)

    接下來,指定要使用的模式語言以及模式文檔本身。在本例中,Christine 使用的是本地文件,但也可以使用任何可作為 URL 引用的文件。

    Christine 保存文件,并對其進行編譯,運行該文件后,她得到了以下輸出,如清單 5 中所示。


    清單 5. 運行空白模式
                        
    Warning: validation was turned on but an org.xml.sax.ErrorHandler 
    was not set, which is probably not what is desired.  Parser will 
    use a default ErrorHandler to print the first 10 errors.  Please call
    the 'setErrorHandler' method to fix this.
    
    Error: URI=file:///E:/WSDLFiles/classifieds.xml Line=2: cvc-elt.1: 
    Cannot find the declaration of element 'ClassifiedList'.
    

    Warning 并不重要;Christine 僅希望知道文件是否有效,因此她并不需要任何特定的錯誤處理功能。Error 很重要,因為這意味著分析器在實際查看模式和驗證實例文檔。

    接下來她需要添加實際的定義。





    回頁首


    創(chuàng)建簡單的元素

    定義最初的數(shù)個元素非常簡單。content, endDatestartDate 元素包含簡單的字符串,如清單 6 中所示。


    清單 6. 添加簡單的元素
                        
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
       <xsd:element type="xsd:string" name="content" />
       <xsd:element type="xsd:string" name="endDate" />
       <xsd:element type="xsd:string" name="startDate" />
    
    </xsd:schema>
    

    在本例中,Christine 定義了三個僅包含文本的元素(與其他元素相對)作為內(nèi)容。同樣,它們都不具有任何屬性。XML Schema 推薦標(biāo)準(zhǔn)定義了一系列可用于定義內(nèi)容的不同類型。例如,可以指定 endDatestartDate 值必須為 datetime 類型的值。





    回頁首


    創(chuàng)建更為復(fù)雜的元素

    當(dāng)然,如果所有元素都這樣簡單,您可能根本不需要模式了。Christine 將繼續(xù)定義 ClassifiedList 元素(請參見清單 7)。


    清單 7. 定義 ClassifiedList 元素
                        
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
    <xsd:element name="ClassifiedList">
       <xsd:complexType>
    
          <xsd:sequence>
             <xsd:element name="ClassifiedAd" maxOccurs="unbounded"
                                           type="ClassifiedAdType"/>
          </xsd:sequence>
    
       </xsd:complexType>
    </xsd:element>
    
    <xsd:complexType name="ClassifiedAdType">
       <xsd:sequence>
           <xsd:element type="xsd:string" name="content" />
           <xsd:element type="xsd:string" name="endDate" />
           <xsd:element type="xsd:string" name="startDate" />
       </xsd:sequence>
    </xsd:complexType>
    
    </xsd:schema>
    

    首先看最下面,Christine 創(chuàng)建了 ClassifiedAdType complexType。這種元素類型按順序包含以下內(nèi)容:一個 content 元素、一個 endDate 元素和一個 startDate 元素。回到最上面,她定義 ClassifiedList 元素包含一個元素,而此元素還包含一系列元素。不過,在本例中,它包含零個或更多 ClassifiedAdType 類型的元素,所有這些元素均命名為 ClassifiedAd

    到目前為止,僅通過這兩個定義,她就已覆蓋了文檔結(jié)構(gòu)的大部分。現(xiàn)在需要做的就是為 adId 屬性添加定義。





    回頁首


    添加屬性

    屬性在 complexType 元素中定義,如清單 8 中所示。


    清單 8. 添加屬性,不過她還可以創(chuàng)建限制性更多的類型。
                        
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
    <xsd:element name="ClassifiedList">
       <xsd:complexType>
          <xsd:sequence>
             <xsd:element name="ClassifiedAd" maxOccurs="unbounded"
     type="ClassifiedAdType"/>
          </xsd:sequence>
       </xsd:complexType>
    </xsd:element>
    
    <xsd:complexType name="ClassifiedAdType">
       <xsd:sequence>
           <xsd:element type="xsd:string" name="content" />
           <xsd:element type="xsd:string" name="endDate" />
           <xsd:element type="xsd:string" name="startDate" />
       </xsd:sequence>
       <xsd:attribute name="adId" type="xsd:integer" />
    </xsd:complexType>
    
    </xsd:schema>
    

    在本例中,Christine 將 adId 屬性的內(nèi)容限制為整數(shù)。不過,她還可以創(chuàng)建限制更多的類型。





    回頁首


    使用 simpleTypes

    XML Schema 提供了強大的功能,用以處理您的文檔可能包含的實際內(nèi)容。例如,Christine 可以指定 adId 屬性一定只能包含大于或等于 1000 的整數(shù)(請參見清單 9)。


    清單 9. 限制值
                        
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
    ...
    
    <xsd:complexType name="ClassifiedAdType">
       <xsd:sequence>
           <xsd:element type="xsd:string" name="content" />
           <xsd:element type="xsd:string" name="endDate" />
           <xsd:element type="xsd:string" name="startDate" />
       </xsd:sequence>
       <xsd:attribute name="adId" type="thousandOrGreater" />
    </xsd:complexType>
    
    <xsd:simpleType name="thousandOrGreater">
      <xsd:restriction base="xsd:integer">
          <xsd:minInclusive value="1000"/>
      </xsd:restriction>
    </xsd:simpleType>
    
    </xsd:schema>
    

    這個定義并不涉及任何元素,因此 Christine 使用了 simpleType 而不是 complexType。她為定義為整數(shù)的基本類型創(chuàng)建了一個 restriction(一種對數(shù)據(jù)類型的限制)。她為該 restriction 添加了一個“facet”,指定最小值為 1000。XML Schema 定義了大量的此類 facet 以供使用。創(chuàng)建了此類型后,她就可以在屬性定義中對其進行引用了。因為已經(jīng)定義了數(shù)據(jù),Christine 隨后將此模式交給 Larry,供他用于構(gòu)建實際的 WSDL。





    回頁首

    posted on 2006-12-29 19:04 SIMONE 閱讀(1414) 評論(0)  編輯  收藏 所屬分類: AXISJAVA
    主站蜘蛛池模板: 尤物视频在线免费观看 | 国产免费丝袜调教视频| 久久久久国产亚洲AV麻豆| 婷婷亚洲综合一区二区| 日韩在线免费播放| 亚洲av永久无码天堂网| 国产美女无遮挡免费网站| 国产尤物在线视精品在亚洲| 国产一区二区三区在线免费| 美女黄频a美女大全免费皮| 国产成人免费一区二区三区| 欧亚一级毛片免费看| 亚洲精品第一国产综合精品99| eeuss影院免费直达入口| 国产亚洲精品免费视频播放| 免费萌白酱国产一区二区三区| 亚洲人成人网站色www| 久久大香香蕉国产免费网站| 亚洲美女视频一区| 国产va精品免费观看| 亚洲av中文无码乱人伦在线观看| 国产成人精品免费视频大全五级| 另类专区另类专区亚洲| 久久青青草原亚洲av无码| 久久美女网站免费| 亚洲国产日韩在线人成下载| 免费高清资源黄网站在线观看| 国产亚洲综合久久| 久久久青草青青亚洲国产免观| 98精品全国免费观看视频| 亚洲中文字幕日本无线码| 亚洲第一成人影院| 最近的中文字幕大全免费8| 亚洲AV无码一区二区三区牲色| 中文字幕亚洲激情| 国产成人免费在线| 色吊丝免费观看网站| 亚洲无线电影官网| 破了亲妺妺的处免费视频国产| 丰满人妻一区二区三区免费视频| 亚洲视屏在线观看|