`
lbay
  • 浏览: 25941 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ESB Was 测试类

    博客分类:
  • ESB
阅读更多

package Test;

import csmp.mediation.TotalAmountHandlerImpl;
import csmp.util.XmlUtil;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.Vector;
import javax.wsdl.Binding;
import javax.wsdl.Operation;
import javax.wsdl.Port;
import javax.wsdl.Service;
import javax.wsdl.extensions.soap.SOAPAddress;
import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.encoding.Deserializer;
import javax.xml.rpc.encoding.DeserializerFactory;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.TypeMapping;
import org.apache.axis.encoding.ser.ElementDeserializerFactory;
import org.apache.axis.encoding.ser.ElementSerializerFactory;
import org.apache.axis.encoding.ser.SimpleDeserializer;
import org.apache.axis.utils.XMLUtils;
import org.apache.axis.wsdl.gen.Parser;
import org.apache.axis.wsdl.symbolTable.BaseType;
import org.apache.axis.wsdl.symbolTable.BindingEntry;
import org.apache.axis.wsdl.symbolTable.Parameter;
import org.apache.axis.wsdl.symbolTable.Parameters;
import org.apache.axis.wsdl.symbolTable.ServiceEntry;
import org.apache.axis.wsdl.symbolTable.SymTabEntry;
import org.apache.axis.wsdl.symbolTable.SymbolTable;
import org.apache.axis.wsdl.symbolTable.TypeEntry;
import org.apache.axis.wsdl.toJava.Utils;
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class WebServiceTest
{
  private Parser wsdlParser = null;

  public static void main(String[] args)
    throws Exception
  {
    String file = "E:\\e\\XXXX.xml";

    TotalAmountHandlerImpl t = new TotalAmountHandlerImpl();

    DOMParser parser = new DOMParser();
    parser.parse(file);
    Document doc = parser.getDocument();

    String url = "http://IP:port /XXX/XX/XXX/wsdl/XXXX.wsdl";
    String method = "methodName";
    String param = XmlUtil.document2String(doc);

    args = new String[3];
    args[0] = url;
    args[1] = method;
    args[2] = param;

    if (args.length < 2)
      usage();

    String wsdlLocation = (args.length > 0) ? args[0] : null;
    String operationName = (args.length > 1) ? args[1] : null;
    String portName = null;
    try {
      portName = operationName.substring(operationName.indexOf("(") + 1,
        operationName.indexOf(")"));
      operationName = operationName.substring(0,
        operationName.indexOf("("));
    }
    catch (Exception localException) {
    }
    WebServiceTest invoker = new WebServiceTest(wsdlLocation);
    HashMap map = invoker.invokeMethod(operationName, portName, args);

    for (Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
      Map.Entry entry = (Map.Entry)it.next();
      String key = (String)entry.getKey();
      Object value = entry.getValue();
      if (value instanceof Element) {
        System.out.println("====== " + key + " ======");
        XMLUtils.ElementToStream((Element)value, System.out);
        System.out.println("========================="); break label309:
      }
      label309: System.out.println(key + "=" + value);
    }

    System.out.println("\nDone!");
  }

  private static void usage() {
    System.err.println("Usage: java " + WebServiceTest.class.getName() +
      " wsdlLocation " + "operationName[(portName)] " +
      "[argument1 ...]");
    System.exit(1);
  }

  public WebServiceTest(String wsdlURL) throws Exception
  {
    this.wsdlParser = new Parser();
    System.out.println("Reading WSDL document from '" + wsdlURL + "'");
    this.wsdlParser.run(wsdlURL);
  }

  public HashMap invokeMethod(String operationName, String portName, String[] args) throws Exception
  {
    String serviceNS = null;
    String serviceName = null;
    String operationQName = null;

    System.out.println("Preparing Axis dynamic invocation");
    Service service = selectService(serviceNS, serviceName);
    Operation operation = null;
    Service dpf = new Service(
      this.wsdlParser, service.getQName());

    Vector inputs = new Vector();
    Port port = selectPort(service.getPorts(), portName);
    if (portName == null)
      portName = port.getName();

    Binding binding = port.getBinding();
    Call call = dpf.createCall(QName.valueOf(portName),
      QName.valueOf(operationName));
    ((Call)call).setTimeout(new Integer(15000));
    ((Call)call).setProperty(
      "DeserializeCurrentElement", Boolean.TRUE);

    Vector outNames = new Vector();

    Vector inNames = new Vector();
    Vector inTypes = new Vector();
    SymbolTable symbolTable = this.wsdlParser.getSymbolTable();
    BindingEntry bEntry = symbolTable.getBindingEntry(binding.getQName());
    Parameters parameters = null;
    Iterator i = bEntry.getParameters().keySet().iterator();

    while (i.hasNext()) {
      Operation o = (Operation)i.next();
      if (o.getName().equals(operationName)) {
        operation = o;
        parameters = (Parameters)bEntry.getParameters().get(o);
        break;
      }
    }
    if ((operation == null) || (parameters == null)) {
      throw new RuntimeException(operationName + " was not found.");
    }

    for (int j = 0; j < parameters.list.size(); ++j) {
      Parameter p = (Parameter)parameters.list.get(j);

      if (p.getMode() == 1) {
        inNames.add(p.getQName().getLocalPart());
        inTypes.add(p);
      } else if (p.getMode() == 2) {
        outNames.add(p.getQName().getLocalPart());
      } else if (p.getMode() == 3) {
        inNames.add(p.getQName().getLocalPart());
        inTypes.add(p);
        outNames.add(p.getQName().getLocalPart());
      }

    }

    if (parameters.returnParam != null)
    {
      if (!(parameters.returnParam.getType().isBaseType())) {
        ((Call)call).registerTypeMapping(
          Element.class,
          parameters.returnParam.getType().getQName(),
          new ElementSerializerFactory(),
          new ElementDeserializerFactory());
      }

      QName returnType =
        Utils.getXSIType(parameters.returnParam);
      QName returnQName = parameters.returnParam.getQName();

      outNames.add(returnQName.getLocalPart());
    }

    if (inNames.size() != args.length - 2)
      throw new RuntimeException("Need " + inNames.size() +
        " arguments!!!");

    for (int pos = 0; pos < inNames.size(); ++pos) {
      String arg = args[(pos + 2)];
      Parameter p = (Parameter)inTypes.get(pos);
      inputs.add
        (getParamData((Call)call, p,
        arg));
    }
    System.out.println("Executing operation " + operationName +
      " with parameters:");
    for (j = 0; j < inputs.size(); ++j)
      System.out.println(inNames.get(j) + "=" + inputs.get(j));

    Object ret = call.invoke(inputs.toArray());
    Map outputs = call.getOutputParams();
    HashMap map = new HashMap();

    for (int pos = 0; pos < outNames.size(); ++pos) {
      String name = (String)outNames.get(pos);
      Object value = outputs.get(name);

      if ((value == null) && (pos == 0))
        map.put(name, ret);
      else
        map.put(name, value);
    }

    return map;
  }

  public Service selectService(String serviceNS, String serviceName) throws Exception
  {
    QName serviceQName = ((serviceNS != null) && (serviceName != null)) ?
      new QName(serviceNS, serviceName) :
      null;
    ServiceEntry serviceEntry = (ServiceEntry)getSymTabEntry(serviceQName,
      ServiceEntry.class);
    return serviceEntry.getService();
  }

  public SymTabEntry getSymTabEntry(QName qname, Class cls) {
    HashMap map = this.wsdlParser.getSymbolTable().getHashMap();
    Iterator iterator = map.entrySet().iterator();

    while (iterator.hasNext()) {
      Map.Entry entry = (Map.Entry)iterator.next();
      QName key = (QName)entry.getKey();
      Vector v = (Vector)entry.getValue();

      if ((qname == null) || (qname.equals(qname)))
        for (int i = 0; i < v.size(); ++i) {
          SymTabEntry symTabEntry = (SymTabEntry)v.elementAt(i);

          if (cls.isInstance(symTabEntry))
            return symTabEntry;
        }

    }

    return null;
  }

  public Port selectPort(Map ports, String portName) throws Exception {
    Iterator valueIterator = ports.keySet().iterator();
    while (valueIterator.hasNext()) {
      String name = (String)valueIterator.next();

      if ((portName == null) || (portName.length() == 0)) {
        Port port = (Port)ports.get(name);
        List list = port.getExtensibilityElements();

        int i = 0; break label90:
        do { Object obj = list.get(i);
          if (obj instanceof SOAPAddress)
            return port;
          ++i; label136: label90: if (list == null) break label136;  }
        while (i < list.size());
      }
      else if ((name != null) && (name.equals(portName))) {
        return ((Port)ports.get(name));
      }
    }
    return null;
  }

  private Object getParamData(Call c, Parameter p, String arg)
    throws Exception
  {
    QName paramType = Utils.getXSIType(p);

    TypeEntry type = p.getType();
    if ((type instanceof BaseType) && (((BaseType)type).isBaseType())) {
      DeserializerFactory factory = c.getTypeMapping().getDeserializer(
        paramType);
      Deserializer deserializer = factory.getDeserializerAs
        ("Axis SAX Mechanism");
      if (deserializer instanceof SimpleDeserializer)
        return ((SimpleDeserializer)deserializer).makeValue(arg);
    }

    throw new RuntimeException("not know how to convert '" + arg +
      "' into " + c);
  }
}

2
1
分享到:
评论

相关推荐

    ESB介绍和案例

    企业服务总线(Enterprise Service Bus,简称ESB)是企业级集成的重要工具,它作为服务导向架构(Service-Oriented Architecture,简称SOA)的核心组件,用于连接不同系统和应用程序,实现数据和服务的高效交互。ESB...

    振宜新能源ESB项目测试环境代码_ZY_ESB_DEV.zip

    振宜新能源ESB项目测试环境代码_ZY_ESB_DEV

    ESB原理及Mule ESB实践

    - 下载并安装MuleESB后,可以通过Mule Studio进行应用程序的开发和测试。 - 示例工程展示了如何创建一个简单的拼写检查服务,包括设置文件夹结构、配置服务流程等步骤。 综上所述,ESB和Mule ESB是现代IT架构中不...

    银行esb开发全过程(使用webservice)

    1. esb开发全过程:包括下载apache-cxf、配置环境变量、测试wsdl2java命令、esb开发、接口开发和测试等步骤。 2. webservice技术:使用javawebservice技术进行esb开发。 3. apache-cxf:一个开源的webservice框架,...

    esb简单例子 学习esb的初学者 可以看看

    9. **ESBSimpleSamples.Client**: 这是一个可能的客户端应用程序项目,用于展示如何与ESB实例进行交互,测试服务并展示其功能。 10. **ESBSimpleSamples.ServiceClient**: 类似于上面的客户端项目,可能包含用于...

    IBM的ESB 安装指南

    8. **创建和部署服务**:使用WID,你可以创建、测试和部署服务到ESB。这包括定义服务接口、编写业务逻辑和映射数据格式。 9. **启动和监控**:安装和配置完成后,启动WAS服务器,ESB随之启动。使用管理控制台或WID...

    ESB技术学习教程,适用初学ESB人员

    通过使用XML和Web服务标准,服务可以基于Schema和Contract进行发布和调用,而非依赖于具体的类和类型。SOA的目标是创建灵活、可重用的业务流程,适应不断变化的业务需求。 ESB作为SOA的重要组成部分,是连接不同...

    wso2 esb installation part 5

    wso2 esb installation part 5

    IBM ESB 介绍(IBM ESB Story)

    【IBM ESB 介绍(IBM ESB Story)】 在IT行业中,企业服务总线(Enterprise Service Bus,简称ESB)是一种关键的中间件技术,它为企业的应用集成提供了灵活、可扩展的架构。IBM作为业界领先的技术提供商,拥有两款...

    mule -esb 源码

    《深入解析Mule ESB源码》 Mule ESB(Enterprise Service Bus,企业服务总线)是一款开源的集成平台,旨在简化企业级应用之间的数据交互。本文将围绕Mule ESB的源码进行深入探讨,揭示其核心设计理念与工作原理。 ...

    ESB.NET架构方案

    - **实施步骤**: 提供实施ESB.NET的流程,包括规划、设计、部署和测试阶段。 - **最佳实践**: 分享在设计和实施ESB.NET时的经验和建议,如服务接口设计、错误处理策略等。 5. **总结** ESB.NET为企业提供了强大...

    C# ESB 分布式处理技术 Remote

    - 创建远程对象:定义要在服务器上运行的类,并标记为`[Serializable]`和`[RemotingEnabled]`。 - 配置服务器:在服务器端配置Remoting服务,如设置激活方式、端口等。 - 创建客户端代理:在客户端创建一个指向...

    ESB

    **ESB:企业服务总线** 企业服务总线(Enterprise Service Bus,ESB)是企业级集成中的核心组件,主要用于解决分布式系统之间的通信问题。它提供了一种中间件架构,使得不同系统的服务能够互相交互,实现数据和服务...

    talend-ESB是什么?OSGI是什么?TOS-ESB相关组件介绍

    ESB(企业服务总线)是面向服务体系架构(SOA)发展而来的,它将传统中间件技术与XML、Web服务等新兴技术相结合。ESB在企业中扮演着基础的连接中枢角色,是构成企业神经系统的必不缺少的组件。它改变了传统的软件...

    esb的简介和优点

    ESB 的简介和优点 ESB(Enterprise Service Bus)是指一种面向服务架构(SOA)中,用于集成多个应用系统和服务的总线式架构,它提供了一个通用的接口,用于连接和集成不同的应用系统和服务,使得不同系统之间可以...

    ESB3实例代码及文档

    【标题】"ESB3实例代码及文档"指的是企业服务总线(Enterprise Service Bus,ESB)的第三阶段实现的相关实例代码和配套文档。ESB是企业级集成的关键技术,它提供了一种在不同系统之间交换信息和服务的方式,使得应用...

    jbossesb开发手册

    - 测试ESB配置,验证请求是否能成功转发到目标WebService。 ##### 6.3 监听MQ调用WebService - 配置ESB监听消息队列(MQ)。 - 定义消息处理逻辑,将接收到的消息转发给目标WebService。 - 测试消息流转过程,确保...

    ESB应用Spring_Hello_World

    要创建一个新的ESB工程,首先需要将上述提到的Spring相关jar包复制到`esbcontent/lib`目录,并将其添加到项目类路径中。这确保了在开发环境中能够正确识别和使用Spring的相关类。 3. **ESB配置** - **消息队列...

    MuleESB帮助文档

    2. **Anypoint Studio**:集成开发环境,用于设计、测试和部署Mule ESB应用程序。 3. **Anypoint Platform**:一套完整的集成解决方案,包括Anypoint Studio、Mule ESB和Anypoint Exchange(共享资源库)。 4. **Any...

Global site tag (gtag.js) - Google Analytics