ABA routing number validation¶
This operation covers the two façade methods that ask the ABA vendor service a yes/no question about a routing number: IsValidABANumber checks structural validity and IsVerifiedABA requests vendor verification. Both follow the identical logon/invoke/logoff shape and differ only in which ABA method they call.
| Field | Value |
|---|---|
| Operation ID | OP-BV-01 |
| Trigger | Caller holds a constructed clsValidateBank instance and calls IsValidABANumber(inRoutingNum) or IsVerifiedABA(inRoutingNum) |
| Inputs | inRoutingNum (routing number string) |
| Outputs | Boolean — structural validity flag (IsValidABANumber) or vendor verification flag (IsVerifiedABA) |
| Primary components | clsValidateBank.IsValidABANumber, clsValidateBank.IsVerifiedABA, clsValidateBank.LogonABA, clsValidateBank.LogoffABA |
| Entry point | Legacy\BankValidator\clsValidateBank.vb |
Steps¶
- Log on to the ABA service.
LogonABA()increments the sharedm_LogonAttemptscounter, lazily constructsABAService.ABAServiceif not already created, sets itsUrlfromURLABA, and callsABA.Logon(CompanyId, UserId, Password)to obtain aLogonToken(BR-002). - On failure: the
Catchblock inLogonABAcomparesm_LogonAttemptstom_LogonAttemptsMaxand recursively callsLogonABA()again while under the limit. - On failure after the retry limit is exhausted: throws
ApplicationException("Unable to logon to ABA web service.", ex). - Invoke the vendor check.
- For
IsValidABANumber: callABA.ValidateABA(LogonToken, inRoutingNum)and assign the Boolean result toisValid. - For
IsVerifiedABA: callABA.VerifyABA(LogonToken, inRoutingNum)and assign the Boolean result toisValid. - Neither method wraps this call in a
Try/Catch; an exception raised by the vendor call propagates directly to the caller and skips step 3.* - Log off the ABA service.
LogoffABA()callsABA.Logoff(LogonToken), disposes theABAproxy, and sets it toNothing. - On failure: the
Catchblock inLogoffABAsilently swallows the exception (theThrowline is commented out) because a logoff failure is not considered significant enough to interrupt the caller. - Return the result. The Boolean vendor result (
isValid) is returned to the caller.
Process flow¶
The following diagram visualizes the shared control flow for both ABA validation checks.
flowchart TD
Start([Caller calls IsValidABANumber<br>or IsVerifiedABA]) --> Logon[LogonABA:<br>logon with retry up to m_LogonAttemptsMax]
Logon --> LogonOk{Logon succeeded?}
LogonOk -->|No, retries exhausted| Ex([ApplicationException thrown])
LogonOk -->|Yes| Which{Which method?}
Which -->|IsValidABANumber| Validate[ABA.ValidateABA]
Which -->|IsVerifiedABA| Verify[ABA.VerifyABA]
Validate --> Fault{Vendor call throws?}
Verify --> Fault
Fault -->|Yes| Propagate([Exception propagates;<br>LogoffABA skipped])
Fault -->|No| Logoff[LogoffABA:<br>release token, dispose proxy]
Logoff --> Done([Return Boolean result])
Failure and edge-case behavior¶
- If the ABA logon fails repeatedly, the caller receives an
ApplicationExceptionafterm_LogonAttemptsMaxretries (BR-002); no vendor check is attempted. - Because the vendor invocation is not wrapped in
Try/Catch, any exception fromABA.ValidateABAorABA.VerifyABApropagates unhandled to the caller andLogoffABA()is never reached, leaving the ABA proxy and logon token unreleased for the remainder of the object's life.* LogoffABAfailures are intentionally swallowed and never surface to the caller, even though a failed logoff could leave a stale session on the vendor side.*
Note: Statements marked with
*were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts.
Related documentation¶
Sources¶
Legacy\BankValidator\clsValidateBank.vb