JAXB xjc生成字段作为元素列表

时间:2014-05-20 08:31:59

标签: java xml jaxb xjc

我对wsdl文件的以下序列有疑问

                <xsd:sequence>
                <xsd:element maxOccurs="1" minOccurs="1" name="allowCaseWithNewContract" type="xsd:boolean">
                </xsd:element>
                <xsd:choice minOccurs="0">
                    <xsd:element name="validationError" type="mnp:ErrorType"/>
                    <xsd:element name="internalError" type="mnp:ErrorType"/>
                    <xsd:element name="businessError" type="mnp:ErrorType"/>
                    <xsd:element name="externalError" type="mnp:ErrorType"/>
                </xsd:choice>
            </xsd:sequence>

            <xsd:sequence>
                <xsd:element maxOccurs="1" minOccurs="1" name="allowCaseWithExistingContract" type="xsd:boolean">
                </xsd:element>
                <xsd:choice minOccurs="0">
                    <xsd:element name="validationError" type="mnp:ErrorType"/>
                    <xsd:element name="internalError" type="mnp:ErrorType"/>
                    <xsd:element name="businessError" type="mnp:ErrorType"/>
                    <xsd:element name="externalError" type="mnp:ErrorType"/>
                </xsd:choice>
            </xsd:sequence>


我尝试使用jaxb绑定自定义:

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
  <jxb:globalBindings>
    <xjc:simple />
  </jxb:globalBindings>
</jxb:bindings>

我试图避免jaxb - xjc将我的字段生成为List<JAXBElement<?>> validationErrorsAndAllowCaseWithExistingContractsAndInternalErrors,无论如何我能做到吗?

2 个答案:

答案 0 :(得分:0)

我建议您尽可能简化架构。我会将allowCaseWithNewContractallowCaseWithExistingContract作为属性放在封闭元素中。我想那时,剩下的选择会有ErrorType类型。

答案 1 :(得分:0)

我不允许发表评论,但我相信herehere这个问题已得到解决-基本上,最好的方法是使用JAXB2 Simplify Plugin,因为JAXB会阻止您执行此操作您想要什么,因为它希望从XML到Java以及从Java到Java的反序列化保持一致(即,您需要保留顺序)。