In Allerlei
Hier beim Kunden wird ein Framework eingesetzt, dass eine Art Model Driven Architecture (MDA) darstellt, d.h. aus einem Objektmodell werden dann durch einen Generator die entsprechenden Klassen erzeugt sowie der gesamte Persistenz-Layer, und noch ein paar andere Geschichten dazu (Workflow etc.). Leider hat der Framework einen Bug, der mich heute hart getroffen hat. Wenn man Objekte mit zwei Blobs hat, und die Blobs eine gewisse Größe überschreiten, dann erhält man irgendwann in beiden Blobs die gleiche Größe zurück. Im kleineren Blob sind noch die richtigen Daten drin, aber der Rest ist dann aufgefüllt mit den Daten des zweiten Blobs.
Dummerweise ist das hier in Produktion aufgetreten, und im ersten Blob sind PDF-Dateien. Wenn man die dann verlängert, sagt der Adobe Reader dann “Das ist aber gar kein PDF, das ist kaputt”. Den Bug hab ich reported, aber das hilft mir bei meinem Problem nicht. Daher habe ich dann folgenden Hack eingebaut: Ich suche im Byte-Strom des Blobs nach der Ende-Markierung des PDFs, also ’%%EOF’. Wenn ich das finde, dann werfe ich alles, was danach kommt, weg, und liefere nur bis zu diesen Bytes aus. Und schon funktioniert die Anzeige des PDF wieder. Allerdings hab ich die Suche grausam implementiert, da ein Array von Bytes in Java nicht wirklich gut durchsuchbar ist, ist es eine langweilige und langsame lineare Suche, und auch das Kopieren ist nicht viel besser. Da die PDFs aber recht klein sind (normalerweise < 20kB) ist es nicht ganz so schlimm, der Anwender merkt nix davon.