欢迎使用普元产品知识库,本知识库包含普元应用开发平台EOSPlatform,流程平台BPS,企业服务总线ESB,微服务平台Microservice,运维管理平台Devops,数据集成平台DI

页面树结构

欢迎使用普元文档库

Skip to end of metadata
Go to start of metadata

问题描述:

在使用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);