XML (XACML) Syntax Error - String Literal was Expected

199 views Asked by At

I am writing a XACML policies for my masters dissertation, and I am encountering apparent syntax errors. It is highlighting the very first line; however, I am unsure. I am very new to XML so that it may be a very silly mistake :)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<PolicySet xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:policy:schema:os 
C:\Users\home\OneDrive\Documents\core-release Authzforce Testing\IIA001" PolicySetId="CAVPolicies" 
PolicyCombiningAlgId="urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:permit-unless- 
deny" xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Target xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os">

</Target>
<Policy PolicyId=CAV1 RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:permit-unless-deny">
<Target/>
    <Rule RuleId="CAVRSU" Effect="Deny">
        <Description>Vehicles will relay data to a roadside unit upon request. Attempts to read vehicle path histories, applicable lane numbers. 
            Calculates chance of a vehicle committing a stop violation. </Description>
        
    <Condition>
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
                    <SubjectAttributeDesignator AttributeId="CommunicationStructure" DataType="http://www.w3.org/2001/XMLSchema#string"/>
                    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">RSU</AttributeValue>
                    </Apply>
                </Apply
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
                    <ResourceAttributeDesignator AttributeId="CAVData" DataType="http://www.w3.org/2001/XMLSchema#string"/>
                    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Vehicle Path History</AttributeValue>
                    </Apply>
                </Apply>
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of">
                    <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal"/>
                    <ActionAttributeDesignator DataType="http://www.w3.org/2001/XMLSchema#string" AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"/>
                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">READ</AttributeValue>
                </Apply>
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:or">
                    <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:boolean-equal"/>
                    <EnvironmentAttributeDesignator DataType="http://www.w3.org/2001/XMLSchema#boolean" AttributeId="VehicleWithinRSURange"/>
                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#boolean">True</AttributeValue>
                </Apply>
                </Apply>
            </Apply>
        </Condition>
    </Rule>
</Policy>
</PolicySet>

For reference, I am writing these policies in Notepad++ and then testing them in authforce PDP. When I run this in authforce, I get the error...

"Exception in thread "main" java.lang.reflect.InvocationTargetException"

Any feedback on anything is greatly appreciated :)

2

There are 2 answers

1
AudioBubble On BEST ANSWER

You should get used to finding and using tools. I doubt you will get much reponse for questions like this :) Having said that here is your modified xml that does not give error. In notepad++ you have plugin "XML Tools". If you install that, and if you try to save invalid xml it would give you error. You can also display the xml in your favourite browser and get error message. You can see the difference in xml you gave and one I put below using a diff utility, I use "winmerge (winmerge.com)"

In short the problem was:

  • extra "Apply" tag

  • not closed "Apply" tag

  • missing double quotes for policyId attribute value

        <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    
    <PolicySet xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:policy:schema:os " PolicySetId="CAVPolicies" PolicyCombiningAlgId="urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:permit-unless-deny" xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Target xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os">
    
    </Target>
    <Policy PolicyId="CAV1" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:permit-unless-deny">
    <Target/>
        <Rule RuleId="CAVRSU" Effect="Deny">
            <Description>Vehicles will relay data to a roadside unit upon request. Attempts to read vehicle path histories, applicable lane numbers. 
                Calculates chance of a vehicle committing a stop violation. </Description>
    
        <Condition>
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
                    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
                        <SubjectAttributeDesignator AttributeId="CommunicationStructure" DataType="http://www.w3.org/2001/XMLSchema#string"/>
                        <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
                            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">RSU</AttributeValue>
                        </Apply>
                    </Apply>
                    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
                        <ResourceAttributeDesignator AttributeId="CAVData" DataType="http://www.w3.org/2001/XMLSchema#string"/>
                        <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
                            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Vehicle Path History</AttributeValue>
                        </Apply>
                    </Apply>
                    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of">
                        <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal"/>
                        <ActionAttributeDesignator DataType="http://www.w3.org/2001/XMLSchema#string" AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"/>
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">READ</AttributeValue>
                    </Apply>
                    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:or">
                        <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:boolean-equal"/>
                        <EnvironmentAttributeDesignator DataType="http://www.w3.org/2001/XMLSchema#boolean" AttributeId="VehicleWithinRSURange"/>
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#boolean">True</AttributeValue>
                    </Apply>
                    </Apply>
            </Condition>
        </Rule>
    </Policy>
    </PolicySet>
    
2
David Brossard On

@vish is right in their answer: you had basic XML mistakes. You should use XML validation tools (either baked into Notepad ++ or even online such as here). In addition, if all you want to do is write XACML. I'd recommend you use Eclipse and the ALFA plugin for Eclipse as it's much easier to write ALFA (which is then directly translated to XACML).

Have a look at these articles: