服务器端
handler-chain.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<javaee:handler-chains
xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<javaee:handler-chain>
<javaee:handler>
<javaee:handler-class>org.soap.service.handler.LicenseHandler</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
public class LicenseHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext context) {
try {
Boolean out = (Boolean)context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if(!out) {
SOAPMessage message = context.getMessage();
SOAPEnvelope enve = message.getSOAPPart().getEnvelope();
SOAPHeader header = enve.getHeader();
SOAPBody body = enve.getBody();
Node bn = body.getChildNodes().item(0);
String partname = bn.getLocalName();
if("list".equals(partname)||"addUser".equals(partname)) {
if(header==null) {
//添加一个错误信息
System.out.println("ttt");
SOAPFault fault = body.addFault();
fault.setFaultString("头部信息不能为空!");
throw new SOAPFaultException(fault);
}
Iterator<SOAPHeaderElement> iterator = header.extractAllHeaderElements();
if(!iterator.hasNext()) {
//添加一个错误信息
System.out.println("ttt");
SOAPFault fault = body.addFault();
fault.setFaultString("头部信息不正确!");
throw new SOAPFaultException(fault);
}
while(iterator.hasNext()) {
SOAPHeaderElement ele = iterator.next();
System.out.println(ele.getTextContent());
}
}
}
} catch (SOAPException e) {
e.printStackTrace();
}
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
return false;
}
@Override
public void close(MessageContext context) {
}
@Override
public Set<QName> getHeaders() {
return null;
}
}
客户端
handler-chain.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<javaee:handler-chains
xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<javaee:handler-chain>
<javaee:handler>
<javaee:handler-class>org.soap.service.handler.HeaderHandler</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
public class HeaderHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext context) {
try {
String ns = "http://service.soap.org/";
//发送信息时MESSAGE_OUTBOUND_PROPERTY
//接收信息时INBOUND_MESSAGE_ATTACHMENTS
Boolean out = (Boolean)context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if(out) {
SOAPMessage message = context.getMessage();
//1、判断message中是否存在header
SOAPEnvelope enve = message.getSOAPPart().getEnvelope();
SOAPBody body = enve.getBody();
Node node = body.getChildNodes().item(0);
String pn = node.getLocalName();
if("list".equals(pn)||"addUser".equals(pn)) {
SOAPHeader header = enve.getHeader();
if(header==null) header = enve.addHeader();
QName qname = new QName(ns, "licenseInfo","ns");
header.addHeaderElement(qname).setValue("123123");
message.writeTo(System.out);
}
}
} catch (SOAPException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
System.out.println("error");
return false;
}
@Override
public void close(MessageContext context) {
}
@Override
public Set<QName> getHeaders() {
return null;
}
}
分享到:
相关推荐
标题中的“JAX-WS SOAP header设值”指的是在Java应用程序中使用JAX-WS(Java API for XML Web Services)框架来设置SOAP消息头的过程。SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在Web服务中...
JAX-WS支持SOAP消息处理,包括SOAP消息头和SOAP消息体的处理。开发者可以通过实现MessageHandler接口来扩展消息处理能力。 5. **数据绑定** JAX-WS使用Java Architecture for XML Binding (JAXB)进行数据绑定,将...
- **简介**:概述了 SOAP 1.2 的特点及其与 JAX-WS 的集成。 - **SOAP 1.2 端点**:讲解了如何创建和配置 SOAP 1.2 端点。 - **客户端**:描述了如何创建 SOAP 1.2 客户端。 - **示例**:提供了具体的 SOAP 1.2 应用...
2. **消息处理**:JAX-WS支持处理SOAP消息的不同部分,如头、体等,还可以使用Handler链进行自定义处理。 3. **异步调用**:JAX-WS支持异步调用Web服务,提高了响应速度和系统效率。 4. **安全性**:JAX-WS提供了...
<handler-name>AuthorizationHandler</handler-name> <handler-class>com.example.AuthorizationHandler</handler-class> </handler> </handler-chain> </handler-chains> ``` 这样,我们就完成了JAX-WS服务在...
在这个例子中,我们将关注如何使用`JAX-WS`的`Handler`机制进行调用权限校验。 `Handler`是`JAX-WS`中的一个重要组件,它允许我们在Web服务调用的生命周期中插入自定义逻辑。这包括在消息发送前、接收到消息后、...
JAX-WS 2.0 在继承了前一版本 JAX-RPC 的基础上进行了大幅改进,增加了对 SOAP 1.2 的支持,提供了更为丰富的 API 接口以及更加简洁的操作方式。此外,JAX-WS 2.0 还具有以下核心特点: 1. **简化编程模型**:通过...
本指南主要介绍如何使用NetBeans结合JAX-WS 2.0来开发Web服务,同时涵盖了JAX-WS处理程序(Handler)与安全机制等内容。JAX-WS (Java API for XML Web Services) 是一种用于构建和访问Web服务的标准API,它简化了...
3. **SOAP消息处理**:JAX-WS提供了MessageHandler接口,允许开发者对SOAP消息进行自定义处理,如添加安全认证或数据转换。 4. **客户端调用**:使用JAX-WS,开发者可以使用`Service`类来创建客户端代理对象,这个...
JAX-WS主要基于SOAP和WSDL,适合复杂的、面向事务的、需要强类型检查的服务。而RESTful风格的Web服务更简洁,通常使用HTTP协议,通过URI、HTTP方法和JSON或XML数据格式进行交互,更适合互联网环境。 **JAX-WS的工具...
**JAX-RPC SOAP 头扩展:客户端与服务端实例详解** JAX-RPC(Java API for XML-based RPC,基于XML的RPC的Java API)是Java平台上的一个标准,用于处理远程过程调用(RPC)的XML编码和解码。SOAP(简单对象访问协议...
<handler-class>com.ws.handler.HelloHandler</handler-class> </handler> </handler-chain> </handler-chains> ``` 3. Handler 类 `HelloHandler` 实现了 `SOAPHandler<SOAPMessageContext>` 接口,这个接口是...
《JAX-WS 2.1规范》:深入解析与应用 标题:“JAX-WS 2.1规范” 描述概述:JAX-WS(Java API for XML-Based Web Services)2.1规范是一份详尽的技术文档,由Sun Microsystems于2007年5月7日发布。该规范为开发基于...
3. **SOAP绑定**:JAX-WS处理与SOAP消息相关的细节,如将Java方法调用转换为SOAP消息,反之亦然。 4. **Handler Chain**:提供了一种机制,允许开发者插入自定义逻辑来处理请求和响应,例如添加安全检查或日志记录...
JAX-WS支持SOAP、WSDL(Web服务描述语言)和UDDI(Universal Description, Discovery and Integration)等Web服务标准。通过JAX-WS,开发人员可以轻松地创建符合WS-I(Web Services Interoperability)基本配置的Web...
在"SOAP与Java编程指南.pdf"这本书中,读者将深入理解SOAP协议的基础,学习如何使用Java和JAX-WS创建和消费SOAP Web服务,同时了解相关的工具和最佳实践,以应对各种实际开发挑战。通过阅读和实践,开发者可以提升...
在Java中,我们通常使用JAX-WS(Java API for XML Web Services)来处理SOAP请求和响应。JAX-WS提供了一种方便的方式来创建和消费SOAP服务。下面将详细介绍如何使用Java和JAX-WS实现SOAP通信: 1. **创建SOAP服务**...
而在JAX-WS中,可能需要实现`javax.xml.ws.handler.soap.SOAPHandler`接口并处理`SOAPMessageContext`。 5. **工具辅助**:虽然可以通过源码手动实现,但现代开发环境中也有许多工具和框架可以简化这个过程。例如,...
JAX-WS 是 JAX-RPC 的下一代标准,它引入了更多的 Web 服务标准,如 JAXB(Java Architecture for XML Binding)用于XML和Java对象之间的绑定,以及 JAX-WS RI(Reference Implementation)作为实现JAX-WS规范的参考...