Jaxb:在同一包中使用多个命名空间取消编组 xml
我是在xml中使用命名空间的新手,所以我有点困惑,希望得到一些澄清。我有一个java服务,我正在接收具有许多不同命名空间的xml文档,当我让它工作时,我觉得我一定做错了什么,所以我想检查。在我的包信息中.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
)
我有一个火车.java在班级层面上标注:
@XmlRootElement(name="Train", namespace="http://mycompany/train")
以及类中标注以下内容的每个字段:
@XmlElement(name="Color") for example
火车包含乘客列表,因此有一个属性
private Set<Passenger> 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时:
<train:Train>
<train:Color>Red</train:Color>
<train:Passengers>
<train:Passenger>
<passenger:TicketNumber>T101</passenger:TicketNumber>
</train:Passenger>
</train:Passengers>
</train:Train>
现在,我取消接收到的这个 xml,并设置了 Train 的 Color 属性,并设置了 Passenger's TicketNumber 属性。但是我不知道为什么我需要在TicketNumber上的XmlElement注释上添加命名空间URL才能工作,但我不需要为Train上的Color属性执行此操作。如果我从 TicketNumber 上的 XmlElement 注释中删除命名空间属性,则 xml 中的值不会映射到对象,除非我还从 xml 请求中删除命名空间前缀。我觉得既然我已经在XmlRootElement for Passenger上定义了命名空间属性,我就不需要为类中的每个字段执行此操作,就像我不必为Train所做的那样,所以我假设我一定设置了错误的东西。有人能给我指出正确的方向吗?谢谢!