webservice学习笔记(6)--spring结合xsf拦截器
来源:互联网 发布:linux rhel 环境变量 编辑:程序博客网 时间:2024/05/18 03:45
/** * @文件名称: Order.java * @描述: TODO * @作者: 一叶扁舟(skiff) * @时间:2017年2月23日 上午9:47:35 * @版本:V1.0 */package www.skiff.cn.webservice.domain;/** * @类功能说明: * @作者: 一叶扁舟 (skiff) * @创建时间:2017年2月23日 上午9:47:35 * @版本:V1.0 */public class Order {private Long id;private String name;private double price;/** *@param price * @param name * @param id * @类名:Order.java *@描述:{todo} */ public Order(long id, String name, int price) {this.id = id;this.name = name;this.price = price;}/** * @return the id */public Long getId() {return id;}/** * @param id the id to set */public void setId(Long id) {this.id = id;}/** * @return the name */public String getName() {return name;}/** * @param name the name to set */public void setName(String name) {this.name = name;}/** * @return the price */public double getPrice() {return price;}/** * @param price the price to set */public void setPrice(double price) {this.price = price;}}
package www.skiff.cn.webservice.interceptor;import javax.xml.namespace.QName;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.headers.Header;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.w3c.dom.Element;/** * @类功能说明: 服务端的拦截器 * @作者: 一叶扁舟 (skiff) * @创建时间:2017年2月23日 下午12:05:22 * @版本:V1.0 */ public class CheckUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> { public CheckUserInterceptor() {super(Phase.PRE_PROTOCOL);System.out.println("CheckUserInterceptor()");}/* <Envelope> <head> <atguigu> <name>xfzhang</name> <password>123456</password> </atguigu> <atguigu2> <name>xfzhang</name> <password>123456</password> </atguigu2> <head> <Body> <sayHello> <arg0>BOB</arg0> <sayHello> </Body> </Envelope> */@Overridepublic void handleMessage(SoapMessage message) throws Fault {Header header = message.getHeader(new QName("atguigu"));if(header!=null) {Element atguiguEle = (Element) header.getObject();String name = atguiguEle.getElementsByTagName("name").item(0).getTextContent();String password = atguiguEle.getElementsByTagName("password").item(0).getTextContent();if("xfzhang".equals(name) && "123456".equals(password)) {System.out.println("Server 通过拦截器....");return;}}//不能通过System.out.println("Server 没有通过拦截器....");throw new Fault(new RuntimeException("请求需要一个正确的用户名和密码!"));}}
/** * @文件名称: OrderWSImpl.java * @描述: TODO * @作者: 一叶扁舟(skiff) * @时间:2017年2月23日 上午10:00:15 * @版本:V1.0 */ package www.skiff.cn.webservice.ws.impl;import www.skiff.cn.webservice.domain.Order;import www.skiff.cn.webservice.ws.IOrderWS;/** * @类功能说明: * @作者: 一叶扁舟 (skiff) * @创建时间:2017年2月23日 上午10:00:15 * @版本:V1.0 */public class OrderWSImpl implements IOrderWS {/** *@类名:OrderWSImpl.java *@描述:{todo} */ public OrderWSImpl() {System.out.println("OrderWSImpl()");}/* (non-Javadoc) * @see www.skiff.cn.webservice.ws.OrderWS#getOrderById(java.lang.Long) */@Overridepublic Order getOrderById(Long id) {System.out.println("web server():");return new Order(1L,"无悔",1000000000);}}
/** * @文件名称: OrderWS.java * @描述: TODO * @作者: 一叶扁舟(skiff) * @时间:2017年2月23日 上午9:54:52 * @版本:V1.0 */ package www.skiff.cn.webservice.ws;import javax.jws.WebMethod;import javax.jws.WebService;import www.skiff.cn.webservice.domain.Order;/** * @类功能说明: 创建一个SEI(终端服务接口) * @作者: 一叶扁舟 (skiff) * @创建时间:2017年2月23日 上午9:54:52 * @版本:V1.0 */@WebServicepublic interface IOrderWS {@WebMethodpublic Order getOrderById(Long id);}服务端的beans.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.xsdhttp://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><!-- 引cxf的一些核心配置 --><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" /><jaxws:endpoint id="orderWS" implementor="www.skiff.cn.webservice.ws.impl.OrderWSImpl"address="/orderws" ><!--配置服务端的入拦截器 --><!-- <jaxws:inInterceptors> <bean class="com.atguigu.day01_ws.interceptor.CheckUserInterceptor"></bean> </jaxws:inInterceptors> --> </jaxws:endpoint></beans>
服务端的web.xml文件
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>webservice_cxf_spring</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 配置beans.xml --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:beans.xml</param-value> </context-param> <!-- 应用启动的一个监听器 --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- 所有请求都会先经过cxf框架 --> <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></web-app>
服务端结构图:
客户端:
1.生成客户端代码
2.写客户端调用代码
3.配置client-beans.xml
/** * @文件名称: ClientTest.java * @描述: TODO * @作者: 一叶扁舟(skiff) * @时间:2017年2月23日 上午11:14:04 * @版本:V1.0 */ package www.skiff.cn.webservice.test;import org.springframework.context.support.ClassPathXmlApplicationContext;import www.skiff.cn.webservice.ws.Order;import www.skiff.cn.webservice.ws.impl.IOrderWS;/** * @类功能说明: * @作者: 一叶扁舟 (skiff) * @创建时间:2017年2月23日 上午11:14:04 * @版本:V1.0 */public class ClientTest {public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"/client-beans.xml"});IOrderWS orderWS = (IOrderWS) context.getBean("orderClient");Order order = orderWS.getOrderById(2L);System.out.println("----"+order);}}
package www.skiff.cn.webservice.interceptor;import java.util.List;import javax.xml.namespace.QName;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.headers.Header;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.apache.xml.utils.DOMHelper;import org.w3c.dom.Document;import org.w3c.dom.Element;/** * @类功能说明: 创建一个客户端的拦截器 * @作者: 一叶扁舟 (skiff) * @创建时间:2017年2月23日 上午11:35:41 * @版本:V1.0 */ public class AddUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {private String name;private String password;public AddUserInterceptor(String name, String password) {super(Phase.PRE_PROTOCOL);//准备协议化时拦截this.name = name;this.password = password;System.out.println("AddUserInterceptor()....");}/* <Envelope> <head> <atguigu> <name>xfzhang</name> <password>123456</password> </atguigu> <atguigu2> <name>xfzhang</name> <password>123456</password> </atguigu2> <head> <Body> <sayHello> <arg0>BOB</arg0> <sayHello> </Body> </Envelope> */@SuppressWarnings("deprecation")@Overridepublic void handleMessage(SoapMessage msg) throws Fault {List<Header> headers = msg.getHeaders();/* <atguigu><name>xfzhang</name><password>123456</password></atguigu> */Document document = DOMHelper.createDocument();Element rootEle = document.createElement("atguigu");Element nameELe = document.createElement("name");nameELe.setTextContent(name);rootEle.appendChild(nameELe);Element passwordELe = document.createElement("password");passwordELe.setTextContent(password);rootEle.appendChild(passwordELe);headers.add(new Header(new QName("atguigu"), rootEle));System.out.println("client handleMessage()....");}}
client-beans.xml文件
<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.xsdhttp://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><!--产生的代理对象 --><jaxws:client id="orderClient" serviceClass="www.skiff.cn.webservice.ws.impl.IOrderWS"address="http://localhost:8080/webservice_cxf_spring/orderws" ><!--配置客户端的出拦截器 --><jaxws:outInterceptors><bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/><bean class="www.skiff.cn.webservice.interceptor.AddUserInterceptor"><constructor-arg name="name" value="xfzhang"/><constructor-arg name="password" value="123456"/></bean></jaxws:outInterceptors></jaxws:client></beans>
0 0
- webservice学习笔记(6)--spring结合xsf拦截器
- WebService学习笔记-添加拦截器到基于Spring的Webservice
- WebService学习笔记(五)拦截器与SOAP协议
- WebService学习笔记(七)自定义拦截器
- WebService学习笔记-CXF添加拦截器
- Spring学习笔记(13)----------aop拦截器
- Spring 学习笔记(11)—— SpringMVC 拦截器
- spring学习笔记 -- 拦截器(一)
- WebService学习笔记-CXF添加自定义拦截器
- 调用webservice服务(二) 学习笔记/cxf拦截器
- WebService学习总结八 WebService 拦截器
- WebService学习总结十 使用Spring发布WebService并添加拦截器
- cxf+Spring的webservice应用--拦截器
- WebService-CXF-Spring+自定义拦截器
- spring拦截器.学习.
- spring拦截器学习
- Spring拦截器学习
- WebService:Xfire+Spring学习笔记
- 第三十三章 SpringBoot使用第三方配置文件
- is ambiguous in Mapped Statements collection
- TextView的折叠和扩展
- Previous operation has not finished; run 'cleanup' if it was interrupted
- 在AndroidAPP中使用SVG矢量图
- webservice学习笔记(6)--spring结合xsf拦截器
- 谷歌公司推出Cloud Spanner云计算数据库服务
- 【PAT】1016. Phone Bills
- 第三十四章 SpringBoot获取配置属性
- Android学习笔记——问题汇总
- 完美打印JSON
- 在自定义的 btrfs+subvolume 上安装 Deepin 15
- 《spring-boot学习》-01-初体验
- [BZOJ3509][CodeChef][FFT][分块]COUNTARI