Tôi mới sử dụng không gian tên trong xml vì vậy tôi là loại bối rối và muốn làm rõ một số. Tôi có một dịch vụ java, nơi tôi nhận được tài liệu xml với nhiều không gian tên khác nhau và trong khi tôi nhận nó hoạt động, tôi cảm thấy mình phải làm điều gì sai vì vậy tôi muốn kiểm tra. Trong package-info.java của tôi, tôi có chú thích giản đồ của tôi như:Jaxb: Unmarshalling xml với nhiều không gian tên trong cùng một gói
@javax.xml.bind.annotation.XmlSchema(
xmlns={
@javax.xml.bind.annotation.XmHS(prefix="train", namespaceURI="http://mycompany/train"),
@javax.xml.bind.annotation.XmHS(prefix="passenger", namespaceURI="http://mycompany/passenger")
},
elementFormDefault = javax.xml.bind.annotation.XmlNsForm=QUALIFIED
)
Tôi đã một Train.java chú thích vào mức độ lớp với:
@XmlRootElement(name="Train", namespace="http://mycompany/train")
và từng lĩnh vực trong lớp chú thích với :
@XmlElement(name="Color") for example
Train chứa một Danh sách hành khách (s) vì vậy có một tài sản
private Set<Passenger> passengers;
và bộ sưu tập này được chú thích với:
@XmlElementWrapper(name="Passengers")
@XmlElements(@XmlElement(name="Passenger", namespace="http://mycompany/passenger"))
Sau đó, trong vòng Passenger.java lớp tự nó được chú thích với:
@XmlElement(name="Passenger", namespace="http://mycompany/passenger")
Cuối cùng cho các lĩnh vực cá nhân trong Passenger.java, họ được chú thích như thế này :
@XmlElement(name="TicketNumber", namespace="http://mycompany/passenger")
Vì vậy, khi tôi có xml trông giống như:
<train:Train>
<train:Color>Red</train:Color>
<train:Passengers>
<train:Passenger>
<passenger:TicketNumber>T101</passenger:TicketNumber>
</train:Passenger>
</train:Passengers>
</train:Train>
Bây giờ tôi unmarshal xml này tôi nhận được và tài sản Train Color được thiết lập và tài sản TicketNumber của hành khách được thiết lập. Nhưng tôi không biết tại sao tôi cần thêm url không gian tên trên chú thích XmlElement trên TicketNumber để làm việc nhưng tôi không cần phải làm như vậy cho thuộc tính Color trên Train. Nếu tôi loại bỏ các thuộc tính không gian tên từ chú thích XmlElement trên TicketNumber, giá trị từ xml wont được ánh xạ tới đối tượng trừ khi tôi cũng loại bỏ tiền tố không gian tên từ yêu cầu xml. Tôi cảm thấy như kể từ khi tôi đã có các thuộc tính không gian tên được xác định trên XmlRootElement cho hành khách, tôi không cần phải làm điều đó cho mỗi lĩnh vực duy nhất trong lớp cũng giống như tôi không phải cho Train vì vậy tôi giả sử tôi phải thiết lập một cái gì đó sai. Ai đó có thể chỉ cho tôi đi đúng hướng? Cảm ơn!
Cảm ơn bạn đã trả lời siêu kỹ lưỡng. Điều này giải quyết vấn đề của tôi và làm việc như tôi tưởng tượng nó nên. Tôi đã sử dụng XmlRootElement trong mỗi "lớp con" một cách sai lầm và khai báo không gian tên trong chú thích đó thay vì XmlType. – Frequentcrasher
@Blaise Doughan Vui lòng đề nghị nếu tôi có thể sử dụng cùng mà không có tiền tố cho cả hai không gian tên. –