我是在 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<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 的 TicketNumber 属性。但我不知道为什么我需要在 TicketNumber 上的 XmlElement 注释上添加命名空间 url 才能工作,但我不需要为 Train 上的 Color 属性这样做。如果我从 TicketNumber 上的 XmlElement 注释中删除命名空间属性,则 xml 中的值不会映射到对象,除非我也从 xml 请求中删除命名空间前缀。我觉得因为我已经在 XmlRootElement 上为乘客定义了命名空间属性,所以我不需要为类中的每个字段都这样做,就像我不需要为火车一样,所以我假设我一定是设置有问题。有人可以指出我正确的方向吗?谢谢!