SOAP-Client funktioniert plötzlich nicht mehr

Maliko

Bekanntes Mitglied
Moin,

ich stehe gerade vor einem Rätsel. Und zwar habe ich einen Webservice+Client, der bisher immer einwandfrei funktioniert hat. Die letzte Änderung an der Software fand vor mehreren Monaten statt (November 2021). Bis gestern lief er auch problemlos durch. Doch seit heute morgen plötzlich nicht mehr. Wenn ich den Client starte fängt er an zu arbeiten (ich bekomme 2 Fehlermeldungen das die Zugangsdaten falsch sind, was auch korrekt ist) und anschließend stürzt der Client mit folgender Fehlermeldung ab:

Exception in thread "main" com.sun.xml.internal.ws.fault.ServerSOAPFaultException: Client received SOAP Fault from server: java.lang.NullPointerException Please see the server log to find more detail regarding exact cause of the failure.
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:116)
at com.sun.xml.internal.ws.client.sei.StubHandler.readResponse(StubHandler.java:238)
at com.sun.xml.internal.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:189)
at com.sun.xml.internal.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:276)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:104)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:77)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:147)
at com.sun.proxy.$Proxy34.sendMails(Unknown Source)
at asekvclient.ASEKVClient.sendMail(ASEKVClient.java:86)
at asekvclient.ASEKVClient.main(ASEKVClient.java:64)

Schaue ich in das Logfile des Services, finde ich nur die beiden Fehlermeldungen bzgl. der falschen Zugangsdaten. Weitere Fehler werden nicht gemeldet, obwohl der Log so programmiert ist, das jegliche Exception geloggt wird. Auch ist der Server weiterhin problemlos erreichbar. Wenn ich die URL aufrufe bekomme ich die WSDL zurückgegeben und auch wenn ich den Client starte läuft er bis zum selben Punkt ebenfalls problemlos durch.

Die Zeile 68 in der ASEKVClient.java ist auch nur der Aufruf des Webservices. Dieser Funktioniert definitiv, da er ja definitiv 2 Anfragen verarbeitet hat, ansonsten hätte ich die Fehermeldungen vom Server ja nicht bekommen.

Die Funktion zum Aufruf ist auch nichts wirklcih wildes. Die sieht wie folgt aus:

Java:
public static void sendMail() throws MessagingException  {
        try {
            CustomerHandler customerHandler = new CustomerHandler();
            List<ASEKVCustomer> customer = customerHandler.receiveCustomer();
            AuthenticationCredentials credentials = new AuthenticationCredentials();
            int test = 1;
            for (ASEKVCustomer aSEKVCustomer : customer) {
                try {
                    credentials.setUsername(aSEKVCustomer.getUsername());
                    credentials.setPassword(aSEKVCustomer.getPassword());
                    credentials.setMandantid(aSEKVCustomer.getMandantid());
                    credentials.setSoftwareKey("xxxxxx");
               
                    port.sendMails(credentials, "xxx");
               
                    test++;
                } catch(AuthenticationFailedException_Exception | ASEKVException_Exception | FinderException_Exception ex) {}
            }
        } catch(SQLException | ClassNotFoundException ex) {
            //SMTPHandler mail = new SMTPHandler();
            //mail.sendMail(ex.getMessage() + "\n" + Arrays.toString(ex.getStackTrace()));
        }
    }

Und das hier ist die Funktion die aufgerufen wird:

