Richtiger Ausnahmefehler für das Fehlen einer Systemeigenschaft

8

Angenommen, ich habe eine Systemeigenschaft MY_PROP :

%Vor%

Diese Eigenschaft ist notwendig, damit mein System funktioniert.

Was ist die richtige Ausnahme zu werfen, wenn diese Eigenschaft nicht gesetzt ist?

%Vor%

Irgendwie fühlt sich IllegalArgumentException nicht richtig. Vielleicht IllegalStateException , MissingResourceException , TypeNotPresentException ? Was ist die Standardpraxis für dieses Szenario?

    
Anthony Accioly 08.07.2014, 14:21
quelle

3 Antworten

12

Es gibt keine. Ich würde das IllegalStateException werfen, weil Sie den Parameter vermissen. Dies bedeutet, dass der Konfigurationsvalidierer fehlgeschlagen ist und Ihre Anwendung einen ungültigen Status aufweist. Mit anderen Worten, Sie sollten nie init() aufrufen können.

Wenn der Wert des Parameters ungültig wäre, würde ich ein IllegalArgumentException werfen.

Wenn Sie einen Validator schreiben, sollten Sie sich entscheiden, ob Sie RuntimeException verwenden oder einen markieren möchten. Wenn Sie beispielsweise "javax.naming.ConfigurationException" verwenden oder eine eigene Konfigurationsausnahme erstellt haben. Ihr API wird in der Lage sein, eine solche Ausnahme zu handhaben und in Bezug auf Legacy korrekt zu reagieren.

Definitionen:

IllegalStateException - Signalisiert das Eine Methode wurde zu einer illegalen oder unangemessenen Zeit aufgerufen. Mit anderen Worten, die Java-Umgebung oder Java-Anwendung befindet sich nicht in einem geeigneten Zustand für die angeforderte Operation.

IllegalArgumentException - Wird ausgelöst Geben Sie an, dass eine Methode als unzulässiges oder unangemessenes Argument übergeben wurde.

    
Damian Leszczyński - Vash 08.07.2014, 14:33
quelle
3

Ich füge nur Vashs Antwort für das Spring Framework hinzu. Wenn Sie das Spring Framework verwenden und mit den meisten Komponenten in Spring konsistent sein möchten, würde ich sagen, dass Sie IllegalStateException (oder Ihre eigene Ableitung) verwenden sollten.

Im Frühjahr die meisten Komponenten, die eine @PostConstruct oder @Override void afterPropertiesSet() werfen% IllegalStateException mit der util org.springframework.util.Assert.state(..) .

Sie können dies in Spring AMQP als ein Beispiel.

Davon abgesehen habe ich tatsächlich Bugs gegen Spring MVC eingereicht, wo sie IllegalArgumentException anstelle einer benutzerdefinierten und mehr verwendet haben explizit abgeleitete Klasse. Mit statischen Inline-Klassen ist es sehr einfach, eine benutzerdefinierte Ausnahme zu erstellen, ohne eine andere Java-Datei zu erstellen.

    
Adam Gent 08.07.2014 14:56
quelle
1

Da eine Systemeigenschaft nicht immer definiert ist, sollte die Standardmethode einen Standardwert verwenden, wenn Sie die Eigenschaft nicht finden können.

Ich habe gerade einige Standard-Code in Java 7 (Apache Tomcat, java.lang, java.awt, ...) überprüft, sie verwenden immer einen Standard "Fallback", wenn die Eigenschaft null ist.

Vielleicht ist Ihr Problem woanders?

Warum nimmst du diese Parameter nicht als notwendiges Argument für dein Glas? Dann können Sie IllegalArgumentException verwenden.

    
Magus 08.07.2014 14:33
quelle

Tags und Links