2013-09-07 4 views
6

Какое свойство используется для изменения разделителя линии Marshaller (javax.xml.bind.Marshaller) (возврат каретки, новая линия, разрыв строки)?Как изменить разделитель линии JAXB Marshaller?

Я считаю, что маршаллер использует разделитель линий системы.

System.getProperty("line.separator") 

Однако требуется другая управляющая последовательность (т.е. \r\n должно быть изменено на \n или наоборот).

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

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

ответ

6

Нет собственности, которую вы можете настроить. Большинство implementations отправить непосредственно в буфер линии сепаратора:

write('\n'); 

Однако, вы можете заменить результат.

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

Для того, чтобы избежать какого-либо влияния на производительность, необходимо установить приблизительный размер (например 1024 -> 2 KB) в конструктор для java.io.StringWriter.

+2

Разве это не опасно? Если реализация когда-либо изменится, это приведет к появлению «\ r \ n \ n». –

+0

Хм ... Вы правы! В этом случае 'str = str.replaceAll (" \ r? \ N "," \ r \ n ");' –

Смежные вопросы