Restful wird gestoppt, sobald eine Exception geworfen wird

andyx1975

Aktives Mitglied
Hallo,

ich habe eine Webapp geschrieben die Massen-Emails versendet. Das ganze wird mit einem Restful Webservice angesteuert. Der Webservice überprüft die emailadresse und versendet diese, sofern sie Gültig ist. Ist diese nicht gültig wird die folgende Methode einen Exception aus:

Java:
for ( int i = 0; i < recipients.length; i++ )
            {

                try
                {
                    addressTo[i] = new javax.mail.internet.InternetAddress( recipients[i] );
                }
                catch ( AddressException e )
                {
                    e.printStackTrace();
                    loggerSendMail.info( "Email adress string is invalid: " + recipients[i] + "\n"+ e );
                    loggerSendMail.info( "Email adress string: " + recipientString );
                }
            }

Mein Problem ist jetzt, dass der Webservice direkt einen 500er liefert, wenn die Exception ausgeworfen wird. Kann ich das irgendwie verhindern und den Restful dazu zwingen, weiter zu machen bis alle Emails versendet worden sind?

Danke
Andy
 
Bist Du dir sicher, das "AddressException" die einzige Exception ist die fliegt?? Oder fliegt da vll. eine andere oder eine weitere die nicht gefangen wird?
 
ja bin ich mir absolut sicher...habe es debugged und die email adress Fehler auch beim testen bewusst eingebaut. Der Restful bricht ab sobald die exception geworfen wird. Bis ich eine elegantere Lösung gefunden habe, teste ich die Email Adresses via Regex...dadurch wird keine Exception geworfen und das Versenden läuft momentan durch. Aber finde die Lösung nicht wirklich elegant und es kostet wohl auch Performance. Weil ich Strings prüfen und parsen muss.
 
Ich würde trotzdem mal den Versuch unterrnehmen und "Exception" abfangen. Ich hatte auch schon mal probleme mit APIs, bei denen angeblich keine Exception hätte kommen dürfen und es kamen doch welche...
 
hey danke fürs Feeback...aber die Exception fange ich ja ab...ich will ja dass der Restful trotz exception weiter läuft... er soll sie also ignorieren.

Gruß
Andy
 
Ich denke Frank04 meinte, dass du statt "AddressException" einfach "Exception" abfangen sollst.
 
Erm....kannst du bitte mal nen vollständiges Beispiel zur Verfügung stellen?



Der Code den du hier gepostest hast, wirft keine AddressException. Er behandelt sie.

Rein nach den Formulierungen zu urteilen, steht da auch noch irgendwo Code zum Versenden.
Wenn der dann mit leeren addressTo-Objekten arbeitet, wird irgendwo eine MessagingException geworfen die eventuell auch eine AddressException ist. (zweite Sache die hier von dir fehlt: genauen Stacktrace).


Wenn du das zur Verfügung stellt, ist die Lösung deines Problems vermutlich nur ein Ding von wenigen Minuten.
 
Die Exception steht doch hier drin:

Java:
catch ( AddressException e )
                {
                    e.printStackTrace();
                    loggerSendMail.info( "Email adress string is invalid: " + recipients[i] + "\n"+ e );
                    loggerSendMail.info( "Email adress string: " + recipientString );
                }


Wenn die Emailadresse keine gültige adresse ist, springt er hierein und der Rest wird abgebrochen. Den ganzen code kann ich zur Verfügung stellen, ich glaube aber kaum, dass jemand sich die Mühe macht, den zu lesen und zu verstehen. Es handelt sich hierbei um ein Massenmail Tool, dass daten in der DB speichert, csv importe interpretiert und weiterverarbetet. Das sind mehrere Klassen mit mindestens 2000 Zeilen Code.

Davon abegsehen, es ist vollkommen egal, welche Exception geworfen wird. Sobald innerhalb eines Restful eine Exception auftritt, wird dieser abgebrochen und es wird ein 500er gesendet. Aber ist auch kein Problem wenn keiner eine direkte Antwort weiss, weil ich habe ja einen workaround der 100% funktioniert. Ich will keinem zumuten, dass er sich durch den ganzen code wühlt 🙂
 
Der Code den du gepostest hast, sorgt nicht für den 500er.
Die AddressException behandelst du ja. Dementsprechend schlägt die auch nicht bis zur Response durch.


Ich hab dir mal ein Minimalbeispiel angehangen.
Im Falle einer AddressException wird ein Stacktrace ausgegeben und mit der nächsten Adresse fortgefahren.

Wenn ich mir deinen Quelltext so ansehe, können noch andere Exceptions geworfen werden (ArrayIndexOutOfBounds...).
Daher hätte mich der Stacktrace mal interessiert.


Du kannst mir gerne deinen Quelltext per Mail schicken und ich schau die Tage mal drüber.
Der hier gepostete Quelltext kann jedenfalls m.E. nicht die Ursache sein.
 

Anhänge

Zuletzt bearbeitet:
ok
1. eine Exception die du nicht fängst bricht den programm ablauf ab
2. du fängst eine AddressException
3. wir denken es wird eine andere Exception geworfen

A: du fängst diese
B: du fängst Exception (nicht AddressException) um mal zu sehen was da geworfen wird...
 
Zum Bleistift:
Java:
for ( int i = 0; i < recipients.length; i++ )
            {
 
                try
                {
                    addressTo[i] = new javax.mail.internet.InternetAddress( recipients[i] );
                }
                catch ( AddressException e )
                {
                    e.printStackTrace();
                    loggerSendMail.info( "Email adress string is invalid: " + recipients[i] + "\n"+ e );
                    loggerSendMail.info( "Email adress string: " + recipientString );
                }catch (Exception e1){
                    e1.printStackTrace();
                }
            }
 
Kann es sein dass du zwar die AddressException behandelst, aber du später eine NullPointerException bekommst welche du nicht siehst? Weil das Feld im Array ist ja dann null...
 

Zurück
Oben