WebService -- Java 实现之 CXF ( 添加系统预定义的拦截器)
1. 概述
CXF允许我们在webservice的in/out位置添加拦截器。拦截器有两大分类,一类是系统预定义的;另一类是自定义拦截器。
2. 在server端添加拦截器。
JaxWsServerFactoryBean wsSvrFactoryBean = new JaxWsServerFactoryBean(); String address = "http://127.0.0.1/helloWorld"; wsSvrFactoryBean.setAddress(address); wsSvrFactoryBean.setServiceClass(HelloWorld.class); HelloWorld implementor = new HelloWorldImpl(); wsSvrFactoryBean.setServiceBean(implementor); // add in out logging Interceptors wsSvrFactoryBean.getInInterceptors().add(new LoggingInInterceptor()); wsSvrFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); wsSvrFactoryBean.create();
3. 在client端添加拦截器。
3.1 在client项目中添加CXF引用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version> 3.1 . 5 </version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version> 3.1 . 5 </version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version> 3.1 . 5 </version> </dependency> </dependencies> |
3.2 使用ClientProxy对象添加拦截器
1 2 3 4 5 | HelloWorld helloWorldClient = new HelloWorldService().getHelloWorldPort(); // add on inteceptors org.apache.cxf.endpoint.Client client = ClientProxy.getClient(helloWorldClient); client.getInInterceptors().add( new LoggingInInterceptor()); client.getOutInterceptors().add( new LoggingOutInterceptor()); |
4. client/server output information
--client--
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 十二月 30 , 2016 11 : 25 : 45 下午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL 信息: Creating Service {http: //webservice.tuo.example.com/}HelloWorldService from WSDL: http://127.0.0.1/helloWorld?wsdl 十二月 30 , 2016 11 : 25 : 46 下午 org.apache.cxf.services.HelloWorldService.HelloWorldPort.HelloWorld 信息: Outbound Message --------------------------- ID: 1 Address: http: //127.0.0.1/helloWorld Encoding: UTF- 8 Http-Method: POST Content-Type: text/xml Headers: {Accept=[*/*], SOAPAction=[ "" ]} Payload: <soap:Envelope xmlns:soap= "http://schemas.xmlsoap.org/soap/envelope/" ><soap:Body><ns2:sayHello xmlns:ns2= "http://webservice.tuo.example.com/" ><arg0>Tony</arg0></ns2:sayHello></soap:Body></soap:Envelope> -------------------------------------- 十二月 30 , 2016 11 : 25 : 47 下午 org.apache.cxf.services.HelloWorldService.HelloWorldPort.HelloWorld 信息: 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 ], Date=[Fri, 30 Dec 2016 15 : 25 : 46 GMT], Server=[Jetty( 9.2 . 11 .v20150529)], transfer-encoding=[chunked]} Payload: <soap:Envelope xmlns:soap= "http://schemas.xmlsoap.org/soap/envelope/" ><soap:Body><ns2:sayHelloResponse xmlns:ns2= "http://webservice.tuo.example.com/" >< return >Hello world,Tony</ return ></ns2:sayHelloResponse></soap:Body></soap:Envelope> -------------------------------------- Hello world,Tony |
--server--
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 信息: Inbound Message ---------------------------- ID: 1 Address: http: //127.0.0.1/helloWorld?wsdl Http-Method: GET Content-Type: text/xml Headers: {Accept=[* /*], Cache-Control=[no-cache], connection=[keep-alive], content-type=[text/xml], Host=[127.0.0.1], Pragma=[no-cache], User-Agent=[Apache CXF 3.1.5]} -------------------------------------- 十二月 30, 2016 11:25:46 下午 org.apache.cxf.services.HelloWorldService.HelloWorldPort.HelloWorld 信息: Inbound Message ---------------------------- ID: 2 Address: http://127.0.0.1/helloWorld Encoding: UTF-8 Http-Method: POST Content-Type: text/xml; charset=UTF-8 Headers: {Accept=[*/ *], Cache-Control=[no-cache], connection=[keep-alive], Content-Length=[ 202 ], content-type=[text/xml; charset=UTF- 8 ], Host=[ 127.0 . 0.1 ], Pragma=[no-cache], SOAPAction=[ "" ], User-Agent=[Apache CXF 3.1 . 5 ]} Payload: <soap:Envelope xmlns:soap= "http://schemas.xmlsoap.org/soap/envelope/" ><soap:Body><ns2:sayHello xmlns:ns2= "http://webservice.tuo.example.com/" ><arg0>Tony</arg0></ns2:sayHello></soap:Body></soap:Envelope> -------------------------------------- 十二月 30 , 2016 11 : 25 : 47 下午 org.apache.cxf.services.HelloWorldService.HelloWorldPort.HelloWorld 信息: Outbound Message --------------------------- ID: 2 Response-Code: 200 Encoding: UTF- 8 Content-Type: text/xml Headers: {} Payload: <soap:Envelope xmlns:soap= "http://schemas.xmlsoap.org/soap/envelope/" ><soap:Body><ns2:sayHelloResponse xmlns:ns2= "http://webservice.tuo.example.com/" >< return >Hello world,Tony</ return ></ns2:sayHelloResponse></soap:Body></soap:Envelope> -------------------------------------- |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现