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
 
A

Andgalf

Gast
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?
 

andyx1975

Aktives Mitglied
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.
 

Frank04

Mitglied
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...
 

andyx1975

Aktives Mitglied
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
 
R

reNur

Gast
Ich denke Frank04 meinte, dass du statt "AddressException" einfach "Exception" abfangen sollst.
 

DerFeivel

Bekanntes Mitglied
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.
 

andyx1975

Aktives Mitglied
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 :)
 

DerFeivel

Bekanntes Mitglied
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

  • EmailSample.zip
    14,9 KB · Aufrufe: 1
Zuletzt bearbeitet:

ARadauer

Top Contributor
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...
 
J

JohannisderKaeufer

Gast
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();
                }
            }
 

HoaX

Top Contributor
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...
 

Ähnliche Java Themen

Neue Themen


Oben