我想用Reflection调用Webservice,因为我在运行时动态生成所有Webservice文件。
这是代码声明:
List<ResultObject> resObject = transaction.executeServiceCall("webservicename", new String[] { "webserviceInput" }, new Object[] { serviceList }, ResultObject.class);
输入参数声明:
Object resultObject = "com.test.ResultObject";
String webservicename = "webservicename"; // from the choosen Webservice
String webserviceinput = "webserviceInput; // from the choosen Webservice
List<WebserviceInputObject> siList = new ArrayList<WebserviceInputObject>();
如何使用给定的Paramers动态调用executeServiceCall?
第二个问题是如何用反思来实现这个结构:
List<WebserviceInputObject> siList = new ArrayList<WebserviceInputObject>()
WebserviceInputObject是一个Object,它也必须由java反射加载
答案 0 :(得分:0)
调用
Class[] argTypes = { String.class, String[].class, Object[].class, Class.class };
Method method = transaction.getClass().getMethod("executeServiceCall", argTypes);
Object[] args = { resultObject, webservicename, webserviceinput, siList };
List<ResultObject> resObject = (List) method.invoke(transaction, args);
创建WebserviceInputObject
WebserviceInputObject instance = WebserviceInputObject.class.newInstance();
Method nameSetter = WebserviceInputObject.class.getMethod("setName", String.class);
// use xDeclaredY methods for private methods/fields
Field typeField = WebserviceInputObject.class.getDeclaredField("type");
typeField.setAccessible(true); // make private field settable
nameSetter.invoke(instance, "foo");
typeField.set(instance, 666);
...