JAXB: el XML de salida de Marshal con sangría crea un salto de línea vacío en la primera línea

Cuando calculo un XML con este atributo

marshal.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

generará un salto de línea vacío en la parte superior

//Generate empty line break here    
<XX>
    <YY>
        <PDF>pdf name</PDF>
        <ZIP>zip name</ZIP>
        <RECEIVED_DT>received date time</RECEIVED_DT>
    </YY>
</XX>

Creo que la razón es porque marshal.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);, que eliminan<?xml version="1.0" encoding="UTF-8" standalone="yes"?> , deja al xml de salida un salto de línea al principio. ¿Hay alguna manera de arreglar esto? Uso JAXB con JDK 6, ¿Moxy sufre este problema?

Respuesta 1

Como señala, EclipseLink JAXB (MOXy) no tiene este problema, por lo que podría usarlo (soy el líder de MOXy):

Opción 1

Una opción sería usar un java.io.FilterWritero java.io.FilterOutputStreamy personalizarlo para ignorar la nueva línea principal.

Opcion 2

Otra opción sería reunir a StAX y usar una implementación de StAX que admita formatear la salida. No lo he intentado yo mismo, pero la respuesta vinculada a continuación sugiere usar com.sun.xml.txw2.output.IndentingXMLStreamWriter.

  • https://stackoverflow.com/a/3625359/383861
Respuesta: 2

Dado que estaba ordenando un objeto File, decidí eliminar esta línea después:

public static void removeEmptyLines(File file) throws IOException {
    long fileTimestamp = file.lastModified();
    List<String> lines = Files.readAllLines(file.toPath());
    try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8))) {
        for (String line : lines) {
            if (!line.trim().isEmpty()) {
                writer.write(line + "\n");
            }
        }
    }
    file.setLastModified(fileTimestamp);
}
Respuesta: 3

Estoy tratando de ejecutar un shell de script en un servidor Unix desde mi aplicación Java (en mi Windows Seven Station) usando el ssh api Jsch. el shell de script que estoy usando "start_lm" es un binario en C. este es el ...

Mi aplicación (Android API 15) crea una imagen y la almacena en la carpeta de la memoria interna. Ahora, quiero copiar este archivo a otra carpeta dentro del almacenamiento externo, por ejemplo / sdcard / myapp. Probé el ...

Tengo una cadena, por ejemplo, esta: stackoverflow Y me gustaría obtener el siguiente resultado en Java (Android): s *********** w Así que mantenemos la primera y la última letra pero la otros son ...

¿Es posible que Eclipse cree un nuevo conjunto de trabajo con todos los archivos abiertos en el editor actual (Java)? Por lo que puedo decir, la única forma de hacer esto es seleccionar manualmente cada archivo en ...