You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2021/04/08 11:33:57 UTC

[syncope] 01/03: Upgrading PDFBox

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit bbccbfcd83caeebe9c6fd7f83550731ae6a2e3a3
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Apr 8 12:14:09 2021 +0200

    Upgrading PDFBox
---
 client/idrepo/common-ui/pom.xml                    |  5 +++++
 .../html/form/preview/BinaryCertPreviewer.java     |  5 ++---
 .../html/form/preview/BinaryImagePreviewer.java    |  5 ++---
 .../html/form/preview/BinaryPDFPreviewer.java      |  8 ++++----
 ...ctBinaryPreviewer.java => BinaryPreviewer.java} |  6 +++---
 .../html/form/preview/BinaryTextPreviewer.java     |  5 ++---
 .../markup/html/form/preview/DefaultPreviewer.java |  2 +-
 client/idrepo/console/pom.xml                      |  5 -----
 .../client/console/commons/PreviewUtils.java       | 22 ++++++++++++----------
 .../init/ClassPathScanImplementationLookup.java    | 14 +++++++-------
 .../wicket/markup/html/form/BinaryFieldPanel.java  | 16 ++++------------
 .../client/enduser/commons/PreviewUtils.java       | 22 ++++++++++++----------
 .../init/ClassPathScanImplementationLookup.java    | 16 ++++++++--------
 .../enduser/markup/html/form/BinaryFieldPanel.java | 16 ++++------------
 .../client/console/panels/NewBpmnProcess.java      | 10 +++++-----
 pom.xml                                            |  2 +-
 16 files changed, 72 insertions(+), 87 deletions(-)

diff --git a/client/idrepo/common-ui/pom.xml b/client/idrepo/common-ui/pom.xml
index 583c570..abcd893 100644
--- a/client/idrepo/common-ui/pom.xml
+++ b/client/idrepo/common-ui/pom.xml
@@ -96,6 +96,11 @@ under the License.
     </dependency>
 
     <dependency>
+      <groupId>org.apache.pdfbox</groupId>
+      <artifactId>pdfbox</artifactId>
+    </dependency>
+      
+    <dependency>
       <groupId>org.apache.syncope.common.keymaster</groupId>
       <artifactId>syncope-common-keymaster-client-api</artifactId>
       <version>${project.version}</version>
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryCertPreviewer.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryCertPreviewer.java
similarity index 92%
rename from client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryCertPreviewer.java
rename to client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryCertPreviewer.java
index 1803f78..1b2ed20 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryCertPreviewer.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryCertPreviewer.java
@@ -16,9 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.syncope.client.console.wicket.markup.html.form.preview;
+package org.apache.syncope.client.ui.commons.markup.html.form.preview;
 
-import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
 import java.io.ByteArrayInputStream;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
@@ -32,7 +31,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
 
 @BinaryPreview(mimeTypes = { "application/x-x509-ca-cert", "application/x-x509-user-cert", "application/pkix-cert" })
