如何使用xsdtojava防止xs:for xAXBElement自动生成?

时间:2017-11-28 08:18:09

标签: java xml xsd jaxb jackson

我使用XSDcxf-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> 

但这没有帮助。我还能做些什么?

1 个答案:

答案 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>