Java: универсальный XML-ридер, использующий отражение

Итак, у меня есть класс XmlReader, который может загружать и возвращать список объектов типа Client (который я определил) из файла xml. Но у меня также может быть xml-файл, содержащий объекты типа "Movie" или любого другого типа, и я хочу, чтобы мой XmlReader мог читать и извлекать его из файла... Я слышал что-то, что отражение можно использовать для сделать общий класс XmlReader, но я не знаю, как это сделать.. кто-нибудь может мне помочь? Заранее спасибо! Мой код для класса XmlReader:

public class XmlReader<ID, T extends MyObject<ID>> 
{
     private String fileName;

     public XmlReader(String fileName) 
     {
         this.fileName = fileName;
     }

     public List<Client> loadEntities() 
     {
         List<Client> entities = new ArrayList<>();
         XmlHelper docXml = new XmlHelper();
         Document document = docXml.loadDocument(this.fileName);
         document.getDocumentElement().normalize();
         Element root = document.getDocumentElement();
         NodeList clientElements = root.getElementsByTagName("field");
         int id=-1;
         String name="";
         for (int i=0; i < clientElements.getLength(); i++) 
         {
             Node clientElement = clientElements.item(i);
             Element el = (Element) clientElement;
             if (clientElement.getNodeType() != Node.ELEMENT_NODE) 
             {
                 // ignoring element due to wrong node type
                 continue;
             }
             if (el.hasAttribute("name") && el.getAttribute("name").equals("id")) 
             {
                 id = Integer.parseInt(el.getAttribute("value"));
             }
             if (el.hasAttribute("name") && el.getAttribute("name").equals("name")) 
             {
                 name = el.getAttribute("value");
             }
             if (i % 2 ==1) 
             {
                 Client newClient = new Client(id, name);
                 entities.add(newClient);
             }
          }
      return entities;
  }
}

И XML-файл выглядит так:

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <Clients>
      <entity class="class Domain.Client">
           <field name="name" type="class java.lang.String" value="Liviu"/>
           <field name="id" type="class java.lang.Object" value="1"/>
      </entity>
 </Clients>

1 ответ

Если вы извлекаете имя класса из вашего XML, вы можете сделать что-то вроде:

String className = ... // extract your class name into this
YourClass c = (YourClass) Class.forName(className).newInstance();
Другие вопросы по тегам