2013-09-07 17 views
6

Quale proprietà viene utilizzata per modificare il separatore di riga Marshaller (javax.xml.bind.Marshaller) (ritorno a capo, nuova riga, interruzione di riga)?Come modificare il separatore di linea JAXB Marshaller?

Credo che il marshaller stia usando il separatore di linea del sistema.

System.getProperty("line.separator") 

Tuttavia è necessaria una diversa sequenza di escape (cioè \r\n deve essere cambiato in \n o viceversa).

risposta

6

Non esiste una proprietà che è possibile personalizzare. La maggior parte implementations inviare direttamente al separatore tamponare la linea:

write('\n'); 

Tuttavia, è possibile sostituire il risultato.

Marshaller marshaller = ctx.createMarshaller(); 
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); 

StringWriter writer = new StringWriter(1024); // 2 KB 
marshaller.marshal(obj, writer); 

String str = writer.toString(); 
str = str.replace("\n", "\r\n"); 

Per evitare qualsiasi effetto sulle prestazioni, è necessario impostare la dimensione approssimativa (ad esempio 1024 -> 2 KB) nel costruttore per java.io.StringWriter.

+2

Non è un po 'pericoloso? Se l'implementazione dovesse cambiare, questo produrrà "\ r \ n \ n". –

+0

Hmm ... Hai ragione! In questo caso, 'str = str.replaceAll (" \ r? \ N "," \ r \ n ");' –