Jaxb: Unmarshalling XML с несколькими пространствами имен в одном пакете

Я новичок в использовании пространств имен в XML, поэтому я немного растерялся и хотел бы получить некоторые разъяснения. У меня есть java-сервис, где я получаю XML-документы со многими различными пространствами имен, и, хотя у меня это работает, я чувствую, что, должно быть, сделал что-то не так, поэтому я хочу проверить. В моем package-info.java у меня есть аннотация схемы, такая как:

@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
)

У меня есть Train.java с комментариями на уровне класса:

@XmlRootElement(name="Train", namespace="http://mycompany/train")

и каждое поле в классе помечено:

@XmlElement(name="Color") for example

Поезд содержит список пассажиров, так чтособственность

private Set passengers;

и эта коллекция помечена:

@XmlElementWrapper(name="Passengers")
@XmlElements(@XmlElement(name="Passenger", namespace="http://mycompany/passenger"))

Затем в Passenger.java сам класс помечается с помощью:

@XmlElement(name="Passenger", namespace="http://mycompany/passenger")

Наконец, для отдельных полей в Passenger.java они помечаются так:

@XmlElement(name="TicketNumber", namespace="http://mycompany/passenger")

Поэтому, когда у меня есть XML, который выглядит следующим образом:


   Red
   
       
           T101
       
   

Теперь я отменяю этот xml, который я получил, и Train 's свойство Color установлено и Passenger 's свойство TicketNumber установлено. Но я нене знаю, почему мне нужно добавить URL-адрес пространства имен в аннотации XmlElement в TicketNumber, чтобы это работало, но я этого не сделалЭто нужно сделать для свойства Color на Train. Если я удалю атрибут пространства имен из аннотации XmlElement в TicketNumber, значение из xml не будет сопоставлено с объектом, если я также не удалю префикс пространства имен из запроса xml. Я чувствую, так как яу нас есть атрибут пространства имен, определенный в XmlRootElement для Пассажира, я не долженне нужно делать это для каждого поля в классе, как яМне нужно тренироваться, поэтому я предполагаю, что у меня что-то не так. Может ли кто-нибудь указать мне правильное направление? Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос