From 66635ca47990bffbe454898ce8039ce6bfc78f33 Mon Sep 17 00:00:00 2001 From: Anoop Krishnakumar Date: Thu, 15 Apr 2021 09:45:52 -0400 Subject: [PATCH] use setter method to get the type of property --- .../tika/deployment/TikaProcessor.java | 25 ++++++++++------ .../tika/deployment/TikaProcessorTest.java | 29 +++++++++++++++++++ 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/extensions/tika/deployment/src/main/java/io/quarkus/tika/deployment/TikaProcessor.java b/extensions/tika/deployment/src/main/java/io/quarkus/tika/deployment/TikaProcessor.java index 3c9e19e25e4b1..c78ca1f48bc88 100644 --- a/extensions/tika/deployment/src/main/java/io/quarkus/tika/deployment/TikaProcessor.java +++ b/extensions/tika/deployment/src/main/java/io/quarkus/tika/deployment/TikaProcessor.java @@ -1,5 +1,6 @@ package io.quarkus.tika.deployment; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -222,18 +223,24 @@ private static Class loadParserClass(String parserName) { private static String getParserParamType(String parserName, String paramName) { try { Class parserClass = loadParserClass(parserName); - String paramType = parserClass.getMethod("get" + capitalize(paramName), new Class[] {}).getReturnType() - .getSimpleName().toLowerCase(); - if (paramType.equals(boolean.class.getSimpleName())) { - // TikaConfig Param class does not recognize 'boolean', only 'bool' - // This whole reflection code is temporary anyway - paramType = "bool"; + Method[] methods = parserClass.getMethods(); + String setterMethodName = "set" + capitalize(paramName); + String paramType = null; + for (Method method : methods) { + if (method.getName().equals(setterMethodName) && method.getParameterCount() == 1) { + paramType = method.getParameterTypes()[0].getSimpleName().toLowerCase(); + if (paramType.equals(boolean.class.getSimpleName())) { + // TikaConfig Param class does not recognize 'boolean', only 'bool' + // This whole reflection code is temporary anyway + paramType = "bool"; + } + return paramType; + } } - return paramType; } catch (Throwable t) { - final String errorMessage = "Parser " + parserName + " has no " + paramName + " property"; - throw new TikaParseException(errorMessage); + throw new TikaParseException(String.format("Parser %s has no %s property", parserName, paramName)); } + throw new TikaParseException(String.format("Parser %s has no %s property", parserName, paramName)); } public static class TikaParserParameter { diff --git a/extensions/tika/deployment/src/test/java/io/quarkus/tika/deployment/TikaProcessorTest.java b/extensions/tika/deployment/src/test/java/io/quarkus/tika/deployment/TikaProcessorTest.java index 46336f91a5c21..df84fce0280c5 100644 --- a/extensions/tika/deployment/src/test/java/io/quarkus/tika/deployment/TikaProcessorTest.java +++ b/extensions/tika/deployment/src/test/java/io/quarkus/tika/deployment/TikaProcessorTest.java @@ -66,6 +66,35 @@ public void testPdfParserConfig() throws Exception { assertEquals("true", parserConfig.get(pdfParserFullName).get(0).getValue()); } + @Test + public void testTesseractParserConfig() throws Exception { + String ocrParserFullName = "org.apache.tika.parser.ocr.TesseractOCRParser"; + Map> parserConfig = getParserConfig(null, "ocr", + Collections.singletonMap("ocr", + Collections.singletonMap("tesseract-path", "/opt/tesseract/")), + Collections.singletonMap("ocr", ocrParserFullName)); + assertEquals(1, parserConfig.size()); + + assertEquals(1, parserConfig.get(ocrParserFullName).size()); + assertEquals("tesseractPath", parserConfig.get(ocrParserFullName).get(0).getName()); + assertEquals("/opt/tesseract/", parserConfig.get(ocrParserFullName).get(0).getValue()); + } + + @Test + public void testUnknownParserConfig() throws Exception { + String ocrParserFullName = "org.apache.tika.parser.ocr.TesseractOCRParser"; + try { + Map> parserConfig = getParserConfig(null, "ocr", + Collections.singletonMap("ocr", + Collections.singletonMap("tesseract-unknown-opt", "/opt/tesseract/")), + Collections.singletonMap("ocr", ocrParserFullName)); + } catch (Exception e) { + // expected + assertEquals("Parser org.apache.tika.parser.ocr.TesseractOCRParser has no tesseractUnknownOpt property", + e.getMessage()); + } + } + @Test public void testUnresolvableCustomAbbreviation() throws Exception { try {