文档章节

HelloWord例子:客户端向请求SOAP消息中注入报头块(使用编码方式)

柳哥
 柳哥
发布于 2014/04/15 11:27
字数 553
阅读 758
收藏 5

通过定义一个配置文件来管理这些处理程序是一个比较好的做法,但是还可以采用其他方法。用配置文件的方式可以保持客户端和服务端代码相对清洁。这些SOAP处理程序一般不是应用程序逻辑的主体内容,因此,通常较好的做法就是通过像handle-chain.xml这样的元数据文件来管理它们。虽然如此,通过编码的方式来管理这些SOAP处理程序也非难事。

我们使用的例子还是HelloWord示例,服务端完全一样,客户端只有服务调用客户端程序HelloWordClient1.java需要修改,另外还要增加两个类:一个是SOAP消息处理链类,一个是额外增加的一个SOAP处理程序。

TestHandler.java:

package fibC;

import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

public class TestHandler implements SOAPHandler<SOAPMessageContext> {

	@Override
	public boolean handleMessage(SOAPMessageContext context) {
		System.out.println("TestHandler-->handleMessage");
		return true;
	}

	@Override
	public boolean handleFault(SOAPMessageContext context) {
		System.out.println("TestHandler-->handleFault!!");
		return true;
	}

	@Override
	public void close(MessageContext context) {
	}

	@Override
	public Set<QName> getHeaders() {
		return null;
	}
}

ClientHandlerResolver.java:

package hw1;

import java.util.ArrayList;
import java.util.List;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.handler.PortInfo;

import fibC.TestHandler;
import fibC.UUIDHandler;

public class ClientHandlerResolver implements HandlerResolver {

	@SuppressWarnings("rawtypes")
	@Override
	public List<Handler> getHandlerChain(PortInfo portInfo) {
		List<Handler> hchain = new ArrayList<Handler>();
		hchain.add(new UUIDHandler());
		hchain.add(new TestHandler());
		return hchain;
	}
}

HelloWordClient1.java:

package hw1;

import javax.xml.ws.Holder;

public class HelloWordClient1 {
	public static void main(String[] args) {
		String name = "老师";
		Holder<String> wh = new Holder<String>();
		wh.value = "你好";
		Holder<String> hf = new Holder<String>();
		HelloWordImplService service = new HelloWordImplService();
		//设置SOAP消息处理程序链
		service.setHandlerResolver(new ClientHandlerResolver());
		HelloWord port = service.getPort(HelloWord.class);
		port.sayHello(name, wh, hf);
		System.out.println(hf.value + "," + wh.value);
	}
}

ClientHandlerResolver类实现了HandlerResolver接口,接口HandlerResolver只定义了一个getHandlerChain方法。运行时服务程序通过调用这个方法获取一个SOAP消息处理程序链。在HelloWordClient1中,调用服务对象的setHandlerResolver方法设置一个ClientHandlerResolver对象实例。这样,在SOAP消息处理程序配置中,配置文件handle-chain.xml就不再起作用了,而是由代码来接管。在这个例子中,我们又增加了TestHandler处理程序,用来直观地演示处理程序的调用顺序。在处理程序链中,UUIDHandler处在第一位,因此也最先被执行。

© 著作权归作者所有

柳哥
粉丝 207
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
添加一个服务器端SOAP Handler

我们接着以前面的blog【HelloWord例子:客户端向请求SOAP消息中注入报头块(使用配置方式)】为例。在该例子基础上添加服务端的Handler,用来验证UUID值。 为了使例子更完整,我们需要一个服...

柳哥
2014/05/05
1K
0
WCF技术剖析之十七:消息(Message)详解(下篇)

[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]]《WCF技术剖析(卷1)》自出版近20天以来,得到了园子里的朋友和广大WCF...

长平狐
2012/09/04
200
0
在SOAP1.2下实现HelloWord服务

还是以前面的HelloWord服务为例子。 服务端: HelloWord.java package ch03.ts; import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;import javax.xml.ws.H......

柳哥
2014/05/06
1K
0
为客户端添加拥有业务逻辑的Handler

以HelloWord为例,客户端的LogicalHandler可以拦截出站的请求消息以检查调用sayHello服务操作的输入参数。如果参数name值为“老板”则修改为“刘诗诗”。示例如下: 服务端: HelloWord.java...

柳哥
2014/05/05
482
0
EndpointAddress——不只是一个Uri[上篇]

终结点是整个WCF的核心,由经典的ABC三要素组成。作为表示地址的EndpointAddress,很多人仅仅将其看成是一个表示标识服务并且表示服务所在地址的Uri,其实服务标识和定位服务仅仅是EndpointA...

长平狐
2012/09/04
146
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部