<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
PolicyId="ClientType"
RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable"
Version="1.0">
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Reply</AttributeValue>
<AttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"
Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action"
DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true" />
</Match>
</AllOf>
</AnyOf>
</Target>
<Rule Effect="Permit" RuleId="Rule_for_all">
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">A</AttributeValue>
<AttributeDesignator AttributeId="Reply"
Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true" />
</Match>
</AllOf>
</AnyOf>
</Target>
</Rule>
<Rule Effect="deny" RuleId="Rule_deny_all" />
</Policy>
请帮我用JAXB解组这个xml。我试过这样做,但在两者之间我感到困惑并得到了错误。我有一个非常大的xml文件,但这个片段可以帮助我理解。
答案 0 :(得分:2)
您发送的片段实际上是一个不完整的XML片段。例如,它缺少关闭</Policy>
元素。
您发送的片段对应于XACML 3.0策略。这意味着在关闭策略之前,您还应该有一个或多个规则(从技术上讲,模式允许零规则,但这没有意义)。
要使用JAX-B进行编组和解组,您需要使用可以找到here的XACML 3.0架构。配置JAXB以基于该模式创建Java对象非常简单。您需要创建一个简单的XJB文件来配置编组。
那就是说,考虑到有几个XACML引擎(开源和供应商,比如我工作的那个,Axiomatics),你自己实现XACML解析器的理由是什么?
干杯, 大卫。