Bank detail retrieval¶
This operation covers the three façade methods that retrieve bank-detail data for a routing number from the ABA vendor service: GetBankFullXML and GetBankListXML return raw XML payloads, while GetBankFullDS additionally parses the full-detail XML into the generated Institutions typed DataSet. All three are the only operations in this library that treat a vendor SoapException as a not-found condition rather than an error.
| Field | Value |
|---|---|
| Operation ID | OP-BV-03 |
| Trigger | Caller calls GetBankFullXML(inRoutingNum), GetBankListXML(inRoutingNum), or GetBankFullDS(inRoutingNum) on a constructed clsValidateBank |
| Inputs | inRoutingNum (routing number string) |
| Outputs | XML string (GetBankFullXML, GetBankListXML) or a populated/empty Institutions DataSet (GetBankFullDS) |
| Primary components | clsValidateBank.GetBankFullXML, clsValidateBank.GetBankListXML, clsValidateBank.GetBankFullDS, clsValidateBank.LogonABA, clsValidateBank.LogoffABA, SAIF.Institutions |
| Entry point | Legacy\BankValidator\clsValidateBank.vb |
Steps¶
- Log on to the ABA service.
LogonABA()incrementsm_LogonAttempts, lazily constructsABAService.ABAServiceif needed, sets itsUrlfromURLABA, and callsABA.Logon(CompanyId, UserId, Password)to obtain aLogonToken(BR-002). This call is wrapped in the outerTryblock for all three methods. - On failure inside
LogonABA: recursively retries whilem_LogonAttempts < m_LogonAttemptsMax, then throwsApplicationException("Unable to logon to ABA web service.", ex)once exhausted. - Invoke the vendor retrieval.
- For
GetBankFullXMLandGetBankFullDS: callABA.GetBanksFullXML(LogonToken, inRoutingNum)and assign the result tobankXML. - For
GetBankListXML: callABA.GetBanksXML(LogonToken, inRoutingNum)and assign the result tobankXML. - Parse into a DataSet (
GetBankFullDSonly). IfbankXML.Length > 0, construct aSystem.IO.StringReaderoverbankXMLand calldsBank.ReadXml(xmlSR, XmlReadMode.ReadSchema)to populate theInstitutionsDataSet.* - If
bankXMLis empty, theInstitutionsDataSet is returned unpopulated. - Handle a vendor not-found fault. If
System.Web.Services.Protocols.SoapExceptionis raised by the ABA call, the method treats it as a not-found condition and assignsbankXML = ""(BR-003). - For
GetBankFullXMLandGetBankListXML: the empty string is returned directly. - For
GetBankFullDS: because the fault short-circuits before step 3, theInstitutionsDataSet remains unpopulated and is returned empty. - Handle any other exception. Any exception other than
SoapExceptionis re-thrown asApplicationException("Error while trying to get the bank info", ex). - Log off the ABA service. All three methods call
LogoffABA()in aFinallyblock, guaranteeing the ABA proxy is disposed and the session token released regardless of whether step 2–5 succeeded, faulted, or threw. - On a
LogoffABAfailure: the exception is silently swallowed (theThrowline is commented out). - Return the result.
GetBankFullXMLandGetBankListXMLreturn thebankXMLstring;GetBankFullDSreturns thedsBankInstitutionsDataSet.
Process flow¶
The following diagram visualizes the shared control flow, including the SoapException fault path that differs from the other operations in this library.
flowchart TD
Start([Caller calls GetBankFullXML,<br>GetBankListXML, or GetBankFullDS]) --> 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 -->|GetBankFullXML / GetBankFullDS| Full[ABA.GetBanksFullXML]
Which -->|GetBankListXML| ListCall[ABA.GetBanksXML]
Full --> Fault{SoapException?}
ListCall --> Fault
Fault -->|Yes| Empty[bankXML = empty string]
Fault -->|No, other exception| OtherEx([ApplicationException thrown])
Fault -->|No| HasXml{bankXML.Length > 0<br>and GetBankFullDS?}
HasXml -->|Yes| Parse[ReadXml into<br>Institutions DataSet]
HasXml -->|No| Skip[No parsing]
Empty --> Logoff[LogoffABA in Finally:<br>release token, dispose proxy]
Parse --> Logoff
Skip --> Logoff
Logoff --> Done([Return XML string<br>or Institutions DataSet])
Failure and edge-case behavior¶
- A vendor
SoapExceptionis treated uniformly across all three methods as a not-found condition, returning an empty string or an unpopulatedInstitutionsDataSet instead of propagating the fault (BR-003). - Any non-
SoapExceptionfailure is wrapped and re-thrown asApplicationException("Error while trying to get the bank info", ex), unlike the ABA validation and lookup operations, which let vendor exceptions propagate unmodified. LogoffABAis guaranteed to run viaFinallyfor all three methods, so — unlike ABA routing number validation and company identifier lookup — the ABA proxy is always released even when the vendor call faults.- A source comment on
GetBankFullDSstates "for some reason this function never loads the data into the dataset," while the active (non-commented) code path does calldsBank.ReadXml(...); whether the DataSet is reliably populated at runtime could not be confirmed from source alone.** GetBankFullDSretains commented-out code for an alternative XML-to-DataSet loading approach (domBank.LoadXml/CType(domBank.DataSet, ...)); this dead code is not part of the executed logic and is excluded from the steps above.LogoffABAfailures are intentionally swallowed and never surface to the caller.*
Note: Statements marked with
*were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with**could not be confirmed; treat as unknown until verified.
Related documentation¶
Sources¶
Legacy\BankValidator\clsValidateBank.vbLegacy\BankValidator\Institutions.Designer.vb