最近需要跟第三方连调接口,在针对返回xml解析的时候,生成xsd响应报文,返回一个list集合 以下是参考资料和 实际解决方案 例:我的xml响应报文是以下格式 <?xml version="1.0" encoding = "GBK"?> <root> <Head> <OpName></OpName><!--交易类型 4位--> <OpRetCode></OpRetCode><!--返回码 2位 00:成功 01:失败--> <OpRetMsg></OpRetMsg><!--返回码对应文字信息 80位--> </Head> <Param> <RecordSet><!--多条RecordSet--> <Cust_Acct></Cust_Acct><!--交易账号 32位--> <Acct_Name></Acct_Name><!--交易账号名称 60位--> <Name></Name><!--对方户名 60位--> <Account></Account><!--对方账号 32位--> <Bank></Bank><!--对方开户行全称 60位--> <Bank_Id></Bank_Id><!--对方开户行行号 20位--> <Amount></Amount><!--发生金额 13位 无小数点单位为分--> <Balance></Balance><!--转账后余额 13位 无小数点单位为分--> <Flag></Flag><!--转出转入标志 0-借 1-贷1位--> <Bank_Serial></Bank_Serial><!--银行流水号 12位--> <EnterpriseID></EnterpriseID><!--企业流水号32位--> <Trans_Date></Trans_Date><!--转账日期 格式yyyymmdd 8位--> <Trans_Time></Trans_Time><!--转账时间 格式hhmmss 6位--> <Tx_Flag></Tx_Flag><!--交易类型 20位--> <Vchr_Type></Vchr_Type><!--凭证名称 40位--> <Vchr_No></Vchr_No><!--凭证号码 32位--> <Usage></Usage><!--用途 40位--> <Remark></Remark><!--摘要 40位--> <Chnl_Code></Chnl_Code><!--交易渠道 40位--> <Reserved1></Reserved1><!--备用字段1 40位--> <Reserved2></Reserved2><!--备用字段2 40位--> <Reserved3></Reserved3><!--备用字段3 40位--> <Reserved4></Reserved4><!--备用字段4 40位--> </RecordSet> </Param> </root>

RecordSet存在多条的情况

1、参考XML Schema list案例 因为simpleType的list都是简单类型,无法支持复杂的自定义类型,遂考虑用group组概念。 2、XML Schema group 案例 但是使用group 之后,发现生成的javabean还是 Object,而不是list或者Array。参考各方面资料,遂发现一个属性:maxOccurs="unbounded" 3、maxOccurs="unbounded" 的详细解释

下面是我的xsd格式和关于复杂自定义list的使用案例

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:include schemaLocation="RepBaseRoot.xsd"/>

<xs:group name="rs">
    <xs:sequence>
        <xs:element type="xs:string" name="Cust_Acct">
            <xs:annotation>
                <xs:documentation>多条RecordSet多条RecordSet</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Acct_Name">
            <xs:annotation>
                <xs:documentation>交易账号 32位交易账号 32位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Name">
            <xs:annotation>
                <xs:documentation>交易账号名称 60位交易账号名称 60位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Account">
            <xs:annotation>
                <xs:documentation>对方户名 60位对方户名 60位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Bank">
            <xs:annotation>
                <xs:documentation>对方账号 32位对方账号 32位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Bank_Id">
            <xs:annotation>
                <xs:documentation>对方开户行全称 60位对方开户行全称 60位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Amount">
            <xs:annotation>
                <xs:documentation>对方开户行行号 20位对方开户行行号 20位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Balance">
            <xs:annotation>
                <xs:documentation>发生金额 13位 无小数点单位为分发生金额 13位 无小数点单位为分</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Flag">
            <xs:annotation>
                <xs:documentation>转账后余额 13位 无小数点单位为分转账后余额 13位 无小数点单位为分</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Bank_Serial">
            <xs:annotation>
                <xs:documentation>转出转入标志 0-借 1-贷1位转出转入标志 0-借 1-贷1位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="EnterpriseID">
            <xs:annotation>
                <xs:documentation>银行流水号 12位银行流水号 12位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Trans_Date">
            <xs:annotation>
                <xs:documentation>企业流水号32位企业流水号32位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Trans_Time">
            <xs:annotation>
                <xs:documentation>转账日期 格式yyyymmdd 8位转账日期 格式yyyymmdd 8位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Tx_Flag">
            <xs:annotation>
                <xs:documentation>转账时间 格式hhmmss 6位转账时间 格式hhmmss 6位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Vchr_Type">
            <xs:annotation>
                <xs:documentation>交易类型 20位交易类型 20位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Vchr_No">
            <xs:annotation>
                <xs:documentation>凭证名称 40位凭证名称 40位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Usage">
            <xs:annotation>
                <xs:documentation>凭证号码 32位凭证号码 32位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Remark">
            <xs:annotation>
                <xs:documentation>用途 40位用途 40位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Chnl_Code">
            <xs:annotation>
                <xs:documentation>摘要 40位摘要 40位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Reserved1">
            <xs:annotation>
                <xs:documentation>交易渠道 40位交易渠道 40位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Reserved2">
            <xs:annotation>
                <xs:documentation>备用字段1 40位备用字段1 40位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Reserved3">
            <xs:annotation>
                <xs:documentation>备用字段2 40位备用字段2 40位</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element type="xs:string" name="Reserved4">
            <xs:annotation>
                <xs:documentation>备用字段3 40位备用字段3 40位</xs:documentation>
            </xs:annotation>
        </xs:element>
    </xs:sequence>
</xs:group>


<xs:element name="RepQueryAcctDtl">
    <xs:complexType>
        <xs:complexContent>
            <xs:extension base="RepBaseRoot">
                <xs:sequence>
                    <xs:element name="Param">
                       <xs:complexType>
                           <xs:sequence>
                                <xs:element name="RecordSet" maxOccurs="unbounded">
                                    <xs:complexType>
                                        <xs:group ref="rs"/>
                                    </xs:complexType>
                                </xs:element>
                           </xs:sequence>
                       </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:element>

</xs:schema>

上述代码,我定义了一个group, 并在集合元素里面引用了group, 但是对于多个RecordSet, 通过maxOccurs="unbounded" 来实现将其变成List

最后生成的JavaBean: recordSet这个属性就是集合了