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! Go to 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>
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.