import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
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.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.encoding.Deserializer;
import javax.xml.rpc.encoding.DeserializerFactory;
import org.apache.axis.Constants;
import org.apache.axis.encoding.ser.SimpleDeserializer;
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.log4j.Logger;
/**
* Web Service Dynamic Invoker
*/
public class DynamicInvoker {
private static Logger logger = Logger.getLogger(DynamicInvoker.class);
private Parser wsdlParser = null;
private Map services = null;
public DynamicInvoker(String wsdlURL) throws Exception {
wsdlParser = new Parser();
try{
wsdlParser.run(wsdlURL);
}catch(Exception e){
e.printStackTrace();
}
services = enumSymTabEntry(ServiceEntry.class);
}
public Map invoke(String serviceName, String portName,
String operationName, Vector parameterValues) throws Exception {
logger.info("--------"+serviceName+"-----"+portName+"-----"+operationName+"---------begin-------");
logger.info(parameterValues.toString());
logger.info("--------"+serviceName+"-----"+portName+"-----"+operationName+"---------end-------");
Vector inputs = new Vector();
String returnName = null;
ServiceEntry serviceEntry = (ServiceEntry) services.get(serviceName);
Service service = serviceEntry.getService();
org.apache.axis.client.Service clientService = new org.apache.axis.client.Service(
wsdlParser, service.getQName());
Call call = clientService.createCall(QName.valueOf(portName), QName
.valueOf(operationName));
((org.apache.axis.client.Call) call).setTimeout(new Integer(50 * 1000));
BindingEntry bindingEntry = getBindingEntry(serviceName, portName);
Operation o = getOperation(bindingEntry, operationName);
Parameters parameters = bindingEntry.getParameters(o);
if (parameters.returnParam != null) {
QName returnType = org.apache.axis.wsdl.toJava.Utils
.getXSIType(parameters.returnParam);
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);
}
}
logger.info("--------"+serviceName+"-----"+portName+"-----"+operationName+"---------result begin-------");
logger.info(map.toString());
logger.info("--------"+serviceName+"-----"+portName+"-----"+operationName+"---------result end-------");
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("Can not convert '" + arg
+ "' into " + c);
}
}
分享到:
相关推荐
Java 7引入了一个重要的新特性,即`invokedynamic`指令,这是一项为了提升动态语言在Java平台上的性能而设计的改进。`invokedynamic`是Java虚拟机(JVM)中的一个字节码指令,它允许程序在运行时动态地解析方法调用...
最后,`CallSite`的`dynamicInvoker()`方法用于执行`InvokeDynamic`指令,这在测试或动态语言实现中非常有用。 如果你想在字节码级别操作这些概念,如生成或修改字节码,可以使用ASM库。ASM是一个强大的Java字节码...
perl516-perl-File-Path-2.08.01-19.el6.centos.alt.noarch.rpm
Python 图像处理:红点与数字识别
perl516-perl-Params-Util-1.07-8.el6.centos.alt.x86_64.rpm
perl516-perl-ExtUtils-Install-1.58-19.el6.centos.alt.noarch.rpm
1、文件内容:sendmail-sysvinit-8.14.7-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/sendmail-sysvinit-8.14.7-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
数据集格式:VOC格式+YOLO格式 压缩包内含:3个文件夹,分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计:588 Annotations文件夹中xml文件总计:588 labels文件夹中txt文件总计:588 标签种类数:1 标签名称:["kuaizi"] 每个标签的框数(注意yolo格式类别顺序不和这个对应,而以labels文件夹classes.txt为准): kuaizi 框数 = 1161 总框数:1161 图片清晰度(分辨率:像素):清晰 图片是否增强:否 标签形状:矩形框,用于目标检测识别 重要说明:暂无 特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注
perl516-perl-Module-Metadata-1.000019-1.el6.centos.alt.noarch.rpm
perl516-perl-Pod-Parser-1.61-1.el6.centos.alt.noarch.rpm
1、文件内容:swig3-doc-3.0.12-17.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/swig3-doc-3.0.12-17.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
perl516-perl-tests-5.16.3-19.el6.centos.alt.x86_64.rpm
1、文件内容:stax2-api-3.1.1-10.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/stax2-api-3.1.1-10.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:suitesparse-doc-4.0.2-10.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/suitesparse-doc-4.0.2-10.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
## 功能特点 1. 文件管理 - 批量扫描文件 - 文件类型过滤 - 文件预览 - 结果确认 2. 重命名规则 - 文本替换 - 添加前缀/后缀 - 序号命名 - 日期时间命名 3. 预览功能 - 实时预览 - 结果对比 - 批量处理 - 错误检查 4. 其他功能 - 多线程处理 - 错误处理 - 操作日志 - 撤销功能
1、文件内容:speex-1.2-0.19.rc1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/speex-1.2-0.19.rc1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
JKW系列无功补偿控制器源程序:电路参考与程序量产指南,量产无功补偿控制器程序,JKW系列无功补偿控制器源程序提供参考电路,仅供参考。 ,核心关键词:量产无功补偿控制器程序; JKW系列无功补偿控制器; 源程序; 参考电路; 仅供参考。,"JKW系列无功补偿控制器源程序:高效量产程序参考电路"
perl516-perl-DB_File-1.826-19.el6.centos.alt.x86_64.rpm
css内容
1、文件内容:soundtouch-1.4.0-9.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/soundtouch-1.4.0-9.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装