From 6009309445cbab4de8042c8c62184892683b5898 Mon Sep 17 00:00:00 2001 From: netconomy Date: Fri, 7 Dec 2007 10:47:04 +0000 Subject: neu: CaptionNotFoundException 701 in BinarySignature wenn zuwinig Platz, verbessertes Ex Handling git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@235 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../java/at/gv/egiz/pdfas/commandline/Main.java | 46 +++++++++-------- .../at/gv/egiz/pdfas/exceptions/ErrorCode.java | 1 + .../gv/egiz/pdfas/exceptions/ErrorCodeHelper.java | 58 +++++++++++++++++++++- .../exceptions/pdf/CaptionNotFoundException.java | 55 ++++++++++++++++++++ .../at/gv/egiz/pdfas/impl/api/CheckHelper.java | 2 +- .../wag/egov/egiz/pdf/BinarySignature.java | 11 +++- 6 files changed, 147 insertions(+), 26 deletions(-) create mode 100644 src/main/java/at/gv/egiz/pdfas/exceptions/pdf/CaptionNotFoundException.java diff --git a/src/main/java/at/gv/egiz/pdfas/commandline/Main.java b/src/main/java/at/gv/egiz/pdfas/commandline/Main.java index 415c1fd..147b540 100644 --- a/src/main/java/at/gv/egiz/pdfas/commandline/Main.java +++ b/src/main/java/at/gv/egiz/pdfas/commandline/Main.java @@ -773,28 +773,30 @@ public abstract class Main */ protected static void printPresentableException(final PdfAsException e) { - if (e.getErrorCode() == ErrorCode.PLACEHOLDER_EXCEPTION) - { - PlaceholderException phe = null; - if (e instanceof PlaceholderException) - { - phe = (PlaceholderException) e; - } - else - { - phe = (PlaceholderException) e.getCause(); - } - - System.err.println("Der Platzhalter des Feldes " + phe.getField() + " ist um " + phe.getMissing() + " Bytes zu kurz. "); - } - - System.err.println("Fehler " + e.getErrorCode() + ": " + ErrorCodeHelper.getMessageForErrorCode(e.getErrorCode())); - - if (e instanceof ExternalErrorException) - { - ExternalErrorException eee = (ExternalErrorException) e; - System.err.println("Externer Fehlergrund: " + eee.getExternalErrorCode() + ": " + eee.getExternalErrorMessage()); - } + String errorMessage = ErrorCodeHelper.formErrorMessage(e); + System.err.println(errorMessage); +// if (e.getErrorCode() == ErrorCode.PLACEHOLDER_EXCEPTION) +// { +// PlaceholderException phe = null; +// if (e instanceof PlaceholderException) +// { +// phe = (PlaceholderException) e; +// } +// else +// { +// phe = (PlaceholderException) e.getCause(); +// } +// +// System.err.println("Der Platzhalter des Feldes " + phe.getField() + " ist um " + phe.getMissing() + " Bytes zu kurz. "); +// } +// +// System.err.println("Fehler " + e.getErrorCode() + ": " + ErrorCodeHelper.getMessageForErrorCode(e.getErrorCode())); +// +// if (e instanceof ExternalErrorException) +// { +// ExternalErrorException eee = (ExternalErrorException) e; +// System.err.println("Externer Fehlergrund: " + eee.getExternalErrorCode() + ": " + eee.getExternalErrorMessage()); +// } logger_.error(e); } diff --git a/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCode.java b/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCode.java index dcb5f30..d2345c8 100644 --- a/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCode.java +++ b/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCode.java @@ -48,6 +48,7 @@ public final class ErrorCode public static final int SESSION_EXPIRED = 600; public static final int PLACEHOLDER_EXCEPTION = 700; + public static final int CAPTION_NOT_FOUND_EXCEPTION = 701; diff --git a/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCodeHelper.java b/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCodeHelper.java index 4144a10..5b37bdf 100644 --- a/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCodeHelper.java +++ b/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCodeHelper.java @@ -6,13 +6,17 @@ package at.gv.egiz.pdfas.exceptions; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import at.gv.egiz.pdfas.api.exceptions.PdfAsException; +import at.gv.egiz.pdfas.exceptions.external.ExternalErrorException; +import at.gv.egiz.pdfas.exceptions.pdf.CaptionNotFoundException; import at.knowcenter.wag.egov.egiz.cfg.SettingsReader; +import at.knowcenter.wag.egov.egiz.exceptions.PlaceholderException; import at.knowcenter.wag.egov.egiz.exceptions.SettingNotFoundException; import at.knowcenter.wag.egov.egiz.exceptions.SettingsException; /** * @author wprinz - * + * */ public class ErrorCodeHelper { @@ -40,4 +44,56 @@ public class ErrorCodeHelper return null; } + /** + * Forms a speaking textual error message for the given PdfAsException. + * + * @param e + * The PdfAsException to be formed into a speaking text. + * @return Returns the speaking error message explaining the PdfAsException. + */ + public static String formErrorMessage(PdfAsException e) + { + String message = "Fehler " + e.getErrorCode() + ":"; + + if (e.getErrorCode() == ErrorCode.PLACEHOLDER_EXCEPTION) + { + PlaceholderException phe = null; + if (e instanceof PlaceholderException) + { + phe = (PlaceholderException) e; + } + else + { + phe = (PlaceholderException) e.getCause(); + } + + message += " Der Platzhalter des Feldes " + phe.getField() + " ist um " + phe.getMissing() + " Bytes zu kurz."; + } + + if (e.getErrorCode() == ErrorCode.CAPTION_NOT_FOUND_EXCEPTION) + { + CaptionNotFoundException cnfe = null; + if (e instanceof CaptionNotFoundException) + { + cnfe = (CaptionNotFoundException)e; + } + else + { + cnfe = (CaptionNotFoundException)e.getCause(); + } + + message += " Die Überschrift (Caption/Label) \"" + cnfe.getCaption() + "\" wurde nicht wiedergefunden."; + } + + message += " " + ErrorCodeHelper.getMessageForErrorCode(e.getErrorCode()); + + if (e instanceof ExternalErrorException) + { + ExternalErrorException eee = (ExternalErrorException) e; + message += " Externer Fehlergrund: " + eee.getExternalErrorCode() + ": " + eee.getExternalErrorMessage(); + } + + return message; + } + } diff --git a/src/main/java/at/gv/egiz/pdfas/exceptions/pdf/CaptionNotFoundException.java b/src/main/java/at/gv/egiz/pdfas/exceptions/pdf/CaptionNotFoundException.java new file mode 100644 index 0000000..ca0510b --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/exceptions/pdf/CaptionNotFoundException.java @@ -0,0 +1,55 @@ +/** + * + */ +package at.gv.egiz.pdfas.exceptions.pdf; + +import at.gv.egiz.pdfas.exceptions.ErrorCode; +import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException; + +/** + * Exception thrown when a caption ("label") is not found in the content stream + * when determining the placeholders. + * + *

+ * This usually happens when the space for a caption is too small. Then the + * caption is wrapped into two lines and usually the separating whitespace is + * lost thus the BinarySignature is unable to find the caption String. + *

+ * + * @author wprinz + */ +public class CaptionNotFoundException extends PDFDocumentException +{ + + /** + * SVUID. + */ + private static final long serialVersionUID = -8959043531007857665L; + + /** + * The problematic caption. + */ + protected String caption = null; + + /** + * Constructor. + * + * @param caption + * The problematic caption. + */ + public CaptionNotFoundException(String caption) + { + super(ErrorCode.CAPTION_NOT_FOUND_EXCEPTION, "Caption not found in content stream. caption = " + caption); + this.caption = caption; + } + + /** + * Returns the problematic caption. + * + * @return Returns the problematic caption. + */ + public String getCaption() + { + return this.caption; + } +} diff --git a/src/main/java/at/gv/egiz/pdfas/impl/api/CheckHelper.java b/src/main/java/at/gv/egiz/pdfas/impl/api/CheckHelper.java index 467113f..9daae59 100644 --- a/src/main/java/at/gv/egiz/pdfas/impl/api/CheckHelper.java +++ b/src/main/java/at/gv/egiz/pdfas/impl/api/CheckHelper.java @@ -181,7 +181,7 @@ public final class CheckHelper } catch (PDFDocumentException e) { - String msg = "The signaturePosition string is not valid. " + signaturePositioning; + String msg = "The signaturePosition is not valid. Please check the provided parameters."; log.error(msg, e); throw new IllegalArgumentException(msg); } diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java index 7a5af6b..44a13a4 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java @@ -37,6 +37,7 @@ import java.util.Iterator; import java.util.List; import at.gv.egiz.pdfas.exceptions.ErrorCode; +import at.gv.egiz.pdfas.exceptions.pdf.CaptionNotFoundException; import at.gv.egiz.pdfas.exceptions.pdf.KZSettingNotFoundException; import at.gv.egiz.pdfas.framework.input.PdfDataSource; import at.gv.egiz.pdfas.framework.output.DataSink; @@ -829,9 +830,10 @@ public abstract class BinarySignature * The field definitions. * @throws IOException * @throws SettingNotFoundException + * @throws CaptionNotFoundException */ protected static void createEgizDict(PdfStamper stamper, PdfTemplate table_template, IncrementalUpdateInformation iui, List variable_field_definitions, List all_field_definitions) - throws IOException, SettingNotFoundException + throws IOException, SettingNotFoundException, CaptionNotFoundException { // iui.temp_ir = table_template.getIndirectReference(); iui.temp_ir_number = table_template.getIndirectReference().getNumber(); @@ -1314,8 +1316,9 @@ public abstract class BinarySignature * where varaible strings are. * @return Returns the list of ReplaceInfo objects specifying the variable * areas. + * @throws CaptionNotFoundException */ - protected static List determineReplacesInContentStream(final byte[] pdf, int begin, int end, List field_definitions) + protected static List determineReplacesInContentStream(final byte[] pdf, int begin, int end, List field_definitions) throws CaptionNotFoundException { List replaces = new ArrayList(); try @@ -1336,6 +1339,10 @@ public abstract class BinarySignature byte[] caption = sfd.caption.getBytes("ISO-8859-1"); int caption_index = findIndex(strings, caption); + if (caption_index < 0) + { + throw new CaptionNotFoundException(sfd.caption); + } int start_index = skipStrings(strings, caption_index, caption); int next_index = findFirstNotPlaceholder(strings, start_index); -- cgit v1.2.3