亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

三、CXF對Interceptor攔截器的支持

系統 3081 0

前面在Axis中介紹過Axis的Handler,這里CXF的Interceptor就和Handler的功能類似。在每個請求響應之前或響應之后,做一些事情。這里的Interceptor就和Filter、Struts的Interceptor很類似,提供它的主要作用就是為了很好的降低代碼的耦合性,提供代碼的內聚性。下面我們就看看CXF的Interceptor是怎么樣工作的。

1、 我們就用上面的HelloWorldService,客戶端的調用代碼重新寫一份,代碼如下:

        
          package
        
         com.hoo.client;
      
        ?
      
        
          import
        
         org.apache.cxf.interceptor.LoggingInInterceptor;
      
        
          import
        
         org.apache.cxf.interceptor.LoggingOutInterceptor;
      
        
          import
        
         org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
      
        
          import
        
         org.apache.cxf.phase.Phase;
      
        
          import
        
         com.hoo.interceptor.MessageInterceptor;
      
        
          import
        
         com.hoo.service.IHelloWorldService;
      
        ?
      
        
          /**
        
      
        
           * <b>function:</b>CXF WebService客戶端調用代碼
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-3-16 上午09:03:49
        
      
        
           * @file HelloWorldServiceClient.java
        
      
        
           * @package com.hoo.client
        
      
        
           * @project CXFWebService
        
      
        
           * @blog http://blog.csdn.net/IBM_hoojo
        
      
        
           * @email hoojo_@126.com
        
      
        
           * @version 1.0
        
      
        
           */
        
      
        
          public
        
        
          class
        
         ServiceMessageInterceperClient {
      
      
        
          public
        
        
          static
        
        
          void
        
         main(String[] args) {
      
        
          //調用WebService
        
      
                JaxWsProxyFactoryBean factory = 
        
          new
        
         JaxWsProxyFactoryBean();
      
                factory.setServiceClass(IHelloWorldService.
        
          class
        
        );
      
                factory.setAddress(
        
          "http://localhost:9000/helloWorld"
        
        );
      
                factory.getInInterceptors().add(
        
          new
        
         LoggingInInterceptor());
      
                factory.getOutInterceptors().add(
        
          new
        
         LoggingOutInterceptor());
      
      
                IHelloWorldService service = (IHelloWorldService) factory.create();
      
                System.out.println(
        
          "[result]"
        
         + service.sayHello(
        
          "hoojo"
        
        ));
      
            }
      
        }
      

上面的CXF的攔截器是添加在客戶端,同樣在服務器端也是可以添加攔截器Interceptor的。運行后結果如下:

    2011-3-18 7:34:00 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http:
    
      //service.hoo.com/}IHelloWorldServiceService from class com.hoo.service.IHelloWorldService
    
    
2011-3-18 7:34:00 org.apache.cxf.interceptor.AbstractLoggingInterceptor log
信息: Outbound Message
---------------------------
ID: 1
Address: http:
    
      //localhost:9000/helloWorld
    
    
