我有一个xsd定义(来自www.tmforum.org ossj common api v1.5)
<element name="primaryKey" nillable="false">
<complexType mixed="false">
<complexContent mixed="false">
<extension base="anyType"/>
</complexContent>
</complexType>
</element>
并希望按如下方式生成xml
<ossj-co-v1-5:primaryKey>mykey</ossj-co-v1-5:primaryKey>
使用xjc从xsd生成的PrimaryKey类需要将DOM元素存储在列表中(请参阅底部生成的PrimaryKey类“。”myKey“这里是一个TextNode,因为它不是DOM元素,所以它不能添加到xjc生成的PrimaryKey类。我应该如何继续获取所需的输出?
这是从xsd
生成的PrimaryKey类 @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"any"
})
public static class PrimaryKey {
@XmlAnyElement
protected List<Element> any;
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
public List<Element> getAny() {
if (any == null) {
any = new ArrayList<Element>();
}
return this.any;
}
public Map<QName, String> getOtherAttributes() {
return otherAttributes;
}
}
答案 0 :(得分:3)
以下对象模型适用于您的方案。我将尝试挖掘适当的模式自定义以生成这些对象模型。
选项#1
您的代码可能如下所示。这意味着元素“primaryKey”将导致对象PrimaryKey被实例化,并在any属性上设置相应的文本内容。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"any" })
public static class PrimaryKey {
@XmlValue
protected String any;
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
public List<Element> getAny() {
if (any == null) {
any = new ArrayList<Element>();
}
return this.any;
}
public Map<QName, String> getOtherAttributes() {
return otherAttributes;
}
}
选项#2
如果希望外部对象具有与primaryKey对应的String属性,则可以执行以下操作:
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
// @XmlElement is implied
private String primaryKey;
}
答案 1 :(得分:1)
选项#1 getAny()无法返回String,因为签名返回List。
选项#2确实有效。谢谢!
以下是我的OSSJ代码修改的外观:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ManagedEntityKey", propOrder = {
"applicationContext",
"applicationDN",
"type",
"primaryKey"
})
public class ManagedEntityKey {
@XmlElement(required = true)
protected String primaryKey;
//protected ManagedEntityKey.PrimaryKey primaryKey;
当然,应该修改制定者和吸气剂的签名。