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

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

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

    posts - 22, comments - 32, trackbacks - 0, articles - 73
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    前一段時間在公司比較閑看了看CXF2.3 與SPRING 3.0.5集成,以前用XFire開發東西,去XFire社區轉時候都說建議換用CXF。哈哈不說廢話了開始吧:

    準備:CXF2.3.0 所有jar 包,去官網下就可以了,如果為了測試建議把lib下所有jar包導入工程中(它里邊包含了spring所必需的jar包版本是spring3.0.5的,如果你不想使用CXF2.3.0中的spirng jar包可以不導入,導入自己的)。

    oracle 數據驅動包:ojdbc14.jar
    spirng -jdbc 包: org.springframework.jdbc-3.0.5.RELEASE.jar(因為本用例需要用spring JDBC 做持久層測試)

    第一步:建立一個webproject ,把CXF包導入工程lib目錄下;

    接口代碼如下:
    import javax.jws.WebService;
    /*
     * @author zzz
     * @version 1.0
     * @ userservice接口;
     */

    @WebService 
    public interface UserService {
     public String getSomething(String data);
    }


    實現類:
    import java.sql.SQLException;
    import javax.jws.WebService;
    import org.springframework.jdbc.core.JdbcTemplate;
    import com.tchzt.demo.user.service.UserService;

    @WebService
    public class UserServiceImpl extends JdbcTemplate implements UserService{

     public String getSomething(String data) {
      System.out.println("this is server message :"+data);
      try {
       System.out.println("獲得數據庫連接:"+getDataSource().getConnection());
       //這里是用的spring 的JDBC,可以在這里寫持久化代碼;
      } catch (SQLException e) {
       e.printStackTrace();
      }
      return data;
     }
     
    }

    在src目錄下建立一個applicationContext-client-beans.xml 這個名字可以自己定,但在web.xml 加載名字要一致:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
     xsi:schemaLocation="  
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
    http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">
    <!-- 這是JNDI配置數據源方式

     <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="location">
       <value>classpath:com/chtt/cfg/dbconn/oracle_jndi.properties</value>
      </property>
     </bean>
     
     <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName">
       <value>${oraconn.jndi}</value>
      </property>
     </bean>
    --> 
    <!-- 數據據源配置方式 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
         <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
         <property name="url" value="jdbc:oracle:thin:@110.168.1.51:1521:pos"/>
         <property name="username" value="pos"/>
         <property name="password" value="pos"/>
    </bean>
    <!-- 配置DAO -->
    <bean id="daoTemplate" abstract="true">
     <property name="dataSource">
      <ref local="dataSource"/>
     </property>
    </bean> 
    <!-- dao引用 -->
    <bean id="userServiceImpl" class="com.tchzt.demo.user.serviceImpl.UserServiceImpl" parent="daoTemplate"/>

    <!-- webservice 發布配置 -->
    <bean id="client" class="com.test.Client" factory-bean="clientFactory" factory-method="create" />

    <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean" >
     <!-- 服務發布供外部調用接口 -->
     <property name="serviceClass" value="com.tchzt.demo.user.service.UserService" />
     <property name="address" value="http://127.0.0.1:8080/WebServiceCXF/UserService" />
    </bean> 
    </beans>

    WEB-INF目錄下建立一個services.xml (名字自己定):

    <?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:jaxws="http://cxf.apache.org/jaxws" 
        xsi:schemaLocation="http://www.springframework.org/schema/beans   
        http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 
     
        <import resource="classpath:META-INF/cxf/cxf.xml" /> 
        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> 
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 
       <!-- webService發布地址 , #userServiceImpl引用bean方式,也可以寫成類的全路徑 -->
       <!--userServiceImpl 加入數據連接, 在此引用  -->
        <jaxws:endpoint id="userService" implementor="#userServiceImpl" address="/UserService"/>
       
     <!-- 第二種方式引用其它bean;
      <jaxws:endpoint id="userService"
                    implementorClass="demo.spring.HelloWorld"
                    address="/UserService">
           <jaxws:implementor>
              <bean ref="userServiceImpl"/>
           </jaxws:implementor>
          
           <jaxws:implementor>
              <bean ref="userServiceImpl2"/>
           </jaxws:implementor>
      </jaxws:endpoint>
      
      -->     
    </beans> 



    web.xml 文件內容:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext-client-beans.xml,WEB-INF/services.xml</param-value>
     </context-param>

     <listener>
      <listener-class>
       org.springframework.web.context.ContextLoaderListener
      </listener-class>
     </listener>

     <servlet>
      <servlet-name>CXFServlet</servlet-name>
      <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
     </servlet>

     <servlet-mapping>
      <servlet-name>CXFServlet</servlet-name>
      <url-pattern>/*</url-pattern>
     </servlet-mapping>

     <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>
     <!-- 加載數據源
     <resource-ref>
      <res-ref-name>jdbc/cdbank</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
     </resource-ref>
     -->
    </web-app>

    測試類內容:
    package com.test;

    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import com.tchzt.demo.user.service.UserService;
    import com.tchzt.demo.user.serviceImpl.UserServiceImpl;

    public class Client {
        public static Client client = new Client();  
        private UserService userService=null;
        //這是spring得到服務實例構造方法;
        private Client(){
         ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext-client-beans.xml");
         userService=(UserService) context.getBean("client");
        }
        //這是普通客戶端得到服務實例;
        private Client(UserService userService){
         this.userService=userService;
        }
        public String getText(String text) throws Exception {  
            String data = userService.getSomething(text);  
            return data;  
        }
       /*
        *單獨測試spring 加載數據連接;
        */
        public static void  getConnectTest(){
         ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext-client-beans.xml");
         UserServiceImpl userServiceImpl=(UserServiceImpl) context.getBean("userServiceImpl");
         System.out.println("數據庫連接測試:"+userServiceImpl.getSomething("adfasdf"));
        }
        /*
         * CXF 普通客戶端測試;
         */
        public static void testCxfClient()throws Exception{
         //這里不用Spring 得到bean實例;
      JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
      //設置服務類的名字;
      factory.setServiceClass(UserService.class);
      //設置服務的地址;
      factory.setAddress("http://127.0.0.1:8080/WebServiceCXF/UserService");
      
      //得到服務類的實例;
      UserService userService=(UserService) factory.create();
      
      Client client=new Client(userService);
      
      System.out.println(client.getText("這是webserviceCXF測試數據"));
        }
        /*
         * spring 與CXF 集成發布測試;
         */
        public static void testSpringCxfClient()throws Exception{
         //這是用spring 得到服務實例;
      System.out.println(client.getText("這是webserviceCXF與 spring集成發布的測試數據!"));
        }
     public static void main(String[] args)throws Exception {
      //測試數據連接是否成功!
      //Client.getConnectTest();
      //普通測試;
      //Client.testCxfClient();
      //集成測試;
      Client.testSpringCxfClient();
     }

    }

    測試:把工程發布到tomcat上運行測試類出現下面結果:

    Client.testSpringCxfClient()方法測試:

     客戶端輸出:
        這是webserviceCXF與 spring集成發布的測試數據!

    服務器端的輸出:
    this is server message :這是webserviceCXF與 spring集成發布的測試數據!
    獲得數據庫連接:oracle.jdbc.driver.OracleConnection@7fb878



    Client.testCxfClient()測試:

    客戶端輸出:
    這是webserviceCXF測試數據

    服務器端的輸出:

    this is server message :這是webserviceCXF測試數據
    獲得數據庫連接:oracle.jdbc.driver.OracleConnection@6276e5

    Client.getConnectTest()數據庫連接測試:
    this is server message :adfasdf
    獲得數據庫連接:oracle.jdbc.driver.OracleConnection@c38157
    數據庫連接測試:adfasdf


    好了到此CXF+spring 集成完畢(不足這處沒有加入聲明式事物的管理,只加入了spring 連接數據庫和持久層JDBC,有時間在完善下),如果有什么問題請聯系我:zzzlyr@163.com

    有時間更新這篇文章了,加入聲明式事物,這個很簡單。在把項目里用的CXF細節和遇到問題說明下:

    把appcliatContext.xml 這個文件加入Spring包 自動掃描,在你的業務層上加下面基于注解事物:
    開起注解事物 在需要的方法上加入即可
      默認Spring為每個方法開啟一個事務,如果方法發生運行期錯誤unchecked(RuntimeException),事務會進行回滾
      如果發生checked Exception,事務不進行回滾.
      @Transactional(propagation=Propagation.REQUIRED)
      @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)

    重點說下在項目中用CXF2.3 遇到問題:
       第一個:就是CXF命名空間問題,在網上好多例子,就簡單是一個例子。在項目中CXF發布webService ,一般做法是實現類和接口沒有在一個包中;這是項目中要用到的:

    這是接口:
    package com.tchzt.service;

    import javax.jws.WebResult;
    import javax.jws.WebService;

    /*
     * @author zzz
     * @version 1.0
     * @ userservice接口;
     */
    /*
     * webService接口綁定;
     * com.tchzt.webService
     *
     */
    @WebService(targetNamespace="com.tchzt.seals.service")
    public interface SealHandOverService {
     /*
      * 反回值標注,可以改變返回參數WSDL發布名字,還有參數名字;
      */
     public @WebResult(name="sealHandOverService") String getDocumentByBantchNo(String nantchNo)throws Exception;
     
    }



    實現類:
    package com.tchzt.service.imp;

    import java.util.LinkedList;
    import java.util.List;

    import javax.jws.WebService;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Service;

    import com.tchzt.dao.PrintlogDaoIf;
    import com.tchzt.dao.SealTypeDaoIf;
    import com.tchzt.dao.SealsDaoIf;
    import com.tchzt.po.AppSeals;
    import com.tchzt.po.AppSealtype;
    import com.tchzt.po.Printlog;
    import com.tchzt.service.SealHandOverService;
    import com.tchzt.util.Document4jUtils;

    @Service
    @WebService(targetNamespace="com.tchzt.seals.service",endpointInterface="com.tchzt.service.SealHandOverService")
    public class SealHandOverServiceImpl implements SealHandOverService {
     @Autowired
     @Qualifier("printlogDaoIfImpl")
     private PrintlogDaoIf printlogDao;
     
     @Autowired
     @Qualifier("sealsDaoIfImpl")
     private SealsDaoIf sealsDao;
     
     @Autowired
     @Qualifier("sealTypeDaoIfImpl")
     private SealTypeDaoIf sealTypeDao;
     
     @Override
     public String getDocumentByBantchNo(String banchno) throws Exception {
      List<Printlog> list=printlogDao.getPrintlogs(banchno);
      List<String> sealXML=new LinkedList<String>();
      for(Printlog p:list){
        AppSeals seal=sealsDao.getByIdx(AppSeals.class, p.getSealid());
        AppSealtype sealType=sealTypeDao.getByIdx(AppSealtype.class, seal.getSealtypeId());
        sealXML.add("id:"+seal.getId());
        sealXML.add("sealName:"+sealType.getSealName());
        sealXML.add("sealType:"+sealType.getId());
        sealXML.add("image:"+seal.getImage());
      }
      for(String s:sealXML){
       System.out.println(s);
      }
      return Document4jUtils.getHandOverScanXML(sealXML,banchno);
     }

    }

    上面注意一個就行targetNamespace="com.tchzt.seals.service"一要寫上,接口和實現類不在同一個包中,接口和實現類一定要一致。但網上好多例子接口和實現類在一包中targetNamespace這個東西默認是一致的,所以不需要指定,如果接口和實現類不在同一個包中,你查看WSDL的時候也可以看到,也不報錯,但就是發布WSDL少信息。
     第二客戶端問題:網上好多例子就是一個工程,調自己工程發布的WebService的方法,以下是第二個JAVA工程調用第一個發布成功的webService 方法如下 :

    package com.tchzt.test;

    import org.apache.cxf.endpoint.Client;
    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

    import com.tchzt.service.SealHandOverService;

    public class WebServiceClientTest {
     
      /*
         * CXF 變通客戶端測試;
         */
        public static void testCxfClient()throws Exception{
         //這里不用Spring 得到bean實例;
      JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
      //設置服務類的名字;
      factory.setServiceClass(SealHandOverService.class);
      //設置服務的地址;
      factory.setAddress("http://127.0.0.1:8080/seal/ws/SealHandOverService");
      
      //得到服務類的實例;
      SealHandOverService sealHandOverService=(SealHandOverService) factory.create();
      
      
      System.out.println("======="+sealHandOverService.getDocumentByBantchNo("67801100060039"));
        }
        /**
      * @Title: callService
      * @Description: 調用遠程的webservice并返回數據
      * @param wsUrl
      *            webservice地址
      * @param method
      *            調用的webservice方法名
      * @param arg
      *            參數
      * @return
      * @return:String
      * @throws
      */
        public static String callService(String wsUrl, String method, Object... arg)throws Exception {
          JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
         Client client = dcf.createClient(wsUrl);
          Object[]  res = client.invoke(method, arg); 
          return (String) res[0];
        }

     
     public static void main(String[] args)throws Exception {
      //URL 組成:http://110.168.1.121:8080/seal  ;第二部分:ws/這個是在web.xml配置的一個攔截地址; 第三部分: SealHandOverService?wsdl 是接口中發部的
      String s=WebServiceClientTest.callService("http://110.168.1.121:8080/seal/ws/SealHandOverService?wsdl", "getDocumentByBantchNo", new Object[]{"67801100060039"});
     System.out.println(s);
      WebServiceClientTest.testCxfClient();
     }

    }

    這個測試類里有兩個方法,應該差不多從注釋可以看明白什么意思。

    以上方法都在項目中正確調用通過。
     

    以下是網上的一此方法:

    由于我們通常不知道提供Web Service的服務器接口及其相關類的代碼,我們也不可能從他人那里獲得。

    對此,CXF提供了一些命令行工具,在CXF_HOME/bin下(這里是你下載的CXF包下有目錄)。

    使用wsdl2java,可以根據從服務器返回的wsdl文件生成我們所需要的java接口和相關類。

    在上面的工程中,我們可以用以下命令生成JAVA代碼,而不是從第一個工程中復制過來。

    wsdl2java -p client http://110.168.1.121:8080/seal/ws/SealHandOverService?wsdl (需要在cmd窗口中將路徑切換至CXF_HOME/bin下)
     例如:F:\apache-cxf-2.2.7\bin>wsdl2java -d E:\programFiles -client  http://127.0.0.1/services/AlarmInformationServices?wsdl

    (解釋:wsdljava    –p    包路徑    –d    目標文件夾   wsdl 的url地址)

     -p  是指生成客戶端代碼存放位置;


    需要注意的是,對于接口類和相關類的包路徑,一定要和服務器的一樣, 即:如果服務接口包路徑和實現類路徑,要和客戶端一致。

    否則,會出現org.apache.cxf.interceptor.Fault: Unexpected wrapper element {****}addResponse found.……錯誤。




     


    評論

    # re: CXF2.3.0 +myEclipse 8.5 +tomcat 6.0 +sping 3.0.5 集成方案  回復  更多評論   

    2011-05-26 15:50 by wls
    運行client文件的時候報
    log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
    log4j:WARN Please initialize the log4j system properly.
    2011-5-26 15:46:49 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
    信息: Creating Service {http://dao/}IUserServiceService from class dao.IUserService
    2011-5-26 15:46:50 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
    信息: Creating Service {http://dao/}IUserServiceService from class dao.IUserService
    this is the message:adfasdf
    獲得數據庫連接oracle.jdbc.driver.T4CConnection@1719f30
    數據庫連接測試:adfasdf
    2011-5-26 15:46:51 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
    信息: Creating Service {http://dao/}IUserServiceService from class dao.IUserService
    javax.xml.ws.soap.SOAPFaultException: Fault occurred while processing.
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:146)
    at $Proxy31.getSomething(Unknown Source)
    at test.Client.getText(Client.java:24)
    at test.Client.testCxfClient(Client.java:52)
    at test.Client.main(Client.java:70)
    Caused by: org.apache.cxf.binding.soap.SoapFault: Fault occurred while processing.
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:75)
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:46)
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
    at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:99)
    at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
    at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:759)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2337)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2195)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2039)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:697)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:520)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:317)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:269)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
    ... 4 more
    找了很久沒有找到原因,您能給回復一下么

    # re: CXF2.3.0 +myEclipse 8.5 +tomcat 6.0 +sping 3.0.5 集成方案  回復  更多評論   

    2011-05-26 16:26 by wls
    使用的cxf2.3.4

    # re: CXF2.3.0 +myEclipse 8.5 +tomcat 6.0 +sping 3.0.5 集成方案  回復  更多評論   

    2011-08-05 09:50 by 淘寶女裝
    寫的太長了,

    # re: CXF2.3.0 +myEclipse 8.5 +tomcat 6.0 +sping 3.0.5 集成方案  回復  更多評論   

    2011-08-05 14:51 by 淘寶女裝
    郁悶,,,spring配置出錯了

    # re: CXF2.3.0 +myEclipse 8.5 +tomcat 6.0 +sping 3.0.5 集成方案  回復  更多評論   

    2011-08-08 16:55 by vinsonnubo
    我也是用spring自動掃描實現service注入,但是當我調用ws方法時無法注入成功,請問是什么原因呢?

    # re: CXF2.3.0 +myEclipse 8.5 +tomcat 6.0 +sping 3.0.5 集成方案  回復  更多評論   

    2011-08-16 17:41 by 張釗釗
    @vinsonnubo
    什么異常?service 層,是不是寫上了@Service這個標志了

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产一级理论免费版| 中文字幕无码不卡免费视频| 免费人妻无码不卡中文字幕18禁| 亚洲一区二区三区在线| 在线观看永久免费| 亚洲午夜国产精品| 成人免费AA片在线观看| 在线亚洲高清揄拍自拍一品区| 最近2019中文字幕免费大全5| 亚洲天堂一区二区| 黄色成人免费网站| 亚洲熟妇av午夜无码不卡| 日韩在线免费看网站| 特级毛片免费观看视频| 亚洲综合色区在线观看| 久9这里精品免费视频| 亚洲天堂久久精品| 成人免费视频88| 欧亚一级毛片免费看| 亚洲人成网77777亚洲色| 香港a毛片免费观看| 亚洲综合色一区二区三区| 国产精品国产免费无码专区不卡| 午夜在线免费视频 | 亚洲一区AV无码少妇电影☆| a成人毛片免费观看| 亚洲国产精品综合久久久| 国产精品无码免费视频二三区 | 精品无码无人网站免费视频| 亚洲熟女综合一区二区三区| 四虎影在线永久免费四虎地址8848aa| 91av免费在线视频| 亚洲免费一级视频| 亚洲精品无码成人片在线观看| 人人揉揉香蕉大免费不卡| 亚洲一区二区三区丝袜| 亚洲人成人网站在线观看| 最近中文字幕完整免费视频ww| 亚洲乱码无人区卡1卡2卡3| 在线A亚洲老鸭窝天堂| 无码区日韩特区永久免费系列 |