IIB ESQL XML验证

时间:2017-04-05 09:35:22

标签: ibm-integration-bus extended-sql

输入XML:

<Green>
    <Fruits>Apple</Fruits>
    <Vegetables>
        <1>Beans</1>
        <2>Carrot</2>
    </Vegetables>
    <LivingThings @Type = Bird>Parrot</LivingThings>
    <NonLivingThings>Car</NonLivingThings>
</Green>    

我想检查Root'Green'下的所有Field元素是否存在而不是空的。

我需要为每个错误抛出两个不同的例外:

对于不存在的字段 - 字段不存在; 对于空值 - 不是有效值

IF(FIELDTYPE(ref.fruits)IS NULL OR FIELDTYPE(ref.Vegetables)IS NULL OR FIELDTYPE(ref.livingthins)IS NULL OR 
                                    FIELDTYPE(ref.nonlivingthing)IS NULL) THEN
                                    Throw USER EXCEPTION MESSAGE 2000 VALUES ('Field Not Present'); 
                                ELSEIF(FIELDVALUE(ref.fruits)= '' OR FIELDVALUE(ref.Vegetables)= '' OR FIELDVALUE(ref.livingthins)= '' OR 
                                    FIELDVALUE(ref.nonlivingthing)= '') THEN
                                    Throw USER EXCEPTION MESSAGE 2004 VALUES ('Invalid Value'); 
                                ELSE                                    
                                    Propagate to terminal 'out1';                                   
                                END IF;         

这是解决方案,但我需要将确切的字段(空或空)连接到我的异常消息。

2 个答案:

答案 0 :(得分:0)

是的,有。

如果您使用SOAP服务,则可以在XSD中定义要求。因此,在SOAP输入中,您可以启用消息验证。

答案 1 :(得分:0)

首先检查您可以使用的输入树中的字段是否为空:EXISTS(ref.fruits [])。检查null是否可能看起来不起作用。 其次,您可以使用&#34; ResetContentDescriptor&#34;流中的节点用于验证或重新验证XML消息。请查看知识中心here上的节点文档。我希望这会有所帮助。