Вы пытались получить все методы вызванного класса и отфильтровать только методы получения по имени и вызвать их?
Method[] methods = cls.getDeclaredMethods();
for (Method m: methods) {
if(m.getName().startsWith("get")) {
m.invoke(clsInstance);
}
}
Это решает нашу половинную проблему, так как геттеры вызываются без каких-либо аргументов.Но если вам нужно вызвать метод установки, вам нужно указать аргументы.Например, чтобы вызвать установщик, который принимает метод строкового аргумента, как показано ниже:
m.invoke(clsInstance, "some string argument");
Одним из решений может быть то, что все установщики принимают значение типа объекта и типизируют его при назначении его фактическим переменным класса.
Теперь ваши классы pojo будут выглядеть следующим образом:
public class AccountPojo {
private String dataList;
private String dataSet;
public String getDataList() {
return dataList;
}
public void setDataList(Object dataList) {
this.dataList = (String) dataList;
}
public String getDataSet() {
return dataSet;
}
public void setDataSet(Object dataSet) {
this.dataSet = (String)dataSet;
}
}
public class GetAccountsPojo {
private String accountId;
private int noOfAccounts;
public String getAccountId() {
return accountId;
}
public void setAccountId(Object accountId) {
this.accountId = (String) accountId;
}
public int getNoOfAccounts() {
return noOfAccounts;
}
public void setNoOfAccounts(Object noOfAccounts) {
this.noOfAccounts = (int) noOfAccounts;
}
}
Добавьте приведенный ниже код к основному методу:
for (Method m: methods) {
if(m.getName().startsWith("get")) {
m.invoke(clsInstance);
}
if(m.getName().startsWith("set")) {
m.invoke(clsInstance, "any argument to be passed here");
}
}