AttributeDesignator считается сумкой в XACML, другими словами, он многозначен . Поэтому вы должны применить к нему функцию integer-one-only-only , прежде чем применять integer-is-in , потому что integer-is-in ожидает одно значение (например, AttributeValue) в качестве первого аргумента.
Кроме того, функции integer-in-in и integer-one-and-only работают только с типом данных integer (из * 1027) * схема) в стандарте XACML, а не long . Так что тот факт, что ваш второй пример работает хорошо говорит о том, что ваша реализация XACML не на 100% совместима с XACML.
Наконец, вы используете здесь синтаксис XACML 2.0, и я настоятельно рекомендую обновить в XACML 3.0, который исправляет и улучшает XACML в целом. В XACML 3.0 исправление будет выглядеть следующим образом:
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-is-in">
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-one-and-only">
<AttributeDesignator AttributeId="urn:ch:xxxx:attribute:subject:1.0:participantid" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false" />
</Apply>
<AttributeDesignator AttributeId="urn:ch:xxxx:attribute:resource:1.0:participantids" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false" />
</Apply>