2012-11-05 23 views
5

Tôi đang sử dụng JAXB 2.2.5 để xuất Xml từ Mô hình JAXB, dữ liệu được điền từ cơ sở dữ liệu và đôi khi cơ sở dữ liệu chứa các ký tự không thể hiển thị chẳng hạn nhưJAXB xuất XML không hợp lệ khi dữ liệu chứa các ký tự không thể hiển thị

0x1a 

Nếu có thì JAXB sẽ xuất Xml không hợp lệ bằng cách chỉ xuất ra từ này hay không?

Cập nhật

Tôi tự hỏi nếu có bất kỳ hiện thực mà khắc phục vấn đề này, có lẽ EclipseLink MOXY không?

EDIT

Tôi đã thử các cách giải quyết điều này khắc phục vấn đề char bất hợp pháp tuy nhiên nó thay đổi sản lượng một cách không mong muốn.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><metadata created="2013-02-27T11:40:04.009Z" xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ext="http://musicbrainz.org/ns/ext#-2.0"><cdstub-list count="1" offset="0"><cdstub id="w237dKURKperVfmckD5b_xo8BO8-" ext:score="100"><title>fred</title><artist></artist><track-list count="5"/></cdstub></cdstub-list></metadata> 

để

<?xml version="1.0" ?><metadata xmlns:ext="http://musicbrainz.org/ns/ext#-2.0" xmlns="http://musicbrainz.org/ns/mmd-2.0#" created="2013-02-27T11:39:15.394Z"><cdstub-list count="1" offset="0"><cdstub id="w237dKURKperVfmckD5b_xo8BO8-" ext:score="100"><title>fred</title><artist></artist><track-list count="5"></track-list></cdstub></cdstub-list></metadata> 

tức là <track-list count="5"/> đã trở thành <track-list count="5"></track-list> mà là không mong muốn, tôi không chắc chắn lý do tại sao nó được làm điều này.

Trả lời

5

Dường như đây là vấn đề phổ biến - và được đánh dấu là lỗi JAXB generates illegal XML characters.

Bạn có thể tìm một cách giải quyết Escape illegal characters

+0

tác phẩm này nhưng tiếc là nó đã thay đổi đầu ra theo cách khác mà tôi không muốn, vui lòng xem cập nhật cho câu hỏi –

+0

Cảm ơn câu trả lời. Rất tiếc, cách giải quyết mà bạn liên kết có một số thiếu sót, như không thụt lề XML được tạo ra: ( – Kaitsu

+0

Liên kết được cập nhật (tôi đoán) là https://github.com/javaee/jaxb-v2/issues/614 - cũng liên quan có vẻ như https : //github.com/javaee/jaxb-v2/issues/960 –

2

Một giải pháp khác là sử dụng Apache Commons Lang để loại bỏ các ký tự XML hợp lệ:

import org.apache.commons.lang3.StringEscapeUtils; 

String xml = "<root>content with some invalid characters...</root>"; 
xml = StringEscapeUtils.unescapeXml(StringEscapeUtils.escapeXml10(xml)); 

Phương pháp escapeXml10 sẽ thoát khỏi chuỗi và loại bỏ các ký tự không hợp lệ. Phương thức sẽ hoàn tác thoát. Kết quả cuối cùng là cùng một XML nhưng với các ký tự XML không hợp lệ bị loại bỏ.

0

Chỉ cần thay thế ký tự bằng bất kỳ hoặc không gian nào trong nội dung thư. Nếu bạn không muốn sử dụng thêm các thứ khác hoặc thứ ba, bạn có thể thử phương thức dưới đây cho nó:

String msgContent = "......";// string with some illegal character 
msgContent = msgContent .replaceALL("\\P{Print}","_"); 

Ở ví dụ này, phương pháp thay thế thay thế các ký tự không in được bằng dấu gạch dưới. Vì vậy, msgContent của bạn sẽ chỉ là các ký tự in được và ngăn JAXB khỏi các ký tự không hợp lệ.

Các vấn đề liên quan