Java:
/**
     *
     * @param userdata
     * @param authenticationString
     * @throws asekvwebservice.Exceptions.AuthenticationFailedException
     * @throws asekvwebservice.Exceptions.ASEKVException
     * @throws asekvwebservice.Exceptions.FinderException
     */
    @Override
    public void sendMails(AuthenticationCredentials userdata, String authenticationString) throws
            AuthenticationFailedException, ASEKVException, FinderException {
        try {
            if(authenticationString.equals(GlobalProperties.getInternalAuthenticationString())) {
                AuthenticatedUser user = this.authenticateUser(userdata);
             
                if(user != null) {
                    if(!user.getEmailSystem().equals("3")) {
                        SMTPHandler mailer = new SMTPHandler();
                        this.loginToService(user);

                        SearchResult result;

                        if(user.getEmailSystem() != null && (user.getEmailSystem().equals("1") || user.getEmailSystem().equals("2"))) {
                            List<String> sysIds = this.mailHandler.getSysIds(user.getMandantId());
                            List<Integer> states =  this.port.getStates(sysIds);
                            int counter = 0;

                            for (Integer state : states) {
                                if(state == 2 || state == 3) {                             
                                    List<Media> response = new ArrayList<>();
                                    ASKostenvoranschlag kv = kvHandler.getKostenvoranschlag(sysIds.get(counter));
                                    response.add(port.getResponseDocumentByNumber(sysIds.get(counter)));
                                    mailer.sendMail(user, kv, response);
                                    ASMailHistorie historie = this.mailHistoryHandler.createHistorie(user, sysIds.get(counter), state, mailer.createGenehmigungsTemplate(kv));
                                    historie.setIsSend(1);
                                    historie.setIsReaded(1);

                                    this.mailHistoryHandler.saveHistory(historie);
                                }

                                counter++;
                            }
                        }

                        if(!GlobalProperties.isDebug()) {
                            result = this.port.getInboxUnreadMessages();
                        } else {
                            result = this.port.getInboxMessages();
                        }

                        int mailCounter = 1;

                        for (String id : result.getData()) {                 
                            Mail receivedMail = this.port.getMessageByKey(id);
                            ASMailHistorie mailHistory = mailHistoryHandler.createHistorie(receivedMail, user);
                            if(user.getEmailSystem().equals("4")) {
                                if(mailer.sendMail(user, receivedMail)) {
                                    mailHistory.setIsSend(1);
                                    this.port.touchMessageByKey(id);
                                    mailHistory.setIsReaded(1);
                                } else {
                                    ErrorLogger.log("Die Nachricht mit der ID {0} konnte nicht versendet werden.");
                                }
                            } else {
                                this.port.touchMessageByKey(id);
                                mailHistory.setIsSend(0);
                                mailHistory.setIsReaded(1);
                            }

                            mailHistoryHandler.saveHistory(mailHistory);

                            mailCounter++;

                            if(GlobalProperties.isDebug() && mailCounter >= 5) {
                                break;
                            }
                        }

                        this.port.logout();
                    }
                } else {
                    throw new AuthenticationFailedException("Authentifizierung fehlgeschlagen. Bitte versuchen Sie es erneut");
                }
            } else {
                throw new AuthenticationFailedException("Funktion sendMails: Der Authentifizierungsschlüssel war ungültig. Bitte überprüfen Sie Ihre Eingabe");
            }
        } catch (ASEKVException ex) {
            throw new ASEKVException(ex.getMessage(), ex);
        }catch (AuthenticationFailedFault_Exception ex) {
            throw new AuthenticationFailedException("Authentifizierung fehlgeschlagen. Bitte versuchen Sie es erneut", ex);
        } catch (Fault_Exception ex) {
            throw new ASEKVException("Allgemeiner Fehler festgestellt. Bitte versuchen Sie es später noch einmal", ex);
        } catch (FinderFault_Exception ex) {
            throw new FinderException("Die von Ihnen angeforderten Daten konnten nicht ermittelt werden. Bitte überprüfen Sie Ihre Parameter.", ex);
        } catch (IOException ex) {
            throw new ASEKVException("Allgemeiner Fehler festgestellt. Bitte versuchen Sie es später noch einmal", ex);         
        }
    }

EDIT: Ich bin inzwischen weiter. Nachdem ich einfach ans Ende des Catches noch nen allgemeingültigen Catch-Case gesetzt habe habe ich jetzt auch ne Entsprechende Exception im Log. So wie es aussieht, ist plötzlich ein Objekt leer, welches bisher immer gefüllt war.
 
Zuletzt bearbeitet:

Robert Zenz

Top Contributor
Ich kann hier nur von CXF reden und ich baue die Services auch teilweise haendisch, aber was moeglich sein sollte ist dass du einen Interceptor (AbstractSoapInterceptor) am server registriert als OutFaultInterceptor. Dann wird dieser Interceptor immer aufgerufen wenn der Server mit einem Fehler antworten will, und man hat die Moeglichkeit entweder den Fehler nochmal zu bearbeiten (wenn man zum Beispiel eben genau nicht dem Client Details erzaehlen will), aber zumindest kann man dann jeden Fehler separat loggen. Hat den Vorteil dass man dann nicht auf das CXF Logging angewiesen ist wenn ein Fehler auftritt, sondern man hat immer sein eigenes Log.
 

Maliko

Bekanntes Mitglied
Das ist eine sehr gute Idee. Werde ich bei Zeiten defintiv mal umsetzen. Inzwischen weiß ich genau was los ist. Die Gegenstelle, die der Server antriggert hat Serverprobleme und schickt daher die Daten nicht, die mir jetzt fehlen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Axis SOAP Client und https XML & JSON 3
F Erste Schritte: soap client XML & JSON 7
LimDul SOAP & Rest Service - Contract First XML & JSON 2
W Method Overloading SOAP-Schnittstelle XML & JSON 2
W Erzeugen einer Handlerklasse zum Abfangen von SOAP-Requests XML & JSON 13
L Soap Nachricht Content Encoding Gzip XML & JSON 6
X JDom für SOAP Dateien geeignet? XML & JSON 3
F SOAP in Java XML & JSON 6
J SOAP auf HTTPS mit Authentifizierung XML & JSON 3
T SOAP mit Java ohne HTTP Server möglich? XML & JSON 3
J Soap über Axis XML & JSON 3
H soap message in java klasse speichern XML & JSON 10
S Java REST Client + Json XML & JSON 8
K http client übertragung XML & JSON 6
J Client für WebService programmieren (aus WSDL-File) XML & JSON 15
M dom4j detach funktioniert nicht XML & JSON 0
C javascript in .html Funktioniert, in .xhtml nicht mehr XML & JSON 0
N Java XML schreiben funktioniert nicht XML & JSON 1
S Node.setTextContent funktioniert nicht XML & JSON 3
G XPath - replace function funktioniert nicht XML & JSON 3
L XML Dokument auslesen funktioniert nicht richtig XML & JSON 2
F XML Suche funktioniert nicht XML & JSON 5
C xpath funktioniert nicht XML & JSON 5
B Validieren meines XMLs mit meiner DTD funktioniert nicht XML & JSON 9

Ähnliche Java Themen

Neue Themen


Oben