-public class BinaryCertPreviewer extends AbstractBinaryPreviewer {
+public class BinaryCertPreviewer extends BinaryPreviewer {
 
     private static final long serialVersionUID = -5843835939538055110L;
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryImagePreviewer.java
similarity index 89%
rename from client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.java
rename to client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryImagePreviewer.java
index 7397462..c720cf1 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryImagePreviewer.java
@@ -16,9 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.syncope.client.console.wicket.markup.html.form.preview;
+package org.apache.syncope.client.ui.commons.markup.html.form.preview;
 
-import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
 import org.apache.syncope.client.ui.commons.annotations.BinaryPreview;
 import org.apache.wicket.Component;
 import org.apache.wicket.extensions.markup.html.image.resource.ThumbnailImageResource;
@@ -27,7 +26,7 @@ import org.apache.wicket.request.resource.DynamicImageResource;
 import org.apache.wicket.request.resource.IResource;
 
 @BinaryPreview(mimeTypes = { "image/jpeg", "image/png", "image/gif", "image/bmp", "image/x-png", "image/vnd.wap.wbmp" })
-public class BinaryImagePreviewer extends AbstractBinaryPreviewer {
+public class BinaryImagePreviewer extends BinaryPreviewer {
 
     private static final long serialVersionUID = 3338812359368457349L;
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryPDFPreviewer.java
similarity index 94%
rename from client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.java
rename to client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryPDFPreviewer.java
index f815904..d41b0c5 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryPDFPreviewer.java
@@ -16,9 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.syncope.client.console.wicket.markup.html.form.preview;
+package org.apache.syncope.client.ui.commons.markup.html.form.preview;
 
-import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
 import java.awt.Graphics2D;
 import java.awt.RenderingHints;
 import java.awt.image.BufferedImage;
@@ -27,6 +26,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.Serializable;
 import java.time.Instant;
+import org.apache.pdfbox.Loader;
 import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.io.MemoryUsageSetting;
 import org.apache.pdfbox.pdmodel.DefaultResourceCache;
@@ -43,7 +43,7 @@ import org.apache.wicket.request.resource.DynamicImageResource;
 import org.apache.wicket.request.resource.IResource;
 
 @BinaryPreview(mimeTypes = { "application/pdf" })
-public class BinaryPDFPreviewer extends AbstractBinaryPreviewer {
+public class BinaryPDFPreviewer extends BinaryPreviewer {
 
     private static final long serialVersionUID = -6606409541566687016L;
 
@@ -64,7 +64,7 @@ public class BinaryPDFPreviewer extends AbstractBinaryPreviewer {
         firstPage = null;
 
         try (InputStream bais = new ByteArrayInputStream(uploadedBytes);
-                PDDocument document = PDDocument.load(bais, MemoryUsageSetting.setupTempFileOnly())) {
+                PDDocument document = Loader.loadPDF(bais, MemoryUsageSetting.setupTempFileOnly())) {
 
             document.setResourceCache(new DefaultResourceCache() {
 
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryPreviewer.java
similarity index 89%
rename from client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.java
rename to client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryPreviewer.java
index 21ba718..29f79f9 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryPreviewer.java
@@ -24,15 +24,15 @@ import org.apache.wicket.markup.html.panel.Panel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class AbstractBinaryPreviewer extends Panel {
+public abstract class BinaryPreviewer extends Panel {
 
-    protected static final Logger LOG = LoggerFactory.getLogger(AbstractBinaryPreviewer.class);
+    protected static final Logger LOG = LoggerFactory.getLogger(BinaryPreviewer.class);
 
     private static final long serialVersionUID = -2482706463911903025L;
 
     protected final String mimeType;
 
-    public AbstractBinaryPreviewer(final String id, final String mimeType) {
+    public BinaryPreviewer(final String id, final String mimeType) {
         super(id);
         this.mimeType = mimeType;
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryTextPreviewer.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryTextPreviewer.java
similarity index 93%
rename from client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryTextPreviewer.java
rename to client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryTextPreviewer.java
index fe893d7..5632cea 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryTextPreviewer.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/BinaryTextPreviewer.java
@@ -16,9 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.syncope.client.console.wicket.markup.html.form.preview;
+package org.apache.syncope.client.ui.commons.markup.html.form.preview;
 
-import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -34,7 +33,7 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.util.io.IOUtils;
 
 @BinaryPreview(mimeTypes = { "application/json", "application/xml" })
-public class BinaryTextPreviewer extends AbstractBinaryPreviewer {
+public class BinaryTextPreviewer extends BinaryPreviewer {
 
     private static final long serialVersionUID = 3808379310090668773L;
 
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.java
index 74a81c1..bf7e13b 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.java
@@ -22,7 +22,7 @@ import org.apache.syncope.client.ui.commons.annotations.BinaryPreview;
 import org.apache.wicket.Component;
 
 @BinaryPreview(mimeTypes = {})
-public class DefaultPreviewer extends AbstractBinaryPreviewer {
+public class DefaultPreviewer extends BinaryPreviewer {
 
     private static final long serialVersionUID = 3338812359368457349L;
 
diff --git a/client/idrepo/console/pom.xml b/client/idrepo/console/pom.xml
index 8f53c23..db78158 100644
--- a/client/idrepo/console/pom.xml
+++ b/client/idrepo/console/pom.xml
@@ -70,11 +70,6 @@ under the License.
     </dependency>
 
     <dependency>
-      <groupId>org.apache.pdfbox</groupId>
-      <artifactId>pdfbox</artifactId>
-    </dependency>
-      
-    <dependency>
       <groupId>org.webjars</groupId>
       <artifactId>font-awesome</artifactId>
     </dependency>
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
index 002d4f9..e1785a7 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
@@ -20,33 +20,35 @@ package org.apache.syncope.client.console.commons;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
-import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
+import org.apache.syncope.client.ui.commons.markup.html.form.preview.BinaryPreviewer;
 import org.apache.syncope.client.ui.commons.markup.html.form.preview.DefaultPreviewer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.ClassUtils;
 
 public class PreviewUtils {
 
+    protected static final Logger LOG = LoggerFactory.getLogger(PreviewUtils.class);
+
     @Autowired
     private ClassPathScanImplementationLookup lookup;
 
-    public static AbstractBinaryPreviewer getDefaultPreviewer(final String mimeType) {
-        return new DefaultPreviewer("previewer", mimeType);
-    }
-
-    public AbstractBinaryPreviewer getPreviewer(final String mimeType) {
+    public BinaryPreviewer getPreviewer(final String mimeType) {
         if (StringUtils.isBlank(mimeType)) {
-            return null;
+            return new DefaultPreviewer("previewer", mimeType);
         }
 
-        Class<? extends AbstractBinaryPreviewer> previewer = lookup.getPreviewerClass(mimeType);
+        Class<? extends BinaryPreviewer> previewer = lookup.getPreviewerClass(mimeType);
         try {
             return previewer == null
-                    ? null
+                    ? new DefaultPreviewer("previewer", mimeType)
                     : ClassUtils.getConstructorIfAvailable(previewer, String.class, String.class).
                             newInstance(new Object[] { "previewer", mimeType });
         } catch (Exception e) {
-            return null;
+            LOG.error("While getting BinaryPreviewer for {}", mimeType, e);
+
+            return new DefaultPreviewer("previewer", mimeType);
         }
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
index b49ed98..65df3a8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
@@ -41,7 +41,7 @@ import org.apache.syncope.client.console.annotations.IdMPage;
 import org.apache.syncope.client.ui.commons.annotations.Resource;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.ui.commons.panels.BaseSSOLoginFormPanel;
-import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
+import org.apache.syncope.client.ui.commons.markup.html.form.preview.BinaryPreviewer;
 import org.apache.syncope.client.console.widgets.BaseExtWidget;
 import org.apache.syncope.client.console.widgets.ExtAlertWidget;
 import org.apache.syncope.common.lib.policy.AccountRuleConf;
@@ -120,7 +120,7 @@ public class ClassPathScanImplementationLookup {
         ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
 
         scanner.addIncludeFilter(new AssignableTypeFilter(BasePage.class));
-        scanner.addIncludeFilter(new AssignableTypeFilter(AbstractBinaryPreviewer.class));
+        scanner.addIncludeFilter(new AssignableTypeFilter(BinaryPreviewer.class));
         scanner.addIncludeFilter(new AssignableTypeFilter(UserFormFinalizer.class));
         scanner.addIncludeFilter(new AssignableTypeFilter(BaseExtPage.class));
         scanner.addIncludeFilter(new AssignableTypeFilter(BaseExtWidget.class));
@@ -186,8 +186,8 @@ public class ClassPathScanImplementationLookup {
                         } else {
                             idRepoPages.add((Class<? extends BasePage>) clazz);
                         }
-                    } else if (AbstractBinaryPreviewer.class.isAssignableFrom(clazz)) {
-                        addClass(AbstractBinaryPreviewer.class.getName(), clazz);
+                    } else if (BinaryPreviewer.class.isAssignableFrom(clazz)) {
+                        addClass(BinaryPreviewer.class.getName(), clazz);
                     } else if (UserFormFinalizer.class.isAssignableFrom(clazz)) {
                         addClass(UserFormFinalizer.class.getName(), clazz);
                     } else if (BaseSSOLoginFormPanel.class.isAssignableFrom(clazz)) {
@@ -260,11 +260,11 @@ public class ClassPathScanImplementationLookup {
                 collect(Collectors.toList());
     }
 
-    public Class<? extends AbstractBinaryPreviewer> getPreviewerClass(final String mimeType) {
+    public Class<? extends BinaryPreviewer> getPreviewerClass(final String mimeType) {
         LOG.debug("Searching for previewer class for MIME type: {}", mimeType);
 
-        Class<? extends AbstractBinaryPreviewer> previewer = null;
-        for (Class<? extends AbstractBinaryPreviewer> candidate : getClasses(AbstractBinaryPreviewer.class)) {
+        Class<? extends BinaryPreviewer> previewer = null;
+        for (Class<? extends BinaryPreviewer> candidate : getClasses(BinaryPreviewer.class)) {
             LOG.debug("Evaluating previewer class {} for MIME type {}", candidate.getName(), mimeType);
             if (candidate.isAnnotationPresent(BinaryPreview.class)
                     && ArrayUtils.contains(candidate.getAnnotation(BinaryPreview.class).mimeTypes(), mimeType)) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
index decccf0..bc48ae0 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
@@ -29,6 +29,7 @@ import java.io.ByteArrayInputStream;
 import java.util.ArrayList;
 import java.util.Base64;
 import java.util.Locale;
+import java.util.Optional;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
@@ -39,7 +40,7 @@ import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.PreviewUtils;
 import org.apache.syncope.client.ui.commons.HttpResourceStream;
 import org.apache.syncope.client.ui.commons.markup.html.form.FieldPanel;
-import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
+import org.apache.syncope.client.ui.commons.markup.html.form.preview.BinaryPreviewer;
 import org.apache.syncope.client.ui.commons.markup.html.form.BaseBinaryFieldPanel;
 import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
 import org.apache.syncope.client.ui.commons.rest.ResponseHolder;
@@ -84,7 +85,7 @@ public class BinaryFieldPanel extends BaseBinaryFieldPanel {
 
     private final BinaryFieldDownload fileDownload;
 
-    private final AbstractBinaryPreviewer previewer;
+    private final BinaryPreviewer previewer;
 
     private final IndicatingAjaxLink<Void> resetLink;
 
@@ -280,16 +281,7 @@ public class BinaryFieldPanel extends BaseBinaryFieldPanel {
         String modelObj = model.getObject();
 
         if (StringUtils.isNotBlank(modelObj)) {
-            final Component panelPreview;
-            if (previewer == null) {
-                panelPreview = PreviewUtils.getDefaultPreviewer(mimeType);
-            } else {
-                panelPreview = previewer.preview(modelObj);
-            }
-
-            if (panelPreview != null) {
-                changePreviewer(panelPreview);
-            }
+            Optional.ofNullable(previewer.preview(modelObj)).ifPresent(this::changePreviewer);
         }
 
         downloadLink.setEnabled(StringUtils.isNotBlank(modelObj));
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/commons/PreviewUtils.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/commons/PreviewUtils.java
index 0bde2a5..c0dbe05 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/commons/PreviewUtils.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/commons/PreviewUtils.java
@@ -20,33 +20,35 @@ package org.apache.syncope.client.enduser.commons;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.enduser.init.ClassPathScanImplementationLookup;
-import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
+import org.apache.syncope.client.ui.commons.markup.html.form.preview.BinaryPreviewer;
 import org.apache.syncope.client.ui.commons.markup.html.form.preview.DefaultPreviewer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.ClassUtils;
 
 public class PreviewUtils {
 
+    protected static final Logger LOG = LoggerFactory.getLogger(PreviewUtils.class);
+
     @Autowired
     private ClassPathScanImplementationLookup lookup;
 
-    public static AbstractBinaryPreviewer getDefaultPreviewer(final String mimeType) {
-        return new DefaultPreviewer("previewer", mimeType);
-    }
-
-    public AbstractBinaryPreviewer getPreviewer(final String mimeType) {
+    public BinaryPreviewer getPreviewer(final String mimeType) {
         if (StringUtils.isBlank(mimeType)) {
-            return null;
+            return new DefaultPreviewer("previewer", mimeType);
         }
 
-        Class<? extends AbstractBinaryPreviewer> previewer = lookup.getPreviewerClass(mimeType);
+        Class<? extends BinaryPreviewer> previewer = lookup.getPreviewerClass(mimeType);
         try {
             return previewer == null
-                    ? null
+                    ? new DefaultPreviewer("previewer", mimeType)
                     : ClassUtils.getConstructorIfAvailable(previewer, String.class, String.class).
                             newInstance(new Object[] { "previewer", mimeType });
         } catch (Exception e) {
-            return null;
+            LOG.error("While getting BinaryPreviewer for {}", mimeType, e);
+
+            return new DefaultPreviewer("previewer", mimeType);
         }
     }
 }
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/init/ClassPathScanImplementationLookup.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/init/ClassPathScanImplementationLookup.java
index 9122d8f..c89afff 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/init/ClassPathScanImplementationLookup.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/init/ClassPathScanImplementationLookup.java
@@ -29,7 +29,7 @@ import org.apache.syncope.client.enduser.pages.BaseExtPage;
 import org.apache.syncope.client.ui.commons.annotations.BinaryPreview;
 import org.apache.syncope.client.ui.commons.annotations.ExtPage;
 import org.apache.syncope.client.ui.commons.annotations.Resource;
-import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
+import org.apache.syncope.client.ui.commons.markup.html.form.preview.BinaryPreviewer;
 import org.apache.syncope.client.ui.commons.panels.BaseSSOLoginFormPanel;
 import org.apache.wicket.request.resource.AbstractResource;
 import org.slf4j.Logger;
@@ -48,7 +48,7 @@ public class ClassPathScanImplementationLookup {
 
     private List<Class<? extends AbstractResource>> resources;
 
-    private List<Class<? extends AbstractBinaryPreviewer>> previewers;
+    private List<Class<? extends BinaryPreviewer>> previewers;
 
     private List<Class<? extends BaseExtPage>> extPages;
 
@@ -75,7 +75,7 @@ public class ClassPathScanImplementationLookup {
         scanner.addIncludeFilter(new AssignableTypeFilter(AbstractResource.class));
         scanner.addIncludeFilter(new AssignableTypeFilter(BaseExtPage.class));
         scanner.addIncludeFilter(new AssignableTypeFilter(BaseSSOLoginFormPanel.class));
-        scanner.addIncludeFilter(new AssignableTypeFilter(AbstractBinaryPreviewer.class));
+        scanner.addIncludeFilter(new AssignableTypeFilter(BinaryPreviewer.class));
         scanner.addIncludeFilter(new AssignableTypeFilter(BaseEnduserWebPage.class));
 
         scanner.findCandidateComponents(getBasePackage()).forEach(bd -> {
@@ -98,8 +98,8 @@ public class ClassPathScanImplementationLookup {
                             LOG.error("Could not find annotation {} in {}, ignoring",
                                     Resource.class.getName(), clazz.getName());
                         }
-                    } else if (AbstractBinaryPreviewer.class.isAssignableFrom(clazz)) {
-                        previewers.add((Class<? extends AbstractBinaryPreviewer>) clazz);
+                    } else if (BinaryPreviewer.class.isAssignableFrom(clazz)) {
+                        previewers.add((Class<? extends BinaryPreviewer>) clazz);
                     } else if (BaseSSOLoginFormPanel.class.isAssignableFrom(clazz)) {
                         ssoLoginFormPanels.add((Class<? extends BaseSSOLoginFormPanel>) clazz);
                     } else if (BaseEnduserWebPage.class.isAssignableFrom(clazz)) {
@@ -122,10 +122,10 @@ public class ClassPathScanImplementationLookup {
         LOG.debug("Wicket Resources found: {}", resources);
     }
 
-    public Class<? extends AbstractBinaryPreviewer> getPreviewerClass(final String mimeType) {
+    public Class<? extends BinaryPreviewer> getPreviewerClass(final String mimeType) {
         LOG.debug("Searching for previewer class for MIME type: {}", mimeType);
-        Class<? extends AbstractBinaryPreviewer> previewer = null;
-        for (Class<? extends AbstractBinaryPreviewer> candidate : previewers) {
+        Class<? extends BinaryPreviewer> previewer = null;
+        for (Class<? extends BinaryPreviewer> candidate : previewers) {
             LOG.debug("Evaluating previewer class {} for MIME type {}", candidate.getName(), mimeType);
             if (candidate.isAnnotationPresent(BinaryPreview.class)
                     && ArrayUtils.contains(candidate.getAnnotation(BinaryPreview.class).mimeTypes(), mimeType)) {
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/BinaryFieldPanel.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/BinaryFieldPanel.java
index 7de1299..512283d 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/BinaryFieldPanel.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/BinaryFieldPanel.java
@@ -29,6 +29,7 @@ import java.io.ByteArrayInputStream;
 import java.util.ArrayList;
 import java.util.Base64;
 import java.util.Locale;
+import java.util.Optional;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang3.StringUtils;
@@ -39,7 +40,7 @@ import org.apache.syncope.client.enduser.commons.PreviewUtils;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.ui.commons.markup.html.form.BaseBinaryFieldPanel;
 import org.apache.syncope.client.ui.commons.markup.html.form.FieldPanel;
-import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
+import org.apache.syncope.client.ui.commons.markup.html.form.preview.BinaryPreviewer;
 import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
 import org.apache.syncope.client.ui.commons.rest.ResponseHolder;
 import org.apache.wicket.Component;
@@ -83,7 +84,7 @@ public class BinaryFieldPanel extends BaseBinaryFieldPanel {
 
     private final AjaxDownload fileDownload;
 
-    private final AbstractBinaryPreviewer previewer;
+    private final BinaryPreviewer previewer;
 
     private final IndicatingAjaxLink<Void> resetLink;
 
@@ -279,16 +280,7 @@ public class BinaryFieldPanel extends BaseBinaryFieldPanel {
         String modelObj = model.getObject();
 
         if (StringUtils.isNotBlank(modelObj)) {
-            final Component panelPreview;
-            if (previewer == null) {
-                panelPreview = PreviewUtils.getDefaultPreviewer(mimeType);
-            } else {
-                panelPreview = previewer.preview(modelObj);
-            }
-
-            if (panelPreview != null) {
-                changePreviewer(panelPreview);
-            }
+            Optional.ofNullable(previewer.preview(modelObj)).ifPresent(this::changePreviewer);
         }
 
         downloadLink.setEnabled(StringUtils.isNotBlank(modelObj));
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/NewBpmnProcess.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/NewBpmnProcess.java
index 6652874..5b4a196 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/NewBpmnProcess.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/NewBpmnProcess.java
@@ -19,13 +19,13 @@
 package org.apache.syncope.client.console.panels;
 
 import java.io.Serializable;
+import java.nio.charset.StandardCharsets;
 import javax.ws.rs.core.MediaType;
 import org.apache.commons.io.IOUtils;
-import org.apache.pdfbox.util.Charsets;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
-import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.rest.BpmnProcessRestClient;
+import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
@@ -60,7 +60,7 @@ public class NewBpmnProcess extends TogglePanel<Serializable> {
                     BpmnProcessRestClient.setDefinition(MediaType.APPLICATION_XML_TYPE, key.getModelObject(),
                             IOUtils.toString(
                                     NewBpmnProcess.class.getResourceAsStream("empty.bpmn20.xml"),
-                                    Charsets.UTF_8.name()).replaceAll("%KEY%", key.getModelObject()));
+                                    StandardCharsets.UTF_8).replaceAll("%KEY%", key.getModelObject()));
 
                     key.getModel().setObject(null);
                     SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
@@ -70,12 +70,12 @@ public class NewBpmnProcess extends TogglePanel<Serializable> {
                     LOG.error("While creating new BPMN process", e);
                     SyncopeConsoleSession.get().onException(e);
                 }
-                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                ((BaseWebPage) pageRef.getPage()).getNotificationPanel().refresh(target);
             }
 
             @Override
             protected void onError(final AjaxRequestTarget target) {
-                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                ((BaseWebPage) pageRef.getPage()).getNotificationPanel().refresh(target);
             }
         });
     }
diff --git a/pom.xml b/pom.xml
index 81e6d7e..fba2ab3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1888,7 +1888,7 @@ under the License.
       <dependency>
         <groupId>org.apache.pdfbox</groupId>
         <artifactId>pdfbox</artifactId>
-        <version>2.0.23</version>
+        <version>3.0.0-RC1</version>
       </dependency>
 
       <dependency>