当前位置:早雪网网络学院编程文档Java → 升级到 JDK 5.0 Update 1 定制部署 WebServices - Axis 终于正常了!

升级到 JDK 5.0 Update 1 定制部署 WebServices - Axis 终于正常了!

减小字体 增大字体 作者:未知  来源:supcode.com收集整理  发布时间:2005-6-29 18:42:15
ram);
   QName returnQName = parameters.returnParam.getQName();
   returnName = returnQName.getLocalPart();
  }

  int size = parameters.list.size();
  for (int i = 0; i < size; i++)
  {
   Parameter p = (Parameter) parameters.list.get(i);
   switch (p.getMode())
   {
    case Parameter.IN :
     inputs.add(getParamData((org.apache.axis.client.Call) call
           , p
           , (String) parameterValues.elementAt(i)));
     break;
    case Parameter.OUT :
     break;
    case Parameter.INOUT :
     inputs.add(getParamData((org.apache.axis.client.Call) call,
           p,
           (String) parameterValues.elementAt(i)));
     break;
   }
  }

  Object ret = call.invoke(inputs.toArray());
  Map outputs = call.getOutputParams();
  HashMap map = new HashMap();
  if (ret != null && returnName != null)
  {
   map.put(returnName, ret);
  }
  if (outputs != null)
  {
   for (Iterator i = outputs.keySet().iterator(); i.hasNext();)
   {
    Object obj = i.next();
    String name;
    Object value;
    if (obj.getClass().getName().equals("java.lang.String"))
    {
     name = (String) obj;
    }
    else
    {
     name = ((QName) obj).getLocalPart();
    }
    value = outputs.get(obj);
    map.put(name, value);
   }
  }
  return map;
 }

 public Vector enumServiceNames()
 {
  Vector v = new Vector();
  Iterator i = services.keySet().iterator();
  while (i.hasNext())
  {
   String s = (String) i.next();
   v.addElement(s);
  }
  return v;
 }

 public Vector enumPortNames(String serviceName)
 {
  Vector v = new Vector();
  ServiceEntry serviceEntry = (ServiceEntry) services.get(serviceName);
  Map ports = serviceEntry.getService().getPorts();
  Iterator i = ports.keySet().iterator();
  while (i.hasNext())
  {
   String s = (String) i.next();
   v.addElement(s);
  }
  return v;
 }

 public Vector enumOperationNames(String serviceName, String portName)
 {
  Vector v = new Vector();
  BindingEntry entry = getBindingEntry(serviceName, portName);
  Set operations = entry.getOperations();
  Iterator i = operations.iterator();
  while (i.hasNext())
  {
   Operation o = (Operation) i.next();
   String s = o.getName();
   v.addElement(s);
  }
  return v;
 }

 public Parameters enumParameters(String serviceName
         , String portName
         , String operationName)
 {
  BindingEntry entry = getBindingEntry(serviceName, portName);
  Operation o = getOperation(entry, operationName);
  Parameters parameters = entry.getParameters(o);
  return parameters;
 }

 public String getParameterModeString(Parameter p)
 {
  String ret = null;
  switch (p.getMode())
  {
   case Parameter.IN:
    ret = "[IN]";
    break;
   case Parameter.INOUT:
    ret = "[IN, OUT]";
    break;
   case Parameter.OUT:
    ret = "[OUT]";
    break;
  }
  return ret;
 }

 private BindingEntry getBindingEntry(String serviceName, String portName)
 {
  ServiceEntry serviceEntry = (ServiceEntry) services.get(serviceName);
  Port port = serviceEntry.getService().getPort(portName);
  Binding binding = port.getBinding();
  SymbolTable table = wsdlParser.getSymbolTable();
  return table.getBindingEntry(binding.getQName());
 }

 private Operation getOperation(BindingEntry entry, String operationName)
 {
  Set operations = entry.getOperations();
  Iterator i = operations.iterator();
  while (i.hasNext())
  {
   Operation o = (Operation) i.next();
   if (operationName.equals(o.getName()))
   {
    return o;
   }
  }
  return null;
 }

 // return Map of <QName.getLocalPart, SymTabEntry>
 private Map enumSymTabEntry(Class cls)
 {
  HashMap ret = new HashMap();
  HashMap map = 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();
   int size = v.size();
   for (int i = 0; i < size; ++i)
   {
    SymTabEntry symTabEntry = (SymTabEntry) v.elementAt(i);
    if (cls.isInstance(symTabEntry))
    {
     ret.put(key.getLocalPart(), symTabEntry);
    }
   }
  }
  return ret;
 }

 private Object getParamData(org.apache.axis.client.Call c, Parameter p,
        String arg) throws Exception
 {
  // Get the QName representing the parameter type
  QName paramType = org.apache.axis.wsdl.toJava.Utils.getXSIType(p);

  TypeEntry type = p.getType();
  if (type instanceof BaseType && ((BaseType) type).isBaseType())
  {
   DeserializerFactory factory = c.getTypeMapping().getDeserializer(paramType);
   Deserializer deserializer = factory.getDeserializerAs(Constants.
                  AXIS_SAX);
   if (deserializer instanceof SimpleDeserializer)
   {
    return ((SimpleDeserializer) deserializer).makeValue(arg);
   }
  }
  throw new RuntimeException("not know how to convert '" + arg
           + "' into " + c);
 }
}

class AppTest
{
 public static void main(String[] args) throws Exception
 {
  System.out.println("Hello World!");
  //动态调用 WebServics
  String location = "http://localhost:1080/axis/services/Class1Service?wsdl";
  DynamicInvoker invoker = new DynamicInvoker(location);
  Vector vServices = invoker.enumServiceNames();
  Object[] Services = vServices.toArray();
  Arrays.sort(Services);
  for (int i = 0; i < Services.length; i++)
  {
   String serviceName = (String) Services[i];
   System.out.println(serviceName);
   Vector V = invoker.enumPortNames(serviceName);
   String portName = (String) V.elementAt(0);
   V = invoker.enumOperationNames(serviceName, portName);
   Object[] OperationNames = V.toArray();
   Arrays.sort(OperationNames);
   for (int j = 0; j < OperationNames.length; j++)
   {
    String operationName = (String) OperationNames[j];
    System.out.println("\t" + (String) OperationNames[j]);
    Parameters parameters = invoker.en

上一页  [1] [2] [3]  下一页


Tags:升级,JDK,Update,定制,部署,WebServices,Axis,终于,正常
[数据载入中...] [返回上一页] [打 印]