javax.xml.rpc.handler.soap是JAX-RPC 1.1(Java XML RPC,旧版SOAP WebService规范)下的标准子包,专门用于 SOAP 协议层面的处理器(Handler)拦截、报文处理。
归属完整规范:JSR 101、JSR 109,现已彻底废弃。
1. 核心作用
对 SOAP 请求/响应报文做拦截处理:
- 获取、修改 SOAP Envelope、Header、Body
- 读取/新增 SOAP Header 安全令牌、鉴权信息
- 日志打印、报文加密解密、签名校验、异常拦截
- 操作 SOAP 故障(SOAP Fault)
二、包内关键类/接口
1.SOAPHandler接口
publicinterfaceSOAPHandlerextendsHandler继承顶层javax.xml.rpc.handler.Handler,专为 SOAP 协议定制,处理上下文绑定 SOAP 消息上下文。
2.SOAPMessageContext
SOAP 专属上下文对象:
getSOAPMessage():拿到完整javax.xml.soap.SOAPMessage,直接操作XML报文节点- 区分入站请求、出站响应
- 获取调用端点、操作名、HTTP头信息
3. 配套上下文体系
父包javax.xml.rpc.handler通用接口:
HandlerChain:处理器链,多个Handler串行执行HandlerInfo:配置Handler执行顺序、参数
三、完整执行流程
- 客户端/服务端发起SOAP调用
- 触发配置好的
HandlerChain - 依次执行自定义
SOAPHandler.handleRequest()- 返回
true:继续向后传递调用 - 返回
false:中断调用,直接构造返回SOAP响应
- 返回
- 服务端业务执行完毕后,反向执行
handleResponse()/handleFault()
四、现状:已淘汰,替代方案
1. 淘汰原因
JAX-RPC(RPC风格WebService)老旧、笨重、兼容性差,Java EE 后续改用JAX-WS(JSR 224),包路径整体重构。
2. JAX-WS 对应新包(推荐使用)
| 旧JAX-RPC 包路径 | JAX-WS 替代包 |
|---|---|
javax.xml.rpc.handler.soap | javax.xml.ws.handler.soap |
核心对应类迁移:
- 旧:
javax.xml.rpc.handler.soap.SOAPHandler - 新:
javax.xml.ws.handler.soap.SOAPHandler<SOAPMessageContext> - 上下文:
javax.xml.ws.handler.soap.SOAPMessageContext
3. 典型新旧代码对比
旧 JAX-RPC(不再使用)
importjavax.xml.rpc.handler.soap.SOAPHandler;importjavax.xml.rpc.handler.soap.SOAPMessageContext;publicclassOldSoapHandlerimplementsSOAPHandler{publicbooleanhandleRequest(MessageContextctx){SOAPMessageContextsoapCtx=(SOAPMessageContext)ctx;// 操作SOAP报文returntrue;}// 省略handleResponse、handleFault、getHeaders}新 JAX-WS 标准写法(JDK自带)
importjavax.xml.ws.handler.soap.SOAPHandler;importjavax.xml.ws.handler.soap.SOAPMessageContext;importjavax.xml.soap.SOAPMessage;importjava.util.Set;publicclassNewSoapHandlerimplementsSOAPHandler<SOAPMessageContext>{@OverridepublicbooleanhandleMessage(SOAPMessageContextcontext){BooleanisOutbound=(Boolean)context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);SOAPMessagesoapMsg=context.getMessage();// 自定义报文处理、加签、加Headerreturntrue;}@OverridepublicSet<QName>getHeaders(){returnnull;}@OverridepublicbooleanhandleFault(SOAPMessageContextcontext){returntrue;}@Overridepublicvoidclose(MessageContextcontext){}}五、Maven 依赖(仅老旧遗留项目)
现代JDK8+内置JAX-WS,无需额外依赖;只有远古J2EE项目才需要引入JAX-RPC:
<!-- 已废弃,新项目禁止引入 --><dependency><groupId>javax.xml.rpc</groupId><artifactId>javax.xml.rpc-api</artifactId><version>1.1</version></dependency>六、常见问题
编译找不到包
JDK6+移除了JAX-RPC内置包,要么手动导入老旧API包,要么直接迁移到JAX-WS。SpringBoot 项目如何注册SOAP Handler
JAX-WS端点发布时通过@HandlerChain(file="handler-chain.xml")配置处理器链,不再使用JAX-RPC的HandlerChain配置类。与
javax.xml.soap区别javax.xml.soap:纯粹SOAP报文XML解析工具包(通用)javax.xml.rpc.handler.soap:RPC调用拦截器框架(WebService调用链路专用)
Package javax.xml.rpc.handler.soap
Skip navigation links
Overview
Package
Class
Use
Tree
Deprecated
Index
HelpPrev Package
Next PackageFrames
No Frames
Package javax.xml.rpc.handler.soap
This package defines APIs for SOAP Message Handlers
See: Description
Interface Summary Interface Description SOAPMessageContext The interface javax.xml.rpc.soap.SOAPMessageContext provides access to the SOAP message for either RPC request or response.Package javax.xml.rpc.handler.soap Description
This package defines APIs for SOAP Message Handlers
Skip navigation links
Overview Package Class Use Tree Deprecated Index Help Prev Package Next Package Frames No Frames