小编Fre*_*her的帖子

Jaxb:在同一个包中解组带有多个名称空间的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
)
Run Code Online (Sandbox Code Playgroud)

我在类级别上有一个Train.java注释:

@XmlRootElement(name="Train", namespace="http://mycompany/train")
Run Code Online (Sandbox Code Playgroud)

并且类中的每个字段都注释为:

@XmlElement(name="Color") for example
Run Code Online (Sandbox Code Playgroud)

火车包含一个乘客名单,所以有一个属性

private Set<Passenger> passengers;
Run Code Online (Sandbox Code Playgroud)

此集合注释为:

@XmlElementWrapper(name="Passengers")
@XmlElements(@XmlElement(name="Passenger", namespace="http://mycompany/passenger"))
Run Code Online (Sandbox Code Playgroud)

然后在Passenger.java中,类本身注释为:

@XmlElement(name="Passenger", namespace="http://mycompany/passenger")
Run Code Online (Sandbox Code Playgroud)

最后,对于Passenger.java中的各个字段,它们的注释如下:

@XmlElement(name="TicketNumber", namespace="http://mycompany/passenger")
Run Code Online (Sandbox Code Playgroud)

所以,当我有一个看起来像这样的xml:

<train:Train>
   <train:Color>Red</train:Color>
   <train:Passengers>
       <train:Passenger>
           <passenger:TicketNumber>T101</passenger:TicketNumber>
       </train:Passenger>
   </train:Passengers>
</train:Train>
Run Code Online (Sandbox Code Playgroud)

现在我解组我收到的这个xml并设置了Train的Color属性并设置了Passenger的TicketNumber属性.但是我不知道为什么我需要在TicketNumber上的XmlElement注释上添加名称空间url才能工作,但我不需要为Train上的Color属性这样做.如果我从TicketNumber上的XmlElement注释中删除namespace属性,则xml中的值不会映射到该对象,除非我还从xml请求中删除了名称空间前缀.我觉得因为我已经在XmlRootElement for Passenger上定义了namespace属性,所以我不应该为类中的每个字段都这样做,就像我没有为Train一样,所以我假设我必须设置错误.有人能指出我正确的方向吗?谢谢!

java xml annotations namespaces jaxb

15
推荐指数
1
解决办法
3万
查看次数

标签 统计

annotations ×1

java ×1

jaxb ×1

namespaces ×1

xml ×1