xsd 自定義list 實現

執筆記憶的空白發表於2015-12-03

最近需要跟第三方連調介面,在針對返回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這個屬性就是集合了

相關文章