2013-09-07 19 views
6

Jaka właściwość służy do zmiany separatora linii Marshaller (javax.xml.bind.Marshaller) (powrót karetki, nowa linia, podział linii)?Jak zmienić separator linii JAXB Marshaller?

Wierzę, że marshaller używa separatora linii systemu.

System.getProperty("line.separator") 

Jednak potrzebna jest inna sekwencja ucieczki (to znaczy \r\n musi zostać zmieniona na \n lub vice versa).

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

marshaller.setProperty("line.separator", "\r\n"); 

Odpowiedz

6

Nie ma właściwości, którą można dostosować. Większość implementations wysłać bezpośrednio do bufora linię separatora:

write('\n'); 

Można jednak zastąpić wynik.

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"); 

Aby uniknąć wpływu na wydajność, należy ustawić w przybliżeniu wielkości (np 1024 -> 2 KB) w konstruktora java.io.StringWriter.

+2

Czy to nie jest niebezpieczne? Jeśli implementacja kiedykolwiek się zmieni, to spowoduje powstanie "\ r \ n \ n". –

+0

Hmm ... Masz rację! W takim przypadku 'str = str.replaceAll (" \ r? \ N "," \ r \ n ");' –