diff --git a/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstraints.java b/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstraints.java
index 448e7e0..da95c42 100644
--- a/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstraints.java
+++ b/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstraints.java
@@ -20,9 +20,6 @@
 
 public class JSONConstraints {
 
-    private JSONConstraints() {
-    }
-
     public static final int MAX_OBJECT_SIZE;
     public static final int MAX_ARRAY_SIZE;
     public static final int MAX_DEPTH;
@@ -47,7 +44,7 @@
                     maxObjectSize = MAX_OBJECT_SIZE_DEFAULT;
                 }
             }
-        } catch (Exception e) {
+        } catch (NumberFormatException e) {
             // ignore
         }
         MAX_OBJECT_SIZE = maxObjectSize;
@@ -63,7 +60,7 @@
                     maxArraySize = MAX_ARRAY_SIZE_DEFAULT;
                 }
             }
-        } catch (Exception e) {
+        } catch (NumberFormatException e) {
             // ignore
         }
         MAX_ARRAY_SIZE = maxArraySize;
@@ -79,9 +76,12 @@
                     maxDepth = MAX_DEPTH_DEFAULT;
                 }
             }
-        } catch (Exception e) {
+        } catch (NumberFormatException e) {
             // ignore
         }
         MAX_DEPTH = maxDepth;
     }
+
+    private JSONConstraints() {
+    }
 }
diff --git a/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConstraints.java b/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConstraints.java
index 25b8a9f..44a8a0f 100644
--- a/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConstraints.java
+++ b/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConstraints.java
@@ -20,9 +20,6 @@
 
 public final class XMLConstraints {
 
-    private XMLConstraints() {
-    }
-
     public static final int MAX_STRING_LENGTH = 100 * 1024;
 
     public static final int MAX_EXTENSIONS_WIDTH;
@@ -46,7 +43,7 @@
                     maxWidth = MAX_EXTENSIONS_WIDTH_DEFAULT;
                 }
             }
-        } catch (Exception e) {
+        } catch (NumberFormatException e) {
             // ignore
         }
         MAX_EXTENSIONS_WIDTH = maxWidth;
@@ -62,9 +59,12 @@
                     maxDepth = MAX_EXTENSIONS_DEPTH_DEFAULT;
                 }
             }
-        } catch (Exception e) {
+        } catch (NumberFormatException e) {
             // ignore
         }
         MAX_EXTENSIONS_DEPTH = maxDepth;
     }
+
+    private XMLConstraints() {
+    }
 }