Encoding: UTF-8
Content-Type: text/xml
Headers: {SOAPAction=["
    
    
    "], Accept=[*
    
      /*]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:sayHello xmlns:ns1="http://service.hoo.com/"><name>hoojo</name></ns1:sayHello></soap:Body></soap:Envelope>
--------------------------------------
2011-3-18 7:34:01 org.apache.cxf.interceptor.AbstractLoggingInterceptor log
信息: Inbound Message
----------------------------
ID: 1
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {content-type=[text/xml;charset=UTF-8], Content-Length=[230], Server=[Jetty(7.2.2.v20101205)]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:sayHelloResponse xmlns:ns1="http://service.hoo.com/"><return>hoojo say: Hello World </return></ns1:sayHelloResponse></soap:Body></soap:Envelope>
--------------------------------------
[result]hoojo say: Hello World 
    
  

上面的部分信息是LoggingInterceptor輸出的日志信息,分別在請求和響應的時候輸出日志信息,還有輸出請求的時候參數的信息以及響應的時候返回值的信息。

2、 剛才是客戶端添加Interceptor,現在我們自己編寫一個Interceptor,這個Interceptor需要繼承AbstractPhaseInterceptor,實現handleMessage和一個帶參數的構造函數。然后在服務器端添加這個Interceptor。

Interceptor代碼如下:

        
          package
        
         com.hoo.interceptor;
      
        ?
      
        
          import
        
         org.apache.cxf.interceptor.Fault;
      
        
          import
        
         org.apache.cxf.message.Message;
      
        
          import
        
         org.apache.cxf.phase.AbstractPhaseInterceptor;
      
        ?
      
        
          /**
        
      
        
           * <b>function:</b> 自定義消息攔截器
        
      
        
           * @author hoojo
        
      
        
           * @createDate Mar 17, 2011 8:10:49 PM
        
      
        
           * @file MessageInterceptor.java
        
      
        
           * @package com.hoo.interceptor
        
      
        
           * @project CXFWebService
        
      
        
           * @blog http://blog.csdn.net/IBM_hoojo
        
      
        
           * @email hoojo_@126.com
        
      
        
           * @version 1.0
        
      
        
           */
        
      
        
          public
        
        
          class
        
         MessageInterceptor 
        
          extends
        
         AbstractPhaseInterceptor<Message> {
      
      
        
          //至少要一個帶參的構造函數
        
      
        
          public
        
         MessageInterceptor(String phase) {
      
        
          super
        
        (phase);
      
            }
      
        ?
      
        
          public
        
        
          void
        
         handleMessage(Message message) 
        
          throws
        
         Fault {
      
                System.out.println(
        
          "############handleMessage##########"
        
        );
      
                System.out.println(message);
      
        
          if
        
         (message.getDestination() != null) {
      
                    System.out.println(message.getId() + 
        
          "#"
        
         + message.getDestination().getMessageObserver());
      
                }
      
        
          if
        
         (message.getExchange() != null) {
      
                    System.out.println(message.getExchange().getInMessage() + 
        
          "#"
        
         + message.getExchange().getInFaultMessage());
      
                    System.out.println(message.getExchange().getOutMessage() + 
        
          "#"
        
         + message.getExchange().getOutFaultMessage());
      
                }
      
            }
      
        }
      

下面看看發布服務和添加自定義攔截器的代碼:

        
          package
        
         com.hoo.service.deploy;
      
        ?
      
        
          import
        
         org.apache.cxf.jaxws.JaxWsServerFactoryBean;
      
        
          import
        
         org.apache.cxf.phase.Phase;
      
        
          import
        
         com.hoo.interceptor.MessageInterceptor;
      
        
          import
        
         com.hoo.service.HelloWorldService;
      
        ?
      
        
          /**
        
      
        
           * <b>function:</b>在服務器發布自定義的Interceptor
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-3-18 上午07:38:28
        
      
        
           * @file DeployInterceptorService.java
        
      
        
           * @package com.hoo.service.deploy
        
      
        
           * @project CXFWebService
        
      
        
           * @blog http://blog.csdn.net/IBM_hoojo
        
      
        
           * @email hoojo_@126.com
        
      
        
           * @version 1.0
        
      
        
           */
        
      
        
          public
        
        
          class
        
         DeployInterceptorService {
      
        ?
      
        
          public
        
        
          static
        
        
          void
        
         main(String[] args) 
        
          throws
        
         InterruptedException {
      
        
          //發布WebService
        
      
                JaxWsServerFactoryBean factory = 
        
          new
        
         JaxWsServerFactoryBean();
      
        
          //設置Service Class
        
      
                factory.setServiceClass(HelloWorldService.
        
          class
        
        );
      
                factory.setAddress(
        
          "http://localhost:9000/helloWorld"
        
        );
      
        
          //設置ServiceBean對象
        
      
                 factory.setServiceBean(
        
          new
        
         HelloWorldService());
      
      
        
          //添加請求和響應的攔截器,Phase.RECEIVE只對In有效,Phase.SEND只對Out有效
        
      
                 factory.getInInterceptors().add(
        
          new
        
         MessageInterceptor(Phase.RECEIVE));
      
                factory.getOutInterceptors().add(
        
          new
        
         MessageInterceptor(Phase.SEND));
      
      
                factory.create();
      
      
                System.out.println(
        
          "Server start ......"
        
        );
      
                Thread.sleep(1000 * 60);
      
                System.exit(0);
      
                System.out.println(
        
          "Server exit "
        
        );
      
            }
      
        }
      

值得說的是,以前發布WebService是用Endpoint的push方法。這里用的是JaxWsServerFactoryBean和客戶端調用的代碼JaxWsProxyFactoryBean有點不同。

客戶端調用代碼:

        
          package
        
         com.hoo.client;
      
        ?
      
        
          import
        
         org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
      
        
          import
        
         com.hoo.service.IHelloWorldService;
      
        ?
      
        
          /**
        
      
        
           * <b>function:</b>CXF WebService客戶端調用代碼
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-3-16 上午09:03:49
        
      
        
           * @file HelloWorldServiceClient.java
        
      
        
           * @package com.hoo.client
        
      
        
           * @project CXFWebService
        
      
        
           * @blog http://blog.csdn.net/IBM_hoojo
        
      
        
           * @email hoojo_@126.com
        
      
        
           * @version 1.0
        
      
        
           */
        
      
        
          public
        
        
          class
        
         HelloWorldServiceClient {
      
      
        
          public
        
        
          static
        
        
          void
        
         main(String[] args) {
      
        
          //調用WebService
        
      
                JaxWsProxyFactoryBean factory = 
        
          new
        
         JaxWsProxyFactoryBean();
      
                factory.setServiceClass(IHelloWorldService.
        
          class
        
        );
      
                factory.setAddress(
        
          "http://localhost:9000/helloWorld"
        
        );
      
      
                IHelloWorldService service = (IHelloWorldService) factory.create();
      
                System.out.println(
        
          "[result]"
        
         + service.sayHello(
        
          "hoojo"
        
        ));
      
            }
      
        }
      

三、CXF對Interceptor攔截器的支持


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品αv一区二区三区 亚洲精品爱爱久久 | 特级a欧美做爰片毛片 | 最近中文字幕无吗免费视频 | 男人与牛做爰的视频 | 国产精品午夜久久久久久99热 | 欧美成人香蕉网在线观看 | 国产女人综合久久精品视 | 国产在线视频www色 国产在线视频凹凸分类 | 国产一区二区三区在线 | 成人一区二区免费中文字幕 | 日本精品二区 | 国产成人成人一区二区 | α毛片| 久久综合精品不卡一区二区 | 国产一级特黄特色aa毛片 | 一级特黄aaa大片29 | 久久久噜噜噜久久 | 久久99久久99精品观看 | 免费人成黄页网站在线观看 | 日韩视频不卡 | 日本一区二区三区免费在线观看 | 亚洲综合插插 | 视频黄色在线 | 亚洲视频一区二区三区四区 | 亚洲成人一级 | 色偷偷亚洲第一综合 | 视频二区精品中文字幕 | 精品一久久香蕉国产线看观看下 | 国产成人看片免费视频观看 | 久久国产乱子伦精品免费不卡 | 曰本三级男人吃奶水 | 成年女人午夜毛片免费看 | 在线午夜 | 一区二区三区免费在线观看 | 婷婷sese | 奇米第九色| 一级白嫩美女毛片免费 | 99久久免费看精品国产一区 | 啪啪网站色大全免费 | 四虎影视成人精品 | 99视频在线观看免费视频 |