Hi all,
As no one beat me to it, I tracked down this issue to the following change to the onFault() method of AddressEndpoint: /** * This class represents an actual endpoint to send the message. It is responsible for sending the @@ -35,22 +31,32 @@ public void onFault(MessageContext synCtx) { - // is this really a fault or a timeout/connection close etc? - if (isTimeout(synCtx)) { - getContext().onTimeout(); - } else if (isSuspendFault(synCtx)) { - getContext().onFault(); + // is this an actual leaf endpoint + if (getParentEndpoint() != null) { + // is this really a fault or a timeout/connection close etc? + if (isTimeout(synCtx)) { + getContext().onTimeout(); + } else if (isSuspendFault(synCtx)) { + getContext().onFault(); + } } The added null-check of the parent endpoint causes this trouble. The parent endpoint of my address endpoint is always null, thus the EndpointContext.onFault() gets never executed and we run endless circles. Removing this check, resolves the issue for me, but according to the commit message this seems to be done on purpose to fix another issue… Here are the details of the change: Revision: 727648 Author: indika Date: 06:38:32, Thursday, 18. Dec 2008 Message: Fixed an issue - JMX switch off doesn’t work due to a leaf level endpoint (wsdl / address) become root endpoint too (when there are only address or wsdl endpoint - no LB or FO endpoint with address endpoints as children). ---- Modified : /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java Modified : /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AbstractEndpoint.java Modified : /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AddressEndpoint.java Modified : /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/EndpointContext.java Modified : /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/WSDLEndpoint.java Regards, Eric ________________________________ From: Hubert, Eric [mailto:eric.hub...@foxmobile.com] Sent: Saturday, April 18, 2009 7:20 PM To: dev@synapse.apache.org Subject: RE: Endless recursion in FaultHandler.handleFault() Hi all, I'm still facing an issue which looks like a recursion (not the same), if the endpoint url is a non existing one resulting in a connection refused. Here is my endpoint config: <syn:endpoint name="servicename#1.0#lbgroupname#A1###myhost"> <syn:address uri="some_non_existing_url" statistics="false"> <syn:timeout> <syn:duration>120000</syn:duration> <syn:action>fault</syn:action> </syn:timeout> <syn:markForSuspension> <syn:retriesBeforeSuspend>3</syn:retriesBeforeSuspend> <syn:retryDelay>500</syn:retryDelay> </syn:markForSuspension> <syn:suspendOnFailure> <syn:initialDuration>100</syn:initialDuration> <syn:progressionFactor>3</syn:progressionFactor> <syn:maximumDuration>300000</syn:maximumDuration> </syn:suspendOnFailure> </syn:address> </syn:endpoint> [...] [HttpClientWorker-7] WARN FaultHandler - ERROR_CODE : 101503 ERROR_MESSAGE : Connection refused or failed for : myhost:6003 [HttpClientWorker-7] DEBUG AxisService - Get operation for anonOutInOp [HttpClientWorker-7] DEBUG AxisService - Found axis operation: org.apache.synapse.core.axis2.dynamicaxisoperat...@2720f6 [HttpClientWorker-7] DEBUG ConfigurationContext - registerOperationContext (false): org.apache.axis2.context.operationcont...@16a9d0a with key: urn:uuid:EEC7CAA6BBD62D98F91240074657255 [HttpClientWorker-7] DEBUG SandeshaModule$1 - Unsetting USE_ASYNC_OPERATIONS and DISABLE_RESPONSE_ACK for unreliable message [HttpClientWorker-7] DEBUG SandeshaModule$1 - Entry: SandeshaModule::resolveTarget [HttpClientWorker-7] DEBUG SandeshaUtil - Entry: SandeshaUtil::isMessageUnreliable [HttpClientWorker-7] DEBUG SandeshaUtil - Exit: SandeshaUtil::isMessageUnreliable, false [HttpClientWorker-7] DEBUG SandeshaModule$1 - Exit: SandeshaModule::resolveTarget [HttpClientWorker-7] DEBUG ConfigurationContext - registerOperationContext (false): org.apache.axis2.context.operationcont...@16a9d0a with key: urn:uuid:EEC7CAA6BBD62D98F91240074657255 [HttpClientWorker-7] DEBUG ConfigurationContext - msgContext: [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] action: [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking pre-condition for Phase "soapmonitorPhase" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Invoking phase "soapmonitorPhase" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking post-conditions for phase "soapmonitorPhase" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking pre-condition for Phase "OperationOutPhase" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Invoking phase "OperationOutPhase" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking post-conditions for phase "OperationOutPhase" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking pre-condition for Phase "RMPhase" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Invoking phase "RMPhase" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking post-conditions for phase "RMPhase" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking pre-condition for Phase "PolicyDetermination" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Invoking phase "PolicyDetermination" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking post-conditions for phase "PolicyDetermination" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking pre-condition for Phase "MessageOut" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Invoking phase "MessageOut" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Invoking Handler 'AddressingOutHandler' in Phase 'MessageOut' [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking post-conditions for phase "MessageOut" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking pre-condition for Phase "Security" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Invoking phase "Security" [HttpClientWorker-7] DEBUG Phase - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] Checking post-conditions for phase "Security" [HttpClientWorker-7] DEBUG AddressingHelper - [MessageContext: logID=urn:uuid:EEC7CAA6BBD62D98F91240074679600] isReplyRedirected: ReplyTo is null. Returning false [HttpClientWorker-10] DEBUG SandeshaModule$1 - Unsetting USE_ASYNC_OPERATIONS and DISABLE_RESPONSE_ACK for unreliable message [HttpClientWorker-10] DEBUG SandeshaModule$1 - Entry: SandeshaModule::resolveTarget [HttpClientWorker-10] DEBUG SandeshaUtil - Entry: SandeshaUtil::isMessageUnreliable [HttpClientWorker-10] DEBUG SandeshaUtil - Exit: SandeshaUtil::isMessageUnreliable, false [HttpClientWorker-10] DEBUG SandeshaModule$1 - Exit: SandeshaModule::resolveTarget [HttpClientWorker-10] DEBUG OMNodeImpl - Builder is already complete. [HttpClientWorker-10] WARN FaultHandler - ERROR_CODE : 101503 ERROR_MESSAGE : Connection refused or failed for : pls-svc-2.uat.jamba.net:6003 [HttpClientWorker-10] DEBUG AxisService - Get operation for anonOutInOp [...] Any ideas? Otherwise I will try to dig into this if I find the time. Regards, Eric