FaultRule (Error Handling) has no Condition or the Condition is empty.│ FR001

I am running my proxy though deployment pipeline. At the stage of Apigee lint, it fails with this error. I have ordered my FaultRules but still no success.

Error:

/apiproxy/targets/default.xml

║ Line     │ Column   │ Type     │ Message                                                │ Rule ID              ║
╟──────────┼──────────┼──────────┼────────────────────────────────────────────────────────┼──────────────────────╢
║ 4        │ 9        │ error    │ FaultRule (Error Handling) has no Condition or the     │ FR001                ║
║          │          │          │ Condition is empty.                                    │                      ║

default.xml

 

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <FaultRules>
        <FaultRule name="QuotaViolation">
            <Step>
                <Condition>fault.name Matches "QuotaViolation"</Condition>
                <Name>RF-QuotaViolation</Name>
            </Step>
            <Condition>(fault.name = "QuotaViolation")</Condition>
        </FaultRule>
        <FaultRule name="SpikeArrestViolation">
            <Step>
                <Condition>(fault.name Matches "SpikeArrestViolation")</Condition>
                <Name>RF-SpikeArrestViolation</Name>
            </Step>
            <Condition>(ratelimit.SA-Configuration.failed=true)</Condition>
        </FaultRule>
    </FaultRules>
    <DefaultFaultRule name="all">
        <AlwaysEnforce>true</AlwaysEnforce>
        <Step>
            <Condition>(javascript.JS-ValidateRequest.failed = true)</Condition>
            <Name>RF-InvalidRequest</Name>
        </Step>
        <Step>
            <Condition>fault.name Matches "ThreatDetected"</Condition>
            <Name>RF-ThreatDetected</Name>
        </Step>
    </DefaultFaultRule>

 

Where could the issue be?  @dchiesa1 @kurtkanaskie 

Solved Solved
0 2 1,726
1 ACCEPTED SOLUTION

I found the issue. I was looking at the default.xml file in proxy endpoint instead of TargetEndpoint. I had not included the conditions:

Before change:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TargetEndpoint name="default">
    <FaultRules>
        <FaultRule name="Error Handling">
            <Step>
                <Condition>(error.status.code Equals "504")</Condition>
                <Name>RF-GatewayTimeout</Name>
            </Step>
            <Step>
                <Condition>(error.status.code Equals "503" OR error.status.code Equals "500")</Condition>
                <Name>RF-ServerError1</Name>
            </Step>
        </FaultRule>
    </FaultRules>

After Change:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TargetEndpoint name="default">
    <Description/>
    <FaultRules>
        <FaultRule name="Timeout Error Handling">
            <Condition>(error.status.code Equals "504")</Condition>
            <Step>
                <Condition>(error.status.code Equals "504")</Condition>
                <FaultRules/>
                <Name>RF-GatewayTimeout</Name>
            </Step>
        </FaultRule>
        <FaultRule name="Server Error Handling">
            <Condition>(error.status.code Equals "503" OR error.status.code Equals "500")</Condition>
            <Step>
                <Condition>(error.status.code Equals "503" OR error.status.code Equals "500")</Condition>
                <FaultRules/>
                <Name>RF-ServerError1</Name>
            </Step>
        </FaultRule>
    </FaultRules>

 

View solution in original post

2 REPLIES 2

I found the issue. I was looking at the default.xml file in proxy endpoint instead of TargetEndpoint. I had not included the conditions:

Before change:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TargetEndpoint name="default">
    <FaultRules>
        <FaultRule name="Error Handling">
            <Step>
                <Condition>(error.status.code Equals "504")</Condition>
                <Name>RF-GatewayTimeout</Name>
            </Step>
            <Step>
                <Condition>(error.status.code Equals "503" OR error.status.code Equals "500")</Condition>
                <Name>RF-ServerError1</Name>
            </Step>
        </FaultRule>
    </FaultRules>

After Change:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TargetEndpoint name="default">
    <Description/>
    <FaultRules>
        <FaultRule name="Timeout Error Handling">
            <Condition>(error.status.code Equals "504")</Condition>
            <Step>
                <Condition>(error.status.code Equals "504")</Condition>
                <FaultRules/>
                <Name>RF-GatewayTimeout</Name>
            </Step>
        </FaultRule>
        <FaultRule name="Server Error Handling">
            <Condition>(error.status.code Equals "503" OR error.status.code Equals "500")</Condition>
            <Step>
                <Condition>(error.status.code Equals "503" OR error.status.code Equals "500")</Condition>
                <FaultRules/>
                <Name>RF-ServerError1</Name>
            </Step>
        </FaultRule>
    </FaultRules>

 

EXCELLENT!  Thanks for sharing that diagnosis.