Estoy tratando de salir de la XML Simple serializador. Estoy más interesado en la deserialización de XML->Java. Aquí está mi código como una unidad de prueba:

import java.io.StringReader;
import java.io.StringWriter;
import junit.framework.TestCase;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
public class SimpleTest extends TestCase {
public void testWriting() throws Exception {
StringWriter writer = new StringWriter();
Address address = new Address("1234 Main Street", "San Francisco", "CA");
Serializer serializer = new Persister();
serializer.write(address, writer);
System.out.println("Wrote: " + writer.getBuffer());
}
public void testReading() throws Exception {
String input = "<address street='1234 Main Street' city='San Francisco' state='CA'/>";
Serializer serializer = new Persister();
System.out.println("Read back: " + serializer.read(Address.class, new StringReader(input)));
}
}
@Root
class Address {
@Attribute(name="street")
private final String street;
@Attribute(name="city")
private final String city;
@Attribute(name="state")
private final String state;
public Address(@Attribute(name="street") String street, @Attribute(name="city") String city, @Attribute(name="state") String state) {
super();
this.street = street;
this.city = city;
this.state = state;
}
@Override
public String toString() {
return "Address [city=" + city + ", state=" + state + ", street=" + street + "]";
}   
}

Esto funciona, pero los repetidos @Attribute anotaciones (en el campo y en el argumento de constructor) en la clase de Dirección que se ven feos. ¿Hay alguna forma de:

  • han simple de averiguar el nombre de atributo del nombre del campo?
  • sencillo ignorar la serialización, para que yo pueda salir con la anotación de cualquiera de los campos o el constructor argumento?
Si usted está buscando para un fácil XML->la serialización de Java y no están vinculadas a un paquete en particular, aquí tienes una alternativa: sourceforge.net/projects/practicalxml (se nota que yo no he puesto esto como una respuesta ya que parece muy downvote feliz, que no es una buena manera de tratar a las personas que están tratando de ayudar a usted)
Gracias, no estoy atado a un paquete en particular – voy a retirar practicalxml. Por favor, no tome la downvotes demasiado personalmente las sugerencias ofrecidas estaban en ninguna parte cerca de la solución de mi problema y eran ruidosas, de la OMI.
En el segundo pensamiento, yo era demasiado downvote feliz. Disculpas a todo el mundo.
Otra muy buena biblioteca es XStream. He sido capaz de hacer todo lo que yo necesitaba con ella – hasta la fecha. 🙂

OriginalEl autor Binil Thomas | 2009-12-15

3 Comentarios

  1. 1

    No creo que usted necesita todos los que la repetición y el extra anotaciones’ atributo. Si el nombre es el mismo que el atributo de objeto, se utilizará por defecto.

    por lo que sólo puede declarar como:

    @Root
    class Address {
    @Attribute
    private final String street;
    @Attribute
    private final String city;
    @Attribute
    private final String state;
    public Address(String street, String city, String state) {
    super();
    this.street = street;
    this.city = city;
    this.state = state;
    }
    @Override
    public String toString() {
    return "Address [city=" + city + ", state=" + state + ", street=" + street + "]";
    }   
    }
    No, eso no funciona, al menos a Simple 2.1.3.
    Mi mal, yo no prestó más atención que a usted le gustaría tener una inmutable Dirección. Basado en el actual sencillo, deberás tener a la duplicación de @Atributo de la etiqueta, ya que se utiliza la anotación en el atributo para serializar y el constructor para deserializar. Usted puede conseguir lejos sin nombre de etiqueta de atributo, pero no en el constructor de parámetros, ya que el compilador sólo mantener un seguimiento de la misma por el orden en lugar de por su nombre.
    Depende de lo objetivo está tratando de lograr. Por supuesto, usted puede hacer que la clase sea mutable, y hacer cumplir la inmutabilidad de forma manual en la incubadora. Pero, de nuevo, el código que se va a poner feo. Entre los dos, yo podría ir con doble anotaciones opción.
    Gracias por la aclaración! Yo estaba esperando que el argumento de constructor de anotación se necesita el nombre del atributo (porque el compilador deja caer el nombre de argumento), pero eliminando el atributo name del campo lleva a una de las Anotaciones no coinciden con el error».

    OriginalEl autor DJ.

  2. 0

    Java serializar todos sus miembros de la clase por defecto con la implementación de la Serializable y se adhieren a la JavaBean sintaxis.

    Creo que no entendieron bien la pregunta. Quiero un XML>Java deserializer.
    La serialización de Java funciona en ambos sentidos. Si usted serializar sus objetos Java a XML mediante la serialización de Java, también puede deserializar ellos de XML a objetos Java. El proceso es transparente y flexible. En una aplicación, uso de Java XML de serialización/deserialización escribir objeto de árboles en el disco y leer de vuelta a la solicitud del usuario – estamos hablando de cientos de miles de archivos y funciona bien, en mi opinión. Echa un vistazo java.sys-con.com/node/37550 ejemplos – la clave de las clases son XMLEncoder y XMLDecoder.

    OriginalEl autor spork

  3. 0

    Yo tenía una preocupación similar pero con bastante complicado objetos de estructuras.
    Lo resuelto por el uso de JAXB de la biblioteca para el cálculo de referencias y de cálculo de referencias que es una situación muy común.
    Se puede considerar también la posibilidad de separar totalmente el cálculo de referencias a la lógica de su clase en java mediante el uso de aspectos – usted puede tratar todas las anotaciones en un aspecto separado de lo que va a hacer su clase de java totalmente limpio de cálculo de referencias de anotaciones.

    OriginalEl autor DiSol

Dejar respuesta

Please enter your comment!
Please enter your name here