02 oktober 2008

Onderscheid tussen return waarde en exception

Vorige week had ik een meningsverschil met een collega over de werking een bepaalde mainframe functie. Da's eens wat anders dan Java, natuurlijk, maar de analogie met Java is heel groot! Deze mainframe functie moet nagaan of een electronische handtekening correct is. Ja, bij ons doen we dat - om historische redenen - nog altijd op mainframe: de HSM en de crypto processoren bevinden zich op mainframe. De interface van deze functie is heel simpel:

  1. Je geeft het publieke certificaat en de handtekening door
  2. Je krijgt als returnwaarde "true" of "false" terug (boolean, vertaald naar 0 voor "false" of 1 voor "true")

Als je handtekening dus niet geldig is, dan krijg je dat via de returnwaarde door. Elke mainframe functie heeft echter ook steeds een header, waarin een uitvoeringscode is opgenomen en een zone voor een eventuele foutcode. Deze uitvoeringscode is 00 bij correcte uitvoering, 04 bij warning en 08 bij error, typische mainframe codes, die nog afstammen van exit codes in JCL's (daar bestaat ook nog 12 voor "severe"). Ja, ik heb ook nog een - beperkt - verleden als mainframe ontwikkelaar.

Alle uitvoeringen van transacties worden gelogd, met hun technische header (uitvoeringscode enz.) input en output. Die logging kan je bovendien ondervragen via een applicatie (zelfs een web applicatie!). Volgens mijn collega was het echter niet logisch dat je naar de detail van de uitvoering (output) moest gaan kijken om te zien of de handtekeningcontrole correct was uitgevoerd. En hierin vergist hij zich. Want de correcte uitvoering kan je nagaan a.h.v. de technische header. Het resultaat van de controle echter (of de handtekening al dan niet correct is) is te zien in de output van de functie. Op die manier maak je een onderscheid tussen een foutieve handtekening en een probleem bij het uitvoeren van de controle (b.v. omdat de crypto processor een fout gaf).

Voor mij is de bedoeling van die functie duidelijk: je vraagt of een handtekening correct is, dus verwacht je als antwoord "Ja" of "Nee". Dat antwoord wil je niet van een uitvoeringscode willen afleiden. Vergelijk het met Java: je kan een method hebben die als return waarde true of false teruggeeft. Maar als er zich bij de uitvoering ergens een fout voordoet, krijg je een exception of - indien het een "onvoorziene" fout is - een runtime exception, zoals ArrayIndexOutOfBoundsException.

10:59 Gepost door There's more to life than what you see through windows in Java design & development | Permalink | Commentaren (0) | Tags: exception, runtime exception, arrayindexoutofboundsexception |  Facebook |

De commentaren zijn gesloten.