xsd 自定义list 实现

2033人阅读 评论(1) 收藏 举报
分类:

最近需要跟第三方连调接口,在针对返回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这个属性就是集合了
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:464942次
    • 积分:4834
    • 等级:
    • 排名:第6549名
    • 原创:97篇
    • 转载:31篇
    • 译文:0篇
    • 评论:314条
    个人简介
    我只是一个简单的Coder,为了兴趣和理想奋斗在生活的道路上
    希望大家多多交流,共同进步,有疑问或想法请留言或者私信,也可以加群:157797573

    博客专栏
    最新评论
    你还在一个人孤独的奋斗吗?
    其实,你并不寂寞,欢迎加入CSDN Java群,这里是你的另一个家!    点击加入:CSDN Java群