我使用XSD
和cxf-xjc-plugin
插件从xsdtojava
生成java类。
问题:我无法控制xsd
,而一个元素的xs:choice
会产生JAXBElement
。不幸的是,我的xml序列化程序jackson
无法处理JAXBElement
。因此,我尝试将自动生成为Object
而不是JAXBElement
。但是如何?
xsd我无法控制:
<xs:element name="payment">
<xs:complexType>
<xs:choice maxOccurs="2">
<xs:element name="creditcard">
...
</xs:element>
<xs:element name="debitcard">
...
</xs:element>
<xs:element name="iban">
...
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
xsdtojava生成:
@XmlRootElement
public class AutogeneratedReq {
@XmlElementRefs({
@XmlElementRef(name = "creditcard", type = JAXBElement.class, required = false),
@XmlElementRef(name = "debitcard", type = JAXBElement.class, required = false),
@XmlElementRef(name = "iban", type = JAXBElement.class, required = false)
})
private List<JAXBElement<?>> payment;
}
但我的目标如下:
@XmlElements({
@XmlElement(name="creditcard", type=Creditcad.class, required = false),
@XmlElement(name="debitcard", type=Debitcard.class, required = false),
@XmlElement(name="iban", type=Iban.class, required = false)
})
protected List<Object> payment;
或者也可以将每个选项生成为单个元素:
private List<Ceditcard> creditcard;
private List<Debitcard> debitcard;
private List<Iban> iban;
我尝试使用绑定文件实现此目的:
<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<globalBindings choiceContentProperty="true"/>
</bindings>
但这没有帮助。我还能做些什么?
答案 0 :(得分:0)
解决方案是使用//= require jquery
jaxb插件并使用simplify
生成选项元素。
行家:
<simplify:as-element-property/>
带有<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
</dependency>
的xsdtojava maven配置必须使用:
cxf-xjc-plugin
选择-binding.xml:
<xsdOption>
<bindingFile>${project.basedir}/src/main/resources/choice-binding.xml</bindingFile>
<extensionArgs>
<extensionArg>-Xsimplify</extensionArg>
</extensionArgs>
</xsdOption>