Eseguire il marshalling e unmarshalling di oggetti in Java con BeanIO

Mattepuffo's logo
Eseguire il marshalling e unmarshalling di oggetti in Java con BeanIO

Eseguire il marshalling e unmarshalling di oggetti in Java con BeanIO

Cominciamo con dire che per marshalling  si intende il processo di trasformazione di un oggetto in un byte-stream; l'unmarshalling è l'operazione inversa.

La definizione non sarà tecnicamente suoer precisa, ma rende l'idea.

In Java abbiamo la possibilità di usare BeanIO per eseguire queste operazioni su un bean.

Come vedremo dai nostri esempi basici, la libreria è veramente comoda.

Se usate Maven:

    <dependencies>
        <dependency>
            <groupId>org.beanio</groupId>
            <artifactId>beanio</artifactId>
            <version>2.1.0</version>
        </dependency>
    </dependencies>

Questo sarà il nosro bean di esempio:

package com.mp.test;

public class Persona {
    private String email;
    private int eta;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getEta() {
        return eta;
    }

    public void setEta(int eta) {
        this.eta = eta;
    }
}

La libreria ha bisogno di un file XML per il mapping; usando Maven ho messo il file (persona.xml) dentro alla cartella resources:

<beanio xmlns="http://www.beanio.org/2012/03"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.beanio.org/2012/03
            http://www.beanio.org/2012/03/mapping.xsd">

    <stream name="personaFile" format="csv">
        <record name="persona" class="com.mp.test.Persona">
            <field name="email"/>
            <field name="eta"/>
        </record>
    </stream>
</beanio>

Qui impostiamo il tipo di file di output (CSV), e la rappresentazione del nostro bean.

Infine abbiamo il nostro codice:

package com.mp.test;

import org.beanio.BeanReader;
import org.beanio.BeanWriter;
import org.beanio.StreamFactory;
import java.io.File;

public class Main {

    public static void main(String[] args) {
        String outFile = "persone.csv";
        String mapFile = "src/main/resources/persona.xml";
        String streamName = "personaFile";
        write(streamName, mapFile, outFile);
        read(streamName, mapFile, outFile);
    }

    public static void write(String streamName, String mapFile, String outFile) {
        StreamFactory factory = StreamFactory.newInstance();
        factory.load(mapFile);

        Persona p1 = new Persona();
        p1.setEmail("a1@p1.it");
        p1.setEta(45);

        Persona p2 = new Persona();
        p2.setEmail("z3@s3.it");
        p2.setEta(21);

        BeanWriter out = factory.createWriter(streamName, new File(outFile));
        out.write(p1);
        out.write(p2);
        out.flush();
        out.close();
    }

    public static void read(String streamName, String mapFile, String outFile) {
        StreamFactory factory = StreamFactory.newInstance();
        factory.load(mapFile);
        BeanReader in = factory.createReader(streamName, new File(outFile));
        Persona persona;
        while ((persona = (Persona) in.read()) != null) {
            System.out.println(persona.getEmail());
        }
        in.close();
    }
}

Se volessimo usare un output in formato XML, dobbiamo:

  • cambiare l'impostazione nel file di mapping
  • cambiare l'estensione del file di output

Se guardate alla documentazione, potete vedere che possiamo usare oggetti e mappings più complicati.

Enjoy!


Condividi

Commentami!