欢迎使用普元产品知识库,本知识库包含普元应用开发平台EOSPlatform,流程平台BPS,企业服务总线ESB,微服务平台Microservice,运维管理平台Devops,数据集成平台DI
欢迎使用普元文档库
问题描述:
在使用XMLHelper根据加载的xsd文件转为xml为sdo时,下述形式的数据没有转换成功,核心代码:
XMLDocument xmlDoc = XMLHelper.INSTANCE.load("需要转换的xml");
DataObject retSDO = xmlDoc.getRootObject();
不成功场景描述:
xsd类型的定义:
<xsd:complexType name="TypeCode">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="code" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
<xsd:complexType name="EcCdSourceid">
<xsd:simpleContent>
<xsd:extension base="TypeCode"/>
</xsd:simpleContent>
</xsd:complexType>
其对应的xml片段:
<EcCdSourceid code='1'>Retail Banking System</EcCdSourceid>
转换之后的形式为:
<EcCdSourceid
__type="sdo:http://www.ibm.com/project/citic/service/citicparty/schema#SourceIdentificationType"
__id="14">
<code />
<AnonymousProperty />
</EcCdSourceid>
答案(解答时间2011.2.16)
<xsd:complexType name="TypeCode">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="code" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
这种类型的定义,我们现在是不支持的,<EcCdSourceid code='1'>Retail Banking System</EcCdSourceid> ,对于这样的xml没法反序列化成DataObject,变成DataObject以后,通过DataObject的接口没法读取Retail Banking System这个值。
<EcCdSourceid
__type="sdo:http://www.ibm.com/project/citic/service/citicparty/schema#SourceIdentificationType"
__id="14">
<code />
<AnonymousProperty />
</EcCdSourceid>
你看到生成成这样,是给某客户出的一个补丁以后的
可以用下面的代码反序列化,同样序列化的接口也要用XMLSerializer
DataObject extendParam = (DataObject) new com.primeton.ext.infra.xsd.xmlser.XMLSerializer()
.unmarshal("<EcCdSourceid code='1' xmlns:ns_0=\"citi\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"ns_0:EcCdSourceid\">Retail Banking System</EcCdSourceid>");
System.out.println(extendParam);