当required需要设置为true时,JAXB minOccurs消失

时间:2011-02-03 20:10:26

标签: java jaxb jax-rs jaxb2

我从@XmlElement

的JAXB文档中得到了这个
  

如果required()为true,那么Javabean   property被映射到XML模式   元素声明   的minOccurs = “1”。对于a,maxOccurs为“1”   单值财产和“无界”   对于多值财产。

然而,当我说

@XmlElement(name = "Name", required = true, nillable = false)

我在.xsd

中得到以下内容
<xs:element name="Name" type="xs:string"/>

我想知道如何让minOccurs等于1.似乎required = true导致minOccurs消失

修改 我意识到默认值是1.无论如何,minOccurs在.xsd中显示为1

EDIT2 我正在使用JAXBContext.generateSchema来生成架构(FYI)

3 个答案:

答案 0 :(得分:2)

JAXB规范定义了行为:

  

如果required()为true,那么Javabean   property被映射到XML模式   元素声明   的minOccurs = “1”。对于a,maxOccurs为“1”   单值财产和“无界”   对于多值财产。

根据此规则,个人实施(MetroEclipseLink MOXyApache JaxMe)可根据需要自由生成XML模式。 Metro和MOXy(我是技术主管)选择使用缺少minOccurs属性来指示minOccurs =“1”。

答案 1 :(得分:1)

我不是JAXB专家,但我相信“minOccurs”默认情况下使用xs:element标记设置为1。换句话说,如果标记中缺少“minOccurs”属性,则其默认值为1.

编辑抱歉,在为时已晚之前没有看到您的编辑!

答案 2 :(得分:0)

xs:element的默认值是minOccurs = 1。 所以它可以省略属性并且仍然具有相同的含义,这可能就是jaxb正在做的事情。

编辑:太晚看你的编辑了。我从未见过如何做到这一点,但这并不意味着它不可能。