当我从 DSS 服务获取空值到生成 XML 文档的 ESB 应用程序中时,如何获取 XML 空标记?



我绝对是WSO2项目的新手,我有以下问题。我正在从事一个Enterprise Intergrator项目(涉及ESBDSS组件)。

我正在从某些数据库表中包含的数据开始生成一个 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-001coll_miss_id-001DSS服务从数据库中检索(以前放入$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>

最新更新