欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

三、CXF對(duì)Interceptor攔截器的支持

系統(tǒng) 3219 0

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

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

        
          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客戶端調(diào)用代碼
        
      
        
           * @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) {
      
        
          //調(diào)用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的攔截器是添加在客戶端,同樣在服務(wù)器端也是可以添加攔截器Interceptor的。運(yùn)行后結(jié)果如下:

    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輸出的日志信息,分別在請(qǐng)求和響應(yīng)的時(shí)候輸出日志信息,還有輸出請(qǐng)求的時(shí)候參數(shù)的信息以及響應(yīng)的時(shí)候返回值的信息。

2、 剛才是客戶端添加Interceptor,現(xiàn)在我們自己編寫一個(gè)Interceptor,這個(gè)Interceptor需要繼承AbstractPhaseInterceptor,實(shí)現(xiàn)handleMessage和一個(gè)帶參數(shù)的構(gòu)造函數(shù)。然后在服務(wù)器端添加這個(gè)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> {
      
      
        
          //至少要一個(gè)帶參的構(gòu)造函數(shù)
        
      
        
          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());
      
                }
      
            }
      
        }
      

下面看看發(fā)布服務(wù)和添加自定義攔截器的代碼:

        
          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>在服務(wù)器發(fā)布自定義的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 {
      
        
          //發(fā)布WebService
        
      
                JaxWsServerFactoryBean factory = 
        
          new
        
         JaxWsServerFactoryBean();
      
        
          //設(shè)置Service Class
        
      
                factory.setServiceClass(HelloWorldService.
        
          class
        
        );
      
                factory.setAddress(
        
          "http://localhost:9000/helloWorld"
        
        );
      
        
          //設(shè)置ServiceBean對(duì)象
        
      
                 factory.setServiceBean(
        
          new
        
         HelloWorldService());
      
      
        
          //添加請(qǐng)求和響應(yīng)的攔截器,Phase.RECEIVE只對(duì)In有效,Phase.SEND只對(duì)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 "
        
        );
      
            }
      
        }
      

值得說的是,以前發(fā)布WebService是用Endpoint的push方法。這里用的是JaxWsServerFactoryBean和客戶端調(diào)用的代碼JaxWsProxyFactoryBean有點(diǎn)不同。

客戶端調(diào)用代碼:

        
          package
        
         com.hoo.client;
      
        ?
      
        
          import
        
         org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
      
        
          import
        
         com.hoo.service.IHelloWorldService;
      
        ?
      
        
          /**
        
      
        
           * <b>function:</b>CXF WebService客戶端調(diào)用代碼
        
      
        
           * @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) {
      
        
          //調(diào)用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對(duì)Interceptor攔截器的支持


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 美女扒开内裤让男人桶 | 亚洲日韩欧洲无码av夜夜摸 | 看个毛片 | 中文字幕三区 | 日韩精品一区二区三区中文字幕 | 男人天堂中文字幕 | 国产黑丝在线播放 | 日韩三极 | 国产精品国产三级国产专区5o | 国产精选91热在线观看 | 欧美 日韩 国产 一区 | 三级网站日本 | 亚洲成人一区二区 | 日本捏胸摸下面免费视频 | 夜夜操免费视频 | 中文字幕av亚洲精品一部二部 | 成人亚洲视频在线观看 | 亚洲国产第一页 | a网站 | 日本黄页网址 | 久爱视频www在线播放 | 性色网站 | 欧美一区二区免费 | 在线观看中文字幕 | 日本色图视频 | 中文字幕一区二区三区四区五区 | 久久av高清 | 在线欧美一区 | 国产精品极品美女在线观看免费 | 日本高清无遮挡 | 亚洲欧美日韩精品久久 | 波多野结衣在线资源 | 国产在线精品一区二区三区 | 9久热这里只有精品视频在线观看 | 国产午夜精品视频免费不卡69堂 | 日韩在线观看网站 | 欧美日韩福利视频 | 欧美激情视频一区二区免费 | 少妇特黄a一区二区三区88av | 久久精品在这里 | 女同久久另类99精品国产 |