Cómo desactivar de impresión legible (espacio en blanco / salto de línea) en xstream?

StackOverflow https://stackoverflow.com/questions/894625

  •  23-08-2019
  •  | 
  •  

Pregunta

Esto es cómo creo ejemplo xstream para XML:

XStream xstream = new XStream();

Esto es para JSON:

private final XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
        public HierarchicalStreamWriter createWriter(Writer writer) {
            return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
        }
    });

Los dos son bastante impresión (sangría) la salida.

¿Cómo puedo pedir al xstream para desactivar la impresión bonita?

¿Fue útil?

Solución 2

Con la ayuda de la comunidad, he descubierto la respuesta.

Para XML usted tiene que cambiar la forma en cómo se serializa:

La línea:

xStream.toXML(o, new OutputStreamWriter(stream, encoding));

cambiado a la línea

xStream.marshal(o, new CompactWriter(new OutputStreamWriter(stream, encoding)));

Para JSON sólo cambia la forma en cómo se crea la xstream. Por lo que la inicialización de la xstream se cambia a:

private final XStream xstreamOut = new XStream(new JsonHierarchicalStreamDriver() {
    public HierarchicalStreamWriter createWriter(Writer writer) {
        return new JsonWriter(writer, new char[0], "", JsonWriter.DROP_ROOT_MODE);
    }
});

Tenga en cuenta que se utiliza la 4-parámetro JsonWriter constructor.

Otros consejos

Gracias, sus mensajes ayudaron !!! Esto es lo que utilizo para convertir en una cadena.

String strXML = "";
XStream xs = new XStream();
StringWriter sw = new StringWriter();
xs.marshal(this,  new CompactWriter(sw));
strXML = sw.toString();

Utilice el método Marschal en xstream con un escritor compacto

xstream.marshal(someObject, new CompactWriter(out)); 

El comportamiento predeterminado de bastante-impresión proviene del método AbstractXmlDriver.createWriter () (XStream utiliza XppDriver como su controlador de flujo jerárquico predeterminado y esto se extiende AbstractXmlDriver):

public HierarchicalStreamWriter createWriter(Writer out) {
    return new PrettyPrintWriter(out, getNameCoder());
}

Si desea desactivar la impresión bonita a nivel mundial (manteniendo todos los demás comportamientos predeterminados) y sólo tiene que utilizar el método toXML sencilla (o) en lugar de perder el tiempo con la otra por las opciones de uso que aquí se sugiere, se puede inicializar la instancia xstream como de la siguiente manera. Esto anula el método anterior con un CompactWriter su lugar.

XStream xstream = new XStream(new XppDriver() {
    @Override
    public HierarchicalStreamWriter createWriter(Writer out) {
        return new CompactWriter(out, getNameCoder());
    }
});

Cree la instancia de xstream de esta manera:

XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
        public HierarchicalStreamWriter createWriter(Writer writer) {
            return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE, new JsonWriter.Format(new char[0], new char[0], 0));
        }
});

Aquí es un constructor de la clase Formato:

/**
 * Create a new Formatter.
 * 
 * @param lineIndenter the characters used for indenting the line
 * @param newLine the characters used to create a new line
 * @param mode the flags for the format modes
 * @since 1.4
 */
public Format(char[] lineIndenter, char[] newLine, int mode) {
    this(lineIndenter, newLine, mode, new NoNameCoder());
}

Comprobar un código fuente de JsonWriter para más información

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top