java axis1的发送报文_axis 1.x系统handler 使用

级别: 初级

2003 年 8 月 01 日

本文是J2EE Web服务开发系列文章的第六篇,本文从SOAP消息中Handler的基本概念入手,逐步深入讨论Handler的各种典型使用(生成日志、用户认证、用户授权、信息加密/解密)以及实现方法。

阅读本文前您需要以下的知识和工具:Apache axis1.1,并且会初步使用;

Tomcat 4.0以上, 并且会初步使用;

SOAP消息(SOAP Message)编程知识;

JAX-RPC编程基础知识;

Java安全编程基础知识。

本文的参考资料见 参考资料。

本文的全部代码在这里 下载。

J2EE Web 服务中的Handler技术特点非常像Servlet技术中的Filter。我们知道,在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请求进行过滤,然后才到达提供服务的Servlet,这些Filter的功能往往是对请求进行统一编码,对用户进行认证,把用户的访问写入系统日志等。相应的,Web服务中的Handler通常也提供一下的功能:

对客户端进行认证、授权;

把用户的访问写入系统日志;

对请求的SOAP消息进行加密,解密;

为Web Services对象做缓存。

SOAP消息Handler能够访问代表RPC请求或者响应的SOAP消息。在JAX-RPC技术中,SOAP消息Handler可以部署在服务端,也可以在客户端使用。

下面我们来看一个典型的SOAP消息Handler处理顺序:

某个在线支付服务需要防止非授权的用户访问或者撰改服务端和客户端传输的信息,从而使用消息摘要(Message Digest)的方法对请求和响应的SOAP消息进行加密。当客户端发送SOAP消⑹保突Ф说腍andler把请求消息中的某些敏感的信息(如信用卡密码)进行加密,然后把加密后的SOAP消息传输到服务端;服务端的SOAP消息Handler截取客户端的请求,把请求的SOAP 消息进行解密,然后把解密后的SOAP消息派发到目标的Web服务端点。

Apache axis是我们当前开发Web服务的较好的选择,使用axisWeb服务开发工具,可以使用Handler来对服务端的请求和响应进行处理。典型的情况下,请求传递如图1所示。

cf74e450b966aba674b87cd4fa26036c.gif

图1 SOAP消息的传递顺序

在图中,轴心点(pivot point)是Apache与提供程序功能相当的部分,通过它来和目标的Web服务进行交互,它通常称为Provider。axis中常用的Provider有Java:RPC,java:MSG,java:EJB。一个Web服务可以部署一个或者多个Handler。

Apache axis中的Handler体系结构和JAX-RPC 1.0(JSR101)中的体系结构稍有不同,需要声明的是,本文的代码在axis中开发,故需要在axis环境下运行。

在axis环境下,SOAP消息Handler必须实现org.apache.axis.Handler接口(在JAX-RPC 1.0规范中,SOAP消息Handler必须实现javax.xml.rpc.handler.Handler接口),org.apache.axis.Handler接口的部分代码如下:

例程1 org.apache.axis.Handle的部分代码

public interface Handler extends Serializable {

public void init();

public void cleanup();

public void invoke(MessageContext msgContext) throws AxisFault ;

public void onFault(MessageContext msgContext);

public void setOption(String name, Object value);

public Object getOption(String name);

public void setName(String name);

public String getName();

public Element getDeploymentData(Document doc);

public void generateWSDL(MessageContext msgContext) throws AxisFault;

}

为了提供开发的方便,在编写Handler时,只要继承org.apache.axis.handlers. BasicHandler即可,BasicHandler是Handler的一个模板,我们看它的部分代码:

例程2 BasicHandler的部分代码

public abstract class BasicHandler implements Handler {

protected static Log log =

LogFactory.getLog(BasicHandler.class.getName());

protected Hashtable options;

protected String name;

//这个方法必须在Handler中实现。

public abstract void invoke(MessageContext msgContext) throws AxisFault;

public void setOption(String name, Object value) {

if ( options == null ) initHashtable();

options.put( name, value );

}

}

BasicHandler中的(MessageContext msgContext)方法是Handler实现类必须实现的方法,它通过MessageContext来获得请求或者响应的SOAPMessage对象,然后对SOAPMessage进行处理。

在介绍Handler的开发之前,我们先来看一下目标Web服务的端点实现类的代码,如例程3所示。

例程3 目标Web服务的端点实现类

package com.hellking.webservice;

public class HandleredService

{

//一个简单的Web服务

public String publicMethod(String name)

{

return "Hello!"+name;

}

}

//另一个Web服务端点:

package com.hellking.webservice;

public class OrderService

{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值