正 文

使用处理链处理WEB服务中的请求/响应消息


www.7dspace.com  更新日期:2006-1-12 2:58:53  七度空间


      举例:

      这个例子我们采用的服务为WEBLOGIC8.X,这里我们通过后台组件提供查询服务的验证处理程序来详细说明。这里面的验证内容主要是帐号和个人识别码,它们被放在SOAP请求消息的头部分中,消息处理程序将重新获得帐号和个人识别码并验证,如果验证通过,一旦通过验证,后台组件将会调用余额查询来获得此帐号的余额。
以下就是写一个处理程序的步骤:

1)处理程序必须实现javax.xml.rpc.handler.Handler 接口或继承Weblogic中的GenericHandler 类。

2)javax.xml.rpc.handler.Handler 接口包含了以下这些方法用来实现

init ()
destroy()
getHeaders()
handleRequest()
handleResponse()
handleFault()

      如果使用weblogic.webservice.GenericHandler 类,只需要重写必须的方法,在这个例子中验证处理程序重写了handleRequest() 和handleResponse() 方法。如果handleRequest()方法返回true,将会调用处理链中的下一个处理程序,如果这个处理程序是处理链中最后一个元素,将会调用后台的WEB服务程序。如果  handleRequest()方法返回false,对应的handleResponse()方法将会被调用。验证处理程序中handleRequest () 将从SOAP的头部分中重新获得帐号和个人识别码,并且验证后要返回true 或false结果。

AuthenticationHandler.java

import java.util.Map;
import java.util.Iterator;

import javax.xml.rpc.JAXRPCException;
import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.rpc.handler.HandlerInfo;
import javax.xml.rpc.handler.MessageContext;
import javax.xml.namespace.QName;
import javax.xml.soap.*;

import weblogic.webservice.GenericHandler;

public class AuthenticationHandler extends GenericHandler
{

   private int me = System.identityHashCode(this);

   private HandlerInfo handlerInfo = null;
   String accountNo                = null;
   String pin                      = null;

   public void init(HandlerInfo handlerInfo)
   {
      this.handlerInfo = handlerInfo;
   }
   public boolean handleRequest(MessageContext messageContext)
   {
      System.err.println("** handleRequest called in: "+me);
      try
      {
         SOAPMessageContext sctx = (SOAPMessageContext)messageContext;
         SOAPMessage message     = sctx.getMessage();
         SOAPPart sp             = message.getSOAPPart();
         SOAPEnvelope senv       = sp.getEnvelope();
         SOAPHeader sh           = senv.getHeader();

         Iterator iter =  sh.getChildElements();
         if(iter.hasNext())
         {
            iter.next();                 //skip text
            Object obj = iter.next();    //account details
            SOAPElement elt = (SOAPElement)obj;
            iter = elt.getChildElements();
            iter.next();                 //skip text node
            obj = iter.next();
            elt = (SOAPElement)obj;
            accountNo = elt.getValue();
            iter.next();                 //skip text node
            obj = iter.next();
            elt = (SOAPElement)obj;
            pin = elt.getValue();
         }
      }
      catch (Exception e)
      {
         e.printStackTrace();
         throw new JAXRPCException(e);
      }
      if(accountNo.equals("12345") && pin.equals("6789"))
         return true;
      else
         return false;
   }
   public boolean handleResponse(MessageContext messageContext)
   {
      System.out.println("Inside HandleResponse");
      return true;

   }
   public QName[] getHeaders()
   {
      return handlerInfo.getHeaders();
   }
}

5页,页码:[1] [2] [3] [4] [5] 

上一篇:世界上最优秀的二十款防火墙简介
下一篇:集群的负载均衡技术
标题:使用处理链处理WEB服务中的请求/响应消息 作者:xzzhouhu 来源:matrix ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