`
xxxx1243
  • 浏览: 16751 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

jax-ws soap Handler

 
阅读更多
服务器端
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设值

    标题中的“JAX-WS SOAP header设值”指的是在Java应用程序中使用JAX-WS(Java API for XML Web Services)框架来设置SOAP消息头的过程。SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在Web服务中...

    JAX-WS2.1用户指南

    JAX-WS支持SOAP消息处理,包括SOAP消息头和SOAP消息体的处理。开发者可以通过实现MessageHandler接口来扩展消息处理能力。 5. **数据绑定** JAX-WS使用Java Architecture for XML Binding (JAXB)进行数据绑定,将...

    jax-ws用户指南 pdf版

    - **简介**:概述了 SOAP 1.2 的特点及其与 JAX-WS 的集成。 - **SOAP 1.2 端点**:讲解了如何创建和配置 SOAP 1.2 端点。 - **客户端**:描述了如何创建 SOAP 1.2 客户端。 - **示例**:提供了具体的 SOAP 1.2 应用...

    JAX-WS使用教程(内含jar包)

    2. **消息处理**:JAX-WS支持处理SOAP消息的不同部分,如头、体等,还可以使用Handler链进行自定义处理。 3. **异步调用**:JAX-WS支持异步调用Web服务,提高了响应速度和系统效率。 4. **安全性**:JAX-WS提供了...

    JAX-WS在Tomcat中发布服务

    &lt;handler-name&gt;AuthorizationHandler&lt;/handler-name&gt; &lt;handler-class&gt;com.example.AuthorizationHandler&lt;/handler-class&gt; &lt;/handler&gt; &lt;/handler-chain&gt; &lt;/handler-chains&gt; ``` 这样,我们就完成了JAX-WS服务在...

    jax-ws的handler做调用权限校验例子

    在这个例子中,我们将关注如何使用`JAX-WS`的`Handler`机制进行调用权限校验。 `Handler`是`JAX-WS`中的一个重要组件,它允许我们在Web服务调用的生命周期中插入自定义逻辑。这包括在消息发送前、接收到消息后、...

    JAX-WS2.0规范

    JAX-WS 2.0 在继承了前一版本 JAX-RPC 的基础上进行了大幅改进,增加了对 SOAP 1.2 的支持,提供了更为丰富的 API 接口以及更加简洁的操作方式。此外,JAX-WS 2.0 还具有以下核心特点: 1. **简化编程模型**:通过...

    WSIT指南-jax-ws指南

    本指南主要介绍如何使用NetBeans结合JAX-WS 2.0来开发Web服务,同时涵盖了JAX-WS处理程序(Handler)与安全机制等内容。JAX-WS (Java API for XML Web Services) 是一种用于构建和访问Web服务的标准API,它简化了...

    JAX-WS2.2.6包

    3. **SOAP消息处理**:JAX-WS提供了MessageHandler接口,允许开发者对SOAP消息进行自定义处理,如添加安全认证或数据转换。 4. **客户端调用**:使用JAX-WS,开发者可以使用`Service`类来创建客户端代理对象,这个...

    JAX-WS_Java API for XML Web Services

    JAX-WS主要基于SOAP和WSDL,适合复杂的、面向事务的、需要强类型检查的服务。而RESTful风格的Web服务更简洁,通常使用HTTP协议,通过URI、HTTP方法和JSON或XML数据格式进行交互,更适合互联网环境。 **JAX-WS的工具...

    jax-rpc soap头扩展 客户端,服务端例子

    **JAX-RPC SOAP 头扩展:客户端与服务端实例详解** JAX-RPC(Java API for XML-based RPC,基于XML的RPC的Java API)是Java平台上的一个标准,用于处理远程过程调用(RPC)的XML编码和解码。SOAP(简单对象访问协议...

    jax-ws handler 的详解及简单实例

    &lt;handler-class&gt;com.ws.handler.HelloHandler&lt;/handler-class&gt; &lt;/handler&gt; &lt;/handler-chain&gt; &lt;/handler-chains&gt; ``` 3. Handler 类 `HelloHandler` 实现了 `SOAPHandler&lt;SOAPMessageContext&gt;` 接口,这个接口是...

    jaxws-2_1规范

    《JAX-WS 2.1规范》:深入解析与应用 标题:“JAX-WS 2.1规范” 描述概述:JAX-WS(Java API for XML-Based Web Services)2.1规范是一份详尽的技术文档,由Sun Microsystems于2007年5月7日发布。该规范为开发基于...

    webservice的jar.zip

    3. **SOAP绑定**:JAX-WS处理与SOAP消息相关的细节,如将Java方法调用转换为SOAP消息,反之亦然。 4. **Handler Chain**:提供了一种机制,允许开发者插入自定义逻辑来处理请求和响应,例如添加安全检查或日志记录...

    jaxws-api-2.1_jaxb-api-2.1.jar

    JAX-WS支持SOAP、WSDL(Web服务描述语言)和UDDI(Universal Description, Discovery and Integration)等Web服务标准。通过JAX-WS,开发人员可以轻松地创建符合WS-I(Web Services Interoperability)基本配置的Web...

    SOAP与Java编程指南

    在"SOAP与Java编程指南.pdf"这本书中,读者将深入理解SOAP协议的基础,学习如何使用Java和JAX-WS创建和消费SOAP Web服务,同时了解相关的工具和最佳实践,以应对各种实际开发挑战。通过阅读和实践,开发者可以提升...

    soap(java).rar_DEMO_soap java

    在Java中,我们通常使用JAX-WS(Java API for XML Web Services)来处理SOAP请求和响应。JAX-WS提供了一种方便的方式来创建和消费SOAP服务。下面将详细介绍如何使用Java和JAX-WS实现SOAP通信: 1. **创建SOAP服务**...

    WebService之XFire和Jax实现身份验证

    而在JAX-WS中,可能需要实现`javax.xml.ws.handler.soap.SOAPHandler`接口并处理`SOAPMessageContext`。 5. **工具辅助**:虽然可以通过源码手动实现,但现代开发环境中也有许多工具和框架可以简化这个过程。例如,...

    Java远程通信技术——Axis实战.doc

    JAX-WS 是 JAX-RPC 的下一代标准,它引入了更多的 Web 服务标准,如 JAXB(Java Architecture for XML Binding)用于XML和Java对象之间的绑定,以及 JAX-WS RI(Reference Implementation)作为实现JAX-WS规范的参考...

Global site tag (gtag.js) - Google Analytics