我绝对是WSO2项目的新手,我有以下问题。我正在从事一个Enterprise Intergrator项目(涉及ESB和DSS组件)。
我正在从某些数据库表中包含的数据开始生成一个 XML 文档。这些数据是使用相当复杂的逻辑聚合的。
我的问题是以下问题:
在我的ESB 流中,我有这些链接的丰富中介器使用了最终 XML 文档的创建此部分,这是代码:
<!-- add placeholders for additional <sampleid> and <provenance> tags -->
<enrich>
<source clone="true" type="inline">
<parent xmlns="http://ws.wso2.org/dataservice">
<sampleid>[pgrfas.prov_sid]</sampleid>
<provenance>[pgrfas.provenance]</provenance>
</parent>
</source>
<target property="moreValues" type="property"/>
</enrich>
<!-- Copy values for <sampleid> and <provenance> tags -->
<enrich>
<source clone="true" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:moreValues/child::*"/>
<target action="child" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:serviceCall//ds:register/ds:acquisition"/>
</enrich>
<enrich>
<source clone="true" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:sampleData//ds:Sample/ds:prov_sid/text()"/>
<target action="child" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:serviceCall//ds:register/ds:acquisition/ds:sampleid/text()"/>
</enrich>
正如您在第一个中介器定义中看到的,我通过以下方式定义 2个 XML元素(和):
<parent xmlns="http://ws.wso2.org/dataservice">
<sampleid>[pgrfas.prov_sid]</sampleid>
<provenance>[pgrfas.provenance]</provenance>
</parent>
广告 I 定义了 2 个占位符,这些占位符应替换为此链式以下中介从数据库获得的数据:
<enrich>
<source clone="true" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:sampleData//ds:Sample/ds:prov_sid/text()"/>
<target action="child" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:serviceCall//ds:register/ds:acquisition/ds:sampleid/text()"/>
</enrich>
<enrich>
<source clone="true" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:sampleData//ds:Sample/ds:provenance"/>
<target xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:serviceCall//ds:register/ds:acquisition/ds:provenance"/>
</enrich>
这是此EXB应用程序生成的最终 XML 文档中的相关部分:
<sampleid>coll_sid-001</sampleid>
<missid>coll_miss_id-001</missid>
其中coll_sid-001和coll_miss_id-001由DSS服务从数据库中检索(以前放入$ctx:sampleData属性中)。
如果进入执行DSS查询的数据库表中有与 XML和字段相关的值,它工作正常,我获得了以前的输出。
如果此表包含这些字段的空值,我将此输出获取到生成的 XML 中:
<sampleid>[pgrfas.coll_sid]</sampleid>
<missid>[pgrfas.coll_miss_id]</missid>
如您所见,如果在数据库表上找不到相关值,则会将定义的占位符放入生成的 XML 中。
这对我的目的不好。如果数据库表中存在空值,我希望在生成的 XML 文档中获取一个空标签,如下所示:
<sampleid />
<missid />
如何解决此问题?在这种情况下,是否存在一些简单的解决方法来获取空标签?
尝试以这种方式创建您的丰富
<enrich>
<source clone="true" type="inline">
<parent xmlns="http://ws.wso2.org/dataservice">
<sampleid/>
<provenance/>
</parent>
</source>
<target property="moreValues" type="property"/>
</enrich>