2013-09-14 2 views
0

Хотите знать, есть ли способ повторного использования некоторых из Java Reflection API/SOAP/веб-службы внутренних функций или что внешнего API для достижения:автоматического литья и заполнения POJO

  1. Есть список объектов, полученных от метода по проводам
  2. Via конфигурации есть список классов, соответствующих этим объектам
  3. POJO, свойства которого должны быть заполнены с 1

есть родовое + нескольколайн способ сделать это?

Пример

void process(Object pojoToFill, Class[] classesOfSetters, Objects[] values) { 
     //what to do here to fill up pojoToFill with values using classesOfSetters, in a generic way? 
} 

void sample() { 
    Object []objects;// filled with values that are needed by Person class, sent over the wire, setters 
    Class []propertyClasses = new Class[String.class, Address.class]//from config 
    Person person = new Person(); 
    process(person, propertyClasses, objects); 

} 


public class Person { 
    private String name; 
    private Address address;// etc 
    // getters and setters 

} 

class Address { 
    private String line1;// other properties and getters and setters 
} 
+0

Есть ли какие-то ограничения, препятствующие использованию стандартных методов masrhalling/unmarshalling, таких как jaxb? – Morfic

+0

Нет, просто хочу использовать стандартную сериализацию Java для моего приложения, которые запускаются на многих серверах, но все они имеют одинаковый (наш код) и работают на одной и той же версии Java ... быстрее и дешевле, и нам это нравится. теперь у вас есть общая функция для отправки n объектов в другой jvm, требуется общий способ ее un pack (или data driven/config) – tgkprog

ответ

1

это должно быть возможно с помощью Java API отражения.

Pass на имена методов сеттер, а также для каждого класса сеттер

void process(Object pojoToFill, Class[] classesOfSetters, String[] setterMethods, Objects[] values) { 
for (int i=0; i < classesOfSetters.length; i++){ 
Method methodToSetValue = classesOfsetter.getMethod(setterMethods[i]); 
methodToSetValue.invoke (pojoToFill, Objects[i]); 
}   
} 

Как вы работаете с JavaBeans (методы геттер/сеттер); вы также можете использовать API Bean introspection in Java.

Смежные вопросы