我正在使用drools创建验证服务来验证输入XML(解析为Java对象)的规则。
这些XML文件通常包含大量数据,其中一些数据在多个数组和对象中非常深入地打包: Example
现在我需要检查“attributeValueFrom”中的值。或者事实上,我遇到了“更深层”树下的任何物体而不是“条件”。
rule "Every_Attribute_has_a_Value_True"
when
G10EValidationObject($columns : getNormalisedMetaDataContainer().getMetaDataContainer().getNormalisedOrder().getSelection().getColumn());
$column : NormalisedDataColType($condition : attributeCondition.getCondition()) from $columns;
$column3 : NormalisedDataColType($attrValueGroup : attributeCondition.condition.getAttrValueGroup()) from $condition;
//$column2 : NormalisedDataColType ($attrValueGroup : condition.getAttrValueGroup()) from $condition;
$attrValueRanges : QualifiedAttributeNameValueGroupType(valueGroup.getValueRange()) from $attrValueGroups;
$attrValueRange : QualifiedAttributeNameValueGroupType(valueRange.getAttributeValueFrom() != "", valueRange.getAttributeValueFrom() != null, valueRange.getAttributeValueTo() != "", valueRange.getAttributeValueTo() != null ) from $attrValueRanges;
then
validationRuleResults.addResult("Every_Attribute_has_a_Value", true, "Rule passed");
端
当子句工作的前两行时,我试图以类似的方式访问树下更远的对象,但它总是抛出错误“无法分析表达式”。
我可以通过在单独的Java方法中提取数据并调用该方法来解决问题但是如果可能的话我更喜欢在内部进行Drools(在我看来可能)
感谢您的帮助
Leo K。
PS:如果它有助于获取指定数据的Java方法调用:
normalisedMetaDataContainer.getMetaDataContainer()
.getNormalisedOrder().getSelection().getColumn()
.get(0).getAttributeCondition().getCondition()
.get(0).getAttrValueGroup().get(0).getValueGroup()
.getValueRange().get(0).getAttributeValueFrom()
注意我不仅希望得到数组中的第一个对象,而且还想要检查所有对象的规则。
如果您需要其他信息,我很乐意提供。