2012-03-06 16 views
10

Cuando Marshal un XML con este atributoJAXB: XML de salida Mariscal con muesca crear un salto de línea en blanco en la primera línea

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

generará un salto de línea vacía en el

muy 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"?>, dejan la salida xml un salto de línea al principio. ¿Hay alguna manera de arreglar esto? Uso JAXB con JDK 6, ¿sufre Moxy este problema?

+1

Bueno. Intenté con Moxy JAXB, y MOxy no sufre este problema. Glad Moxy es ahora un proveedor estándar para Glassfish3.1.2. ¿Cuándo se convertirá Moxy en proveedor JAXB estándar para JDK? –

+0

EclipseLink JAXB (MOXy) pasa las mismas pruebas de cumplimiento que la implementación de referencia, por lo que puede usarnos sin preocupaciones (http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html) . Como usted señala, MOXy está incluido en GlassFish 3.1.2 (http://blog.bdoughan.com/2012/02/glassfish-312-is-full-of-moxy.html). También somos la implementación predeterminada de JAXB en WebLogic 12c (http://blog.bdoughan.com/2011/12/eclipselink-moxy-is-jaxb-provider-in.html). –

+0

Creo que JDK 7 debe haber solucionado esto porque no parece tener este problema. –

Respuesta

2

Como usted señala EclipseLink JAXB (MOXy) no tiene este problema por lo que podría utilizar que (yo soy el plomo moxy):

Opción # 1

Una opción sería usar un java.io.FilterWriter o java.io.FilterOutputStream y personalizarlo para ignorar la nueva línea principal.

Opción # 2

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

0

Como estaba de clasificación a 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); 
} 
Cuestiones relacionadas