Java反射 - serviceCall

时间:2016-10-13 09:02:41

标签: java reflection

我想用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反射加载

1 个答案:

答案 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);
...