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字节码...
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代
内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
系统可以提供信息显示和相应服务,其管理新冠抗原自测平台小程序信息,查看新冠抗原自测平台小程序信息,管理新冠抗原自测平台小程序。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
新建 文本文档.docx
hw06
3. Kafka入门-安装与基本命令
燃气管道施工资质和特种设备安装改造维修委托函.docx
AI大模型研究相关报告
lab02
仅供学习使用,其他用途请购买正版资源AVPro Video Core Windows Edition 2.2.3 亲测可用的视频播放插件,能丝滑播放透明视频等.
建设工程消防验收现场指导意见表.docx
MVIMG_20241222_194113.jpg
五相电机双闭环矢量控制模型_采用邻近四矢量SVPWM_MATLAB_Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成; (2)输出部分仿真波形及仿真说明文档; (3)完整版仿真模型:包括邻近四矢量SVPWM模型和完整双闭环矢量控制Simulink模型; 资料介绍过程十分详细,零基础手把手教学,资料已经写的很清楚