Tôi có thiết lập JAXB khi tôi sử dụng @XmlJavaTypeAdapter để thay thế các đối tượng thuộc loại Person
với các đối tượng thuộc loại PersonRef
chỉ chứa UUID của người đó. Điều này hoạt động hoàn toàn tốt đẹp. Tuy nhiên, XML được tạo ra sẽ tạo lại cùng một không gian tên (xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
) mỗi khi nó được sử dụng. Trong khi điều này nói chung là ổn, nó chỉ cảm thấy không đúng.JAXB: Cách tránh định nghĩa không gian tên lặp lại cho xmlns: xsi
Làm cách nào tôi có thể định cấu hình JAXB để khai báo xmlns: xsi ở phần đầu của tài liệu? Tôi có thể thêm các khai báo vùng tên theo cách thủ công vào phần tử gốc không?
Dưới đây là một ví dụ về những gì tôi muốn đạt được:
hiện tại:
<person uuid="6ec0cf24-e880-431b-ada0-a5835e2a565a">
<relation type="CHILD">
<to xsi:type="personRef" uuid="56a930c0-5499-467f-8263-c2a9f9ecc5a0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</relation>
<relation type="CHILD">
<to xsi:type="personRef" uuid="6ec0cf24-e880-431b-ada0-a5835e2a565a" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</relation>
<!-- SNIP: some more relations -->
</person>
Wanted:
<person uuid="6ec0cf24-e880-431b-ada0-a5835e2a565a" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<relation type="CHILD">
<to xsi:type="personRef" uuid="56a930c0-5499-467f-8263-c2a9f9ecc5a0"/>
</relation>
<relation type="CHILD">
<to xsi:type="personRef" uuid="6ec0cf24-e880-431b-ada0-a5835e2a565a"/>
</relation>
<!-- SNIP: some more relations -->
</person>
Tôi sử dụng jaxb2, điều này không hiệu quả đối với tôi , ném RuntimeException – arrehman