-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Blockungsexport #327
Comments
Der Export bzw Import bezieht sich auf diese Schnittstelle: const formData = new FormData();
formData.append("data", file); |
Genau. |
Ich würde das Issue schließen, wenn hier keine weiteren Informationen getauscht werden. |
Ich wüsste schion gerne, ob es eine Lösung für das Problem gibt (bzw. geben wird) |
Wir verstehen das Problem nicht, da es bei uns ja funktioniert. |
Meinst du den hier:
Inwieweit das für mein Problem hilfreich sein soll, erschließt sich mir nicht. Ich habe das API, so wie hier
beschrieben, angewendet und bekomme den oben gemeldeten Fehler. Dass das bei euch funktioniert, hilft mir nicht weiter. |
Der Hinweis war der, dass die zip über das Feld Klappt es denn über die Debug-Schnittstelle? Oder kommt der Fehler auch darüber? |
Das hatte ich so nicht verstanden. Über die Debug-Schnittstelle klappt es. Das hilft mir jetzt weiter. |
wenn man im Firefox die Debug-Schnittstelle verwendet, dann kann man über Netzwerk in den Developer-Tools recht gut nachvollziehen, was passiert und welche Daten verschickt werden. |
Der Mediatype-Fehler ist beseitigt, dafür erhalte ich jetzt die Antwort
Das temporäre Verzeichnist wird angelegt, bleibt aber leer. Ich hätte vermutet, dass das Verzeichnis vom SVWS-Server mit den Dateien der übergebenen Zip-Datei gefüllt wird. |
Es wird besser, aber Fehler bleiben. Zur Verdeutlichung ein Auszug aus dem Log:
Die Datei existiert definitiv. Kann es sein, dass von Java durch den Backslash vor temp "\t" als Tabulator interpretiert wird? |
Verstehe ich das richtig, wenn die Daten über die Debug-Schnittstelle verschickt werden, klappt es, wenn es mit einer eigenen Methode über die API verschickt wird, geht es nicht? |
Ja. Der Export der identischen Datei aus Kurs 42 bricht mit der o.a. Fehlermeldung ab. In den Verzeichnissen (die ja bei der Installation des Servers angelegt wurden) bestehen alle notwendigen Rechte. Ausführung des Programmes als Administrator bringt keine Änderung. Ich bin ratlos. |
Der Fehler scheint darin zu bestehen, dass beim Aufruf des Endpunktes aus dem Programm das temporäre Verzeichnis unter einem anderen Namen als beim Aufruf über die Debug-Schnittstelle angelegt wird (s. Screenshot). Beim Versuch, die Dateien aus dem temporären Verzeichnis zu lesen, wird in beiden Fällen offensichtlich der gleiche Pfad (C:\ProgramData\SVWS-Server\temp\svwsdb_....zip\Blockung.txt) verwendet, was dann zu dem beschriebenen Fehler (Datei nicht gefunden, da das Verzeichnis nicht existiert) führt. |
wurde der Pfad in der Der für den Pfad verantworliche Code ist dieser hier, da fällt mir nichts dran auf: final String tmpDirectory = SVWSKonfiguration.get().getTempPath();
final String tmpFilename = conn.getUser().getConfig().getDBSchema() + "_" + _random.ints(48, 123) // from 0 to z
.filter(i -> ((i <= 57) || (i >= 65)) && ((i <= 90) || (i >= 97))) // filter some unicode characters
.limit(40)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString() + ".zip";
logger.logLn("Erstelle eine temporäres Verzechnis mit dem Inhalt der Zip-Datei unter dem Namen \"" + tmpDirectory + "/" + tmpFilename + "\"");
final Path path = Paths.get(tmpDirectory).resolve(tmpFilename); Dieser Pfad wird dann später mit der |
Ja, aber das hilft auch nicht. Ich habe den Pfad jetzt mal so festgelegt: Die Debug-Schnittstelle macht daraus Im ersten Fall werden die zwei Backslashes am Ende von TempPath (korrekt) durch einen Slash ersetzt, im zweiten Fall durch Backslash plus Slash. Übrigens wird, wenn bereits in TempPath, wie im Opriginal ( Ich könnte mir vorstellen, dass die fehlerhafte Behandlung der Separatoren hier |
lassen Sie mal die abschließenden Slashes weg am Ende von |
Nein, normalerweise nicht. Ich kenne das aber auch nur so, dass Java-Anwendungen Windows-Pfade immer mit Doppel-Backslash brauchen, weil ein Backslash als Escape-Zeichen interpretiert wird. |
Habe ich gemacht, ändert aber nichts. |
Kann man den Code nicht dahingehend ändern, dass die zwei letzten Zeilen vertauscht werden? Dann wüsste man, wie der ezeugte Pfad genau aussieht.
|
Das habe ich auch nie bezweifelt. Dennoch ist es so, dass der Import aus Kurs 42 mit identischen Einstellungen, offenbar wegen des nicht korrekt gebildeten tempörären Pfades, scheitert. Ich kann auch die gleiche Datei über das Debug-Inteface importieren, obwohl dabei andere Fehler auftreten. Aber das ist eine andere Sache. |
Das Vertauschen ist hier nicht möglich, da die untere Zeile von der oberen abhängt. Insgesamt ist es interessant, dass sich das Verhalten zwischen Delphi und anderen Schnittstellen unterscheidet. Interessant ist auch, dass bei dem Log zu dem Aufruf aus Delphi heraus. die forward-slashes escaped sind. Das ist laut RFC 8259 in Punkt 7 für JSON optional. Unsere Java-Implementierung macht dies z.B. per Default nicht. In der svwsconfig.json habe ich das auch nicht gesehen, so dass dieses Verhalten erstmal irritierend ist. Wenn ich das korrekt im Kopf habe, dann fügt Delphi bei forward slashes ein back-slash als escape character hinzu. Könnte das etwas damit zu tun haben? Ansonsten können wir das Verhalten bei uns leider in mehreren Konstellationen nicht nachstellen. Allerdings wird in unserem Projekt auch kein Delphi verwendet... |
Delphi macht das auch nicht und hat mit der Sache, wenn ich das richtig sehe, auch nichts zu tun, weil der temporäre Pfad vom Server und nicht von Kurs 42 angelegt wird. |
Kannst du bitte mal probieren den TempPath in der svwsconfig.json zu verändern. |
Letzte Überlegung für heute: |
Diesen Fehler bekomme ich, wenn ich in dem ZIP einen Unterordner anlege und die txts darin sind und nicht auf der obersten Ebene im ZIP. Kann es sein, dass Kurs42 diesen Unterordner im Zip anlegt? Und in der Datei die manuell genutzt wird, kein Unterordner existiert? |
c:\Users\Walter\AppData\Local\Temp\Kurs42.zip Die Zip-Datei enthält keine Unterordner. Bei Bedarf kann ich die gerne mal mischicken. |
Habe ich alles schon gemacht. Keine Änderung. |
Das verstehe ich nicht. Wieso beeinflusst die Bildung des Strings für die Logausgabe die Berechnung des Pfades?
Mein Vorschlag bedeutet nur, die Logausgabe nach der endgültigen Berechnung des Pfades zu erzeugen. |
Es liegt nicht an den Pfadangaben. |
Mal ne blöde Frage: Wie lautet der volle Pfad zur Blockung.txt? |
Es gibt keine Pfade in der Zip-Datei, wie man dem Directory entnehmen kann:
Das muss die Server-Seite beantworten. Ich habe die anonymisierte (ansonsten echte) Blockungsdatei mal angehängt: |
Ich meinte den Pfad, wo der SVWS die Datei sucht. Und zwar vom C: an. Welche Datenbank brauche ich um die Datei einlesen zu können? Und ohne die Blockunsgdatei geht es ja auch nicht. |
hier: c:\Users\Walter\AppData\Local\Temp\Kurs42.zip. Das scheint ja auch kein Problem zu sein, weil der Server ja die Datei, wie FrankPfotenhauer schrieb, offenbar findet.
Ich kann gerne eine anonymisierte Access-DB mit zugehöriger Blockung und Programm auf meiner Homepage ablegen, wenn das weiterhilft. |
Meine Idee war, dass mit dem doch recht langem temporärem Verzeichnisnamen nach dem Entpacken der Zip-Datei möglicherweise die max. Pfadlänge von 255 Zeichen unter Windows überschritten wird. Aber das erklärt nicht, warum es über die SwaggerUI und mit Bruno funktioniert. Dürfte es dann nämlich auch nicht. |
Wer oder was ist Bruno?
Sehe ich auch so. Deshalb mein Angebot. Möglicherweise kann man das dann mal im Debugger laufen lassen. |
https://www.usebruno.com/ -> Ein Api-Client |
Ich habe versucht, über die REST-Schnittstelle eine Blockung in die DB zu exportieren. Das ist misslungen. Der Dateiname, wie verlangt, im Body.
Hier die Rückmeldung:
https://localhost/db/..../datenaustausch/gost/kurs42/import/zip
REST-Fehler: 415, Unsupported Media Type
C:\Users\Walter\AppData\Local\Temp\Kurs42.zip
Bezieht sich die Fehlermeldung auf das Format der zip-Datei oder das Format einer der in der Datei enthaltenen Textdateien?
The text was updated successfully, but these errors were encountered: