@XmlRootElement(name = "SearchParams")
@XmlType(propOrder = {})
public class SearchParams {
private String firstname;
private String lastname;
private List<String> role;
...
}
假设您仍然可以修改此模型,那么您可以将角色列表包装为它自己的类型,这样您将得到一个
元素,其中包含
的列表
<SearchParams>
<firstname>firstname</firstname>
<lastname>lastname</lastname>
<roles>
<role>role</role>
</roles>
</SearchParams>
xsd只是
<xsd:schema ... >
<xsd:element name="SearchParams">
<xsd:complexType>
<xsd:all>
<xsd:element name="firstname" type="xsd:string" />
<xsd:element name="lastname" type="xsd:string" />
<xsd:element name="roles" type="Roles" />
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Roles">
<xsd:sequence>
<xsd:element name="role" type="xsd:string" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
你要上两节课。包含列表的roles
类。海事组织,这是一个更干净的方法。(您可以将roles
设置为匿名,但这样您就只能使用静态内部类了)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
})
@XmlRootElement(name = "SearchParams")
public class SearchParams {
@XmlElement(required = true)
protected String firstname;
@XmlElement(required = true)
protected String lastname;
@XmlElement(required = true)
protected Roles roles;
...
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Roles", propOrder = {
"role"
})
public class Roles {
@XmlElement(required = true)
protected List<String> role;
...
}
您可以使用@xmllist
。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
})
@XmlRootElement(name = "SearchParams")
public class SearchParams {
@XmlElement(required = true)
protected String firstname;
@XmlElement(required = true)
protected String lastname;
@XmlList
@XmlElement(required = true)
protected List<String> role;
...
}
xsd看起来像
<xsd:element name="SearchParams">
<xsd:complexType>
<xsd:all>
<xsd:element name="firstname" type="xsd:string" />
<xsd:element name="lastname" type="xsd:string" />
<xsd:element name="role">
<xsd:simpleType>
<xsd:list itemType="xsd:string" />
</xsd:simpleType>
</xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:element>
注意:正如这里提到的,这种方法是“危险的”,我的文章开头的解决方案比使用字符串类型的列表
更好。但在你的具体情况下,不确定我是否看到了另一种方式
问题内容: 假设我有以下java类,它映射到我的REST服务的请求主体以搜索用户。 注意 @XmlType* 批注的 propOrder 参数-它声明表示单个属性在XML文件中出现的顺序无关紧要,因此在生成的XSD模式中应使用 xsd:all 而不是 xsd:sequence 。 * 但是,如您所见,属性之一( 角色 属性)是一个列表,因此对应于具有 无界maxOccurs 的元素。 似乎在 xs
当我从注释中删除type=integer.class时,我开始在XML中得到maxOccurs=“unbounded”。 @XmlElement(required=true): 但我需要这种类型特别用于基元数据类型。如果注释中没有类型,则不需要的元素(即未设置required=true)缺少minOccurs=1。 有人能帮我吗?
在解组xml文档时,JAXB无法解组具有替换组名称的复杂类型。doucment带有替换名,JAXB解组进程无法将数据与实际元素绑定。最后,我得到一个空对象,它的数据到达xml文档中。这是JAXB中的错误还是我在这里做错了什么? 注意:下面的模式清楚地定义了有问题的复杂元素类型ENBFunction的替代名称。并且在解编组"xn: ManagedElementOptionallyContainedN
问题内容: 我有一个无法控制其生成方式的XML。我想通过将其分解为我手工编写的类来创建一个对象。 其结构的一个片段如下所示: 我该如何处理这种情况?当然,元素数是可变的。 问题答案: 如果使用以下对象模型,则每个未映射的key_#元素都将保留为org.w3c.dom.Element的实例: 如果任何元素对应于使用@XmlRootElement批注映射的类,则可以使用@XmlAnyElement(l
我得到以下错误: 我尝试了以下几种方式,
如何使用JAXB生成以下结构?在我的例子中,我有一个动态属性列表,它可能有3种类型:整数、字符串或列表。但是,列表属性具有嵌套元素。我怎样才能做到这一点?