diff --git a/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AbstractSpringLoginTab.java b/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AbstractSpringLoginTab.java
index 2b510e3..cddf2e9 100644
--- a/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AbstractSpringLoginTab.java
+++ b/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AbstractSpringLoginTab.java
@@ -105,7 +105,7 @@
 
             label.addMouseListener(new MouseAdapter() {
                 private final int defaultDismissDelay = ToolTipManager.sharedInstance().getDismissDelay();
-                private final static int DISMIASS_DELAY = 120 * 1000;
+                private static final int DISMIASS_DELAY = 120 * 1000;
 
                 @Override
                 public void mouseEntered(MouseEvent me) {
diff --git a/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/icons/HelpIcon.java b/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/icons/HelpIcon.java
index 037be5e..0693dae 100644
--- a/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/icons/HelpIcon.java
+++ b/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/icons/HelpIcon.java
@@ -23,73 +23,72 @@
 
 public class HelpIcon extends AbstractWorkbenchIcon {
 
-	public HelpIcon() {
-		super();
-	}
+    public HelpIcon() {
+        super();
+    }
 
-	public HelpIcon(int width, int height) {
-		super(width, height);
-	}
+    public HelpIcon(int width, int height) {
+        super(width, height);
+    }
 
-	public HelpIcon(int width, int height, boolean enabled) {
-		super(width, height, enabled);
-	}
+    public HelpIcon(int width, int height, boolean enabled) {
+        super(width, height, enabled);
+    }
 
-	@Override
-	protected int getOrginalHeight() {
-		return 64;
-	}
+    @Override
+    protected int getOrginalHeight() {
+        return 64;
+    }
 
-	@Override
-	protected int getOrginalWidth() {
-		return 64;
-	}
+    @Override
+    protected int getOrginalWidth() {
+        return 64;
+    }
 
-	@Override
-	protected void paint(Graphics2D g) {
-		GeneralPath shape = new GeneralPath();
+    @Override
+    protected void paint(Graphics2D g) {
+        GeneralPath shape = new GeneralPath();
 
-		shape = new GeneralPath();
-		shape.moveTo(32.0, 0.0);
-		shape.curveTo(14.327, 0.0, 0.0, 14.327, 0.0, 32.0);
-		shape.curveTo(0.0, 49.673, 14.327, 64.0, 32.0, 64.0);
-		shape.curveTo(49.673, 64.0, 64.0, 49.673, 64.0, 32.0);
-		shape.curveTo(64.0, 14.327, 49.673, 0.0, 32.0, 0.0);
-		shape.closePath();
-		shape.moveTo(32.0, 58.0);
-		shape.curveTo(17.641, 58.0, 6.0, 46.359, 6.0, 32.0);
-		shape.curveTo(6.0, 17.64, 17.641, 6.0, 32.0, 6.0);
-		shape.curveTo(46.359, 6.0, 58.0, 17.64, 58.0, 32.0);
-		shape.curveTo(58.0, 46.359, 46.359, 58.0, 32.0, 58.0);
-		shape.closePath();
+        shape.moveTo(32.0, 0.0);
+        shape.curveTo(14.327, 0.0, 0.0, 14.327, 0.0, 32.0);
+        shape.curveTo(0.0, 49.673, 14.327, 64.0, 32.0, 64.0);
+        shape.curveTo(49.673, 64.0, 64.0, 49.673, 64.0, 32.0);
+        shape.curveTo(64.0, 14.327, 49.673, 0.0, 32.0, 0.0);
+        shape.closePath();
+        shape.moveTo(32.0, 58.0);
+        shape.curveTo(17.641, 58.0, 6.0, 46.359, 6.0, 32.0);
+        shape.curveTo(6.0, 17.64, 17.641, 6.0, 32.0, 6.0);
+        shape.curveTo(46.359, 6.0, 58.0, 17.64, 58.0, 32.0);
+        shape.curveTo(58.0, 46.359, 46.359, 58.0, 32.0, 58.0);
+        shape.closePath();
 
-		g.setPaint(getColor());
-		g.fill(shape);
+        g.setPaint(getColor());
+        g.fill(shape);
 
-		shape = new GeneralPath();
-		shape.moveTo(35.153282, 25.48125);
-		shape.lineTo(35.153282, 46.06719);
-		shape.lineTo(35.153282, 48.469532);
-		shape.curveTo(35.153282, 50.871876, 35.817345, 51.282032, 39.704063, 51.282032);
-		shape.lineTo(40.13375, 51.282032);
-		shape.lineTo(40.13375, 53.45);
-		shape.lineTo(24.586876, 53.45);
-		shape.lineTo(24.586876, 51.282032);
-		shape.lineTo(25.016563, 51.282032);
-		shape.curveTo(28.844688, 51.282032, 29.50875, 50.871876, 29.50875, 48.469532);
-		shape.lineTo(29.50875, 46.06719);
-		shape.lineTo(29.50875, 31.73125);
-		shape.curveTo(29.50875, 29.153126, 29.157188, 28.723438, 26.930626, 28.723438);
-		shape.lineTo(23.86422, 28.723438);
-		shape.lineTo(23.86422, 26.145313);
-		shape.closePath();
-		shape.moveTo(32.32125, 10.559376);
-		shape.curveTo(34.254845, 10.559376, 35.817345, 12.1023445, 35.817345, 14.035938);
-		shape.curveTo(35.817345, 15.950001, 34.254845, 17.5125, 32.262657, 17.5125);
-		shape.curveTo(30.407188, 17.5125, 28.844688, 15.891407, 28.844688, 14.035938);
-		shape.curveTo(28.844688, 12.1023445, 30.407188, 10.559376, 32.32125, 10.559376);
-		shape.closePath();
+        shape = new GeneralPath();
+        shape.moveTo(35.153282, 25.48125);
+        shape.lineTo(35.153282, 46.06719);
+        shape.lineTo(35.153282, 48.469532);
+        shape.curveTo(35.153282, 50.871876, 35.817345, 51.282032, 39.704063, 51.282032);
+        shape.lineTo(40.13375, 51.282032);
+        shape.lineTo(40.13375, 53.45);
+        shape.lineTo(24.586876, 53.45);
+        shape.lineTo(24.586876, 51.282032);
+        shape.lineTo(25.016563, 51.282032);
+        shape.curveTo(28.844688, 51.282032, 29.50875, 50.871876, 29.50875, 48.469532);
+        shape.lineTo(29.50875, 46.06719);
+        shape.lineTo(29.50875, 31.73125);
+        shape.curveTo(29.50875, 29.153126, 29.157188, 28.723438, 26.930626, 28.723438);
+        shape.lineTo(23.86422, 28.723438);
+        shape.lineTo(23.86422, 26.145313);
+        shape.closePath();
+        shape.moveTo(32.32125, 10.559376);
+        shape.curveTo(34.254845, 10.559376, 35.817345, 12.1023445, 35.817345, 14.035938);
+        shape.curveTo(35.817345, 15.950001, 34.254845, 17.5125, 32.262657, 17.5125);
+        shape.curveTo(30.407188, 17.5125, 28.844688, 15.891407, 28.844688, 14.035938);
+        shape.curveTo(28.844688, 12.1023445, 30.407188, 10.559376, 32.32125, 10.559376);
+        shape.closePath();
 
-		g.fill(shape);
-	}
+        g.fill(shape);
+    }
 }
