ordenar un archivo de registro en un archivo xml - Java

Tengo un archivo de registro con el siguiente resultado:

2226:org.powertac.common.TariffSpecification::6::new::1::CONSUMPTION
2231:org.powertac.common.Rate::7::new
2231:org.powertac.common.Rate::7::withValue::-0.5
2232:org.powertac.common.Rate::7::setTariffId::6
2232:org.powertac.common.TariffSpecification::6::addRate::7
2233:org.powertac.common.Tariff::6::new::6
2234:org.powertac.common.TariffSpecification::8::new::1::INTERRUPTIBLE_CONSUMPTION
2234:org.powertac.common.Rate::9::new
2234:org.powertac.common.Rate::9::withValue::-0.5
2235:org.powertac.common.Rate::9::setTariffId::8

Después de analizar el archivo, tengo el siguiente patrón:

<id>:<full_classname>::<order_of_execution>::<new_or_method>::<params>

El analizador funciona bien y hace lo que espero. Ahora, mi objetivo es reunir esa misma instrucción en un XMLarchivo. No estoy totalmente familiarizado con este tipo de tarea. Entonces, el XMLtendría que contener tanto newobjetos como methodsllamadas. Sé que usando la ReflectionAPI usaría <full_classname>para crear un objeto de esa clase:

Class<?> cl = Class.forName( className );

¿Cómo podría generar ese XMLarchivo a partir de ese Classobjeto? ¿Tengo que tener una estructura de datos o una forma de tomar todos los métodos y campos del objeto y escribirlos en el archivo xml? Sé que Reflection API tiene tales métodos, pero necesitaría una idea más general / muestra de cómo podría llevar a cabo mi tarea. Empecé a escribir este método, pero no estoy seguro de cómo funcionaría:

// would send in the object to be marshalled. 
public void toXML(Object obj){
        try {
            JAXBContext context = JAXBContext.newInstance(Object.class);
            Marshaller m  = context.createMarshaller();
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        } catch (JAXBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Aquí hay una muestra del archivo analizado:

171269 org.powertac.common.Order 171417 new 4
171270 org.powertac.common.Order 171418 new 4
171271 org.powertac.common.Order 171419 new 4

El parsemétodo se ve así:

public void parse() throws ClassNotFoundException{
    try{
        //
        // assure file exists before parsing
        //
        FileReader fr = new FileReader( this.filename );
        BufferedReader textReader = new BufferedReader( fr );
        String line;
        File input = new File("test.xml");
        //Integer id = 1;
        while(( line = textReader.readLine()) != null ){
            Pattern p = Pattern.compile("([^:]+):([^:]+)::([\\d]+)::([^:]+)::(.+)");
            Matcher m = p.matcher( line );
            if (m.find()) {
              int id = Integer.parseInt(m.group(1));
              String className = m.group(2);
              int orderOfExecution = Integer.valueOf( m.group( 3 ));
              String methodNameOrNew = m.group(4);
              String[] arguments = m.group(5).split("::");
              //
              // there is the need to create a new object
              //
              if( methodNameOrNew.compareTo( "new" ) == 0 ){
                  //
                  // inner class
                  //
                  if( className.contains("$") == true){
                      continue;

                  }
                  else if( className.contains("genco")){
                      continue;
                  }
                  System.out.println("Loading class: " + className);
                  LogEntry le = new LogEntry(id, className, orderOfExecution, methodNameOrNew, arguments.toString());

                  Serializer ser = new Persister();
                  ser.write(le, input);
                  id++;
                  System.out.printf("%s %s %d %s %d\n", id, className, orderOfExecution, methodNameOrNew, arguments.length);
              }

        }

        }
        textReader.close();
    }
    catch( IOException ex ){
        ex.printStackTrace();
    }
    catch( ArrayIndexOutOfBoundsException ex){
        ex.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

public void write() throws Exception{
        File file = new File("test.xml");
        Serializer ser = new Persister();
        for(LogEntry entry : entries){
            ser.write(entry, file);
        }
    }
Respuesta 1

Tengo el siguiente código para leer el archivo de los recursos: randomFirstName = rReader.generate (new FileReader (classLoader.getResource ("NamesFem.txt"). GetFile ())); Funciona bien cuando lo ejecuto ...

Cuando ejecuto mvn hibernate3: hbm2cfgxml no genera el archivo hibernate.cfg.xml. Sin embargo, genera pojos y daos pero no genera el archivo hibernate.cfg.xml. El siguiente es mi pom.xml. <...

Creo que el siguiente código de Java causaría un RuntimeError (técnicamente hablando) porque hace referencia a algo inexistente (muy parecido al acceso al octavo elemento en una matriz de tamaño 5) ...

He estado haciendo algo de codificación con String en Java8, Java 11, pero esta pregunta se basa en Java 8. Tengo este pequeño fragmento. final char e = (char) 200; // È Solo pensé que los caracteres entre 0.255 [...