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

三、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條評論
主站蜘蛛池模板: 国产真实一区二区三区 | 不卡一区二区在线 | 鲁啊鲁啊鲁在线视频播放 | 国产二区三区毛片 | 国产午夜在线观看 | 手机看片日韩日韩韩 | 成年女人免费视频播放77777 | 色老成人精品视频在线观看 | 免费看欧美一级a毛片 | 免费看又爽又黄禁片视频1000 | 99热这里有免费国产精品 | 久久精品免看国产 | 美女粉逼 | 在线播放亚洲 | 妖精视频永久在线入口 | 色丁香在线观看 | 亚洲欧洲日本在线 | 亚洲图片综合区另类图片 | 极品俄罗斯性孕妇孕交 | 久久ww| 台湾一级毛片永久免费 | 韩日精品在线 | 日本高清不卡一区久久精品 | 欧美久在线观看在线观看 | 婷婷的五月| 插吧插吧综合网 | 四虎影视久久久 | 99爱视频在线观看 | 久久久久久久亚洲精品 | 久久综合视频网站 | 99看片网| 久久久www成人免费精品 | 精品久久久久不卡无毒 | 精品视频一区二区三区免费 | 黄色日比视频 | 91精品久久一区二区三区 | 婷婷色中文 | 久久好色| 四虎永久在线精品免费观看地址 | 精品热久国产福利视频 | 日本中文字幕有码 |