corrently implement xmp exception

This commit is contained in:
Jochen Stärk
2026-01-08 14:33:16 +01:00
parent 3f433c6868
commit 3d7b3cd252
2 changed files with 19 additions and 23 deletions

View File

@@ -66,7 +66,7 @@ public class PDFValidator extends Validator {
private String Signature; private String Signature;
private String zfXML = null; private String zfXML = null;
protected boolean autoload=true; protected boolean autoload = true;
protected static boolean stringArrayContains(String[] arr, String targetValue) { protected static boolean stringArrayContains(String[] arr, String targetValue) {
return Arrays.asList(arr).contains(targetValue); return Arrays.asList(arr).contains(targetValue);
@@ -134,8 +134,7 @@ public class PDFValidator extends Validator {
if (xmp == null || xmp.isEmpty()) { if (xmp == null || xmp.isEmpty()) {
context.addResultItem(new ValidationResultItem(ESeverity.error, "Invalid XMP Metadata not found") context.addResultItem(new ValidationResultItem(ESeverity.error, "Invalid XMP Metadata not found")
.setSection(17).setPart(EPart.pdf)); .setSection(17).setPart(EPart.pdf));
} } else {
else {
/* /*
* checking for sth like <zf:ConformanceLevel>EXTENDED</zf:ConformanceLevel> * checking for sth like <zf:ConformanceLevel>EXTENDED</zf:ConformanceLevel>
* <zf:DocumentType>INVOICE</zf:DocumentType> * <zf:DocumentType>INVOICE</zf:DocumentType>
@@ -150,14 +149,7 @@ public class PDFValidator extends Validator {
final DocumentBuilder builder = factory.newDocumentBuilder(); final DocumentBuilder builder = factory.newDocumentBuilder();
final InputSource is = new InputSource(new StringReader(xmp)); final InputSource is = new InputSource(new StringReader(xmp));
try { docXMP = builder.parse(is);
docXMP = builder.parse(is);
} catch (Exception e) {
context.addResultItem(
new ValidationResultItem(ESeverity.error, "XMP Metadata: Could not parse XMP metadata")
.setSection(10).setPart(EPart.pdf));
throw e;
}
final XPathFactory xpathFactory = XPathFactory.newInstance(); final XPathFactory xpathFactory = XPathFactory.newInstance();
@@ -273,7 +265,11 @@ public class PDFValidator extends Validator {
.setSection(16).setPart(EPart.pdf)); .setSection(16).setPart(EPart.pdf));
} }
} catch (final SAXException | IOException | ParserConfigurationException | XPathExpressionException e) { } catch (final SAXException e) {
context.addResultItem(
new ValidationResultItem(ESeverity.error, "XMP Metadata: Could not parse XMP metadata (XML invalid)")
.setSection(28).setPart(EPart.pdf));
} catch (IOException | ParserConfigurationException | XPathExpressionException e) {
LOGGER.error(e.getMessage(), e); LOGGER.error(e.getMessage(), e);
} }
} }
@@ -354,23 +350,23 @@ public class PDFValidator extends Validator {
@Override @Override
public void setFilename(String filename) throws IrrecoverableValidationError { public void setFilename(String filename) throws IrrecoverableValidationError {
this.pdfFilename = filename; this.pdfFilename = filename;
if(autoload) { if (autoload) {
try { try {
fileContents=Files.readAllBytes(Paths.get(pdfFilename)); fileContents = Files.readAllBytes(Paths.get(pdfFilename));
} catch (IOException ex) { } catch (IOException ex) {
throw new IrrecoverableValidationError("Could not read file"); throw new IrrecoverableValidationError("Could not read file");
} }
} }
} }
public void setFileContents(byte[] fileContents) { public void setFileContents(byte[] fileContents) {
this.fileContents = fileContents; this.fileContents = fileContents;
} }
public void setFilenameAndContents(String filename, byte[] fileContents) { public void setFilenameAndContents(String filename, byte[] fileContents) {
this.pdfFilename = filename; this.pdfFilename = filename;
this.fileContents = fileContents; this.fileContents = fileContents;
} }
public String getRawXML() { public String getRawXML() {
return zfXML; return zfXML;

View File

@@ -178,7 +178,7 @@ public class PDFValidatorTest extends ResourceCase {
actual = pv.getXMLResult(); actual = pv.getXMLResult();
assertEquals(true, actual assertEquals(true, actual
.contains("<error type=\"10\">XMP Metadata: Could not parse XMP metadata</error>")); .contains("<error type=\"28\">XMP Metadata: Could not parse XMP metadata (XML invalid)</error>"));
} catch (final IrrecoverableValidationError e) { } catch (final IrrecoverableValidationError e) {
// ignore, will be in XML output anyway // ignore, will be in XML output anyway
} }