WSO2 ESB对空/缺少XML标签进行验证

时间:2018-10-11 20:23:08

标签: xpath wso2esb

我正在尝试对丢失或为空的XML标签的XML请求进行验证。我用了这段代码

<filter description="Validate material" regex=".+"
    source="//E1MARAM[not(MATNR)] | //E1MARAM/MATNR[not(text())]">
    <then>
        <log category="WARN">
            <property name="/material"
                value="validation-empty tag MATNR send back to SAP" />
        </log>
        <property name="HTTP_SC" scope="axis2" type="STRING"
            value="500" />
        <makefault version="soap11">
            <code value="soap11Env:VersionMismatch" xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/" />
            <reason value="Missing SAP parameter" />
            <detail>MATNR</detail>
        </makefault>
        <respond />
    </then>
</filter>

很好地检查XML标签//E1MARAM/MATNR

我的问题是,这仅在标记为空时才有效。     看来带有reqex。+和xpath //E1MARAM[not(MATNR)]的Filter中介器不符合条件,因此检查不起作用

知道为什么吗?还是另一个想法,如何在WSO2 ESB中更好地对缺少XSD的XML标记或值进行验证?无法使用XSD架构,因为XML请求没有固定的结构-这是SAP iDoc的典型

1 个答案:

答案 0 :(得分:1)

最简单的方法是检查非空字符串”。无论是空的还是缺失的,这都将解析为false。另外,您不必使用正则表达式进行检查,而只需使用xpath。如果为过滤器介体提供xpath表达式,它将像检查布尔值一样对其进行解析。

<filter description="Validate material" xpath="not(//E1MARAM/MATNR!=''") >

如果元素为空或不存在,则返回true。如果有文本值,它将返回false。