Jaxb: Unmarshalling xml com vários namespaces no mesmo pacote

Eu sou novo em usar namespaces em xml, então estou meio confuso e gostaria de alguns esclarecimentos. Eu tenho um serviço java onde estou recebendo documentos xml com muitos namespaces diferentes e enquanto eu tenho que trabalhar, eu sinto que devo ter feito algo errado, então eu quero verificar. No meu package-info.java eu ​​tenho minha anotação de esquema como:

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

Eu tenho um Train.java anotado no nível da classe com:

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

e cada campo da turma anotado com:

@XmlElement(name="Color") for example

O trem contém uma lista de passageiro (s), portanto, há uma propriedade

private Set<Passenger> passengers;

e esta coleção é anotada com:

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

Em seguida, dentro do Passenger.java, a classe em si é anotada com:

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

Finalmente, para campos individuais dentro do Passenger.java, eles são anotados assim:

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

Então, quando eu tenho um xml que se parece com:

<train:Train>
   <train:Color>Red</train:Color>
   <train:Passengers>
       <train:Passenger>
           <passenger:TicketNumber>T101</passenger:TicketNumber>
       </train:Passenger>
   </train:Passengers>
</train:Train>

Agora eu desmarco este xml que recebi e a propriedade Color do Train está configurada e a propriedade TicketNumber do Passenger está definida. Mas eu não sei porque eu preciso adicionar o url de namespace na anotação XmlElement no TicketNumber para que isso funcione, mas eu não precisei fazer isso para a propriedade Color no Train. Se eu remover o atributo namespace da anotação XmlElement no TicketNumber, o valor do xml não será mapeado para o objeto, a menos que eu também remova o prefixo do namespace da solicitação xml. Eu sinto que desde que eu tenho o atributo namespace definido no XmlRootElement para o Passenger, eu não deveria precisar fazer isso para cada campo na classe, assim como eu não precisava para o Train então eu estou assumindo que eu deve ter configurado algo errado. Alguém pode me apontar na direção certa? Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion