博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAX-WS HandlerChain使用具体解释
阅读量:6801 次
发布时间:2019-06-26

本文共 2830 字,大约阅读时间需要 9 分钟。

JAX-WS的Handler和Servlet的Filter相似,能够对全部WebServicer进行拦截,在Handler中能够记录日志、权限控制、对请求的SOAP消息进行加密。解密等。JAX-WS提供两个Handler接口,LogicalHandler和SOAPHandler。LogicalHandler处理的是Message Payload。仅仅能够訪问消息单元中的SOAP消息体。SOAPHandler处理的是整个SOAP消息(包括SOAP header和SOAP body),能够訪问整个SOAP消息。

注冊Handler的方式有以下几种:

使用HandlerResolver(client比較方便)

使用HandlerChain注解和配置文件

从WSDL生成

使用Custom Binding声明HandlerChain

JAX-WS中WebService运行顺序如图所看到的

以下用SOAPHandler实如今WebService服务端记录请求内容和响应内容。

import java.io.IOException;import java.util.Set;import javax.xml.namespace.QName;import javax.xml.soap.SOAPException;import javax.xml.soap.SOAPMessage;import javax.xml.ws.handler.MessageContext;import javax.xml.ws.handler.soap.SOAPHandler;import javax.xml.ws.handler.soap.SOAPMessageContext;/** * 记录SOAP请求及响应 * @author accountwcx@qq.com * */public class LoggerHandler implements SOAPHandler
{ @Override public void close(MessageContext context) { } @Override public boolean handleFault(SOAPMessageContext context) { return true; } @Override public boolean handleMessage(SOAPMessageContext context) { // 推断消息是输入还是输出 Boolean output = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); System.out.println(output ? "响应SOAP:" : "请求SOAP:"); SOAPMessage message = context.getMessage(); try { message.writeTo(System.out); } catch (SOAPException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println(""); return true; } @Override public Set
getHeaders() { return null; }}
在classpath下建handler-chain.xml配置文件

com.rvho.server.ws.handler.LoggerHandler
在服务实现类上加入HandlerChain配置

package com.rvho.server.ws.impl;import java.util.Date;import javax.jws.HandlerChain;import javax.jws.WebService;import com.rvho.server.ws.HelloWService;@WebService(	endpointInterface = "com.rvho.server.ws.HelloWService",	portName = "HelloWSPort",	serviceName = "HelloWSService",	targetNamespace = "http://www.tmp.com/ws/hello")@HandlerChain(file="handler-chain.xml") //加入Handler配置文件public class HelloWServiceImpl implements HelloWService {	public String index() {		return "hello";	}	public Integer add(Integer x, Integer y) {		return x + y;	}	public Date now() {		return new Date();	}}
服务实现接口

package com.rvho.server.ws;import java.util.Date;import javax.jws.WebService;/** * WebService接口 */@WebService(	name = "HelloWS",	targetNamespace = "http://www.tmp.com/ws/hello")public interface HelloWService {	/**	 * 返回字符串	 * 	 * @return	 */	String index();	/**	 * 两个整数相加	 * 	 * @param x	 * @param y	 * @return 相加后的值	 */	Integer add(Integer x, Integer y);	/**	 * 返回当前时间	 * 	 * @return	 */	Date now();}
client发起index请求,服务端的记录

请求SOAP:
响应SOAP:
hello

你可能感兴趣的文章
面试1
查看>>
【Java基础】4、java中的内部类
查看>>
Mac ssh
查看>>
h5 喜帖
查看>>
全局修改默认字体,通过反射也能做到
查看>>
直方图
查看>>
LeetCode: 【L4】N-Queens 解题报告
查看>>
首届HTML5原创游戏大赛将于6月10日拉开序幕
查看>>
8个对于Web设计和开发人员非常有用的在线工具
查看>>
iOS - (简单平移动画/弹出View的使用)
查看>>
Bloom Filter概念和原理
查看>>
SPOJ PGCD 4491. Primes in GCD Table && BZOJ 2820 YY的GCD (莫比乌斯反演)
查看>>
STL学习系列八:Set和multiset容器
查看>>
入门案例
查看>>
C++ 虚函数表解析(转)
查看>>
八数码问题及A*算法
查看>>
iOS:解决动画加阴影卡的问题
查看>>
PHP数组读取的循环操作
查看>>
[置顶] Oracle 11g Undo 表空间切换
查看>>
Andriod 环境配置以及第一个Android Application Project
查看>>