[OPENJPA-2924] BlacklistClassResolver is improved (#118)

* BlacklistClassResolver is improved

* Comments are addressed
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/util/BlacklistClassResolver.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/BlacklistClassResolver.java
index 7e689db..b6ef8aa 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/BlacklistClassResolver.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/BlacklistClassResolver.java
@@ -18,23 +18,35 @@
  */
 package org.apache.openjpa.util;
 
+import java.util.stream.Stream;
+
 public class BlacklistClassResolver {
+    private static final String MATCH_ANY = "*";
+
     public static final BlacklistClassResolver DEFAULT = new BlacklistClassResolver(
         toArray(System.getProperty(
             "openjpa.serialization.class.blacklist",
             "org.codehaus.groovy.runtime.,org.apache.commons.collections4.functors.,org.apache.xalan")),
         toArray(System.getProperty("openjpa.serialization.class.whitelist")));
 
+    private final boolean allWhite;
+    private final boolean allBlack;
     private final String[] blacklist;
     private final String[] whitelist;
 
     protected BlacklistClassResolver(final String[] blacklist, final String[] whitelist) {
+        allWhite = Stream.of(whitelist).anyMatch(white -> MATCH_ANY.equals(white));
+        allBlack = Stream.of(blacklist).anyMatch(black -> MATCH_ANY.equals(black));
+
         this.whitelist = whitelist;
         this.blacklist = blacklist;
     }
 
     protected boolean isBlacklisted(final String name) {
-        return (whitelist != null && !contains(whitelist, name)) || contains(blacklist, name);
+        if (allWhite || contains(whitelist, name)) {
+            return false;
+        }
+        return allBlack || contains(blacklist, name);
     }
 
     public final String check(final String name) {
@@ -45,15 +57,17 @@
     }
 
     private static String[] toArray(final String property) {
-        return property == null ? null : property.split(" *, *");
+        return property == null
+            ? new String[] {}
+            : Stream.of(property.split(" *, *"))
+                .filter(item -> item != null && !item.isEmpty())
+                .toArray(String[]::new);
     }
 
     private static boolean contains(final String[] list, String name) {
-        if (list != null) {
-            for (final String white : list) {
-                if (name.startsWith(white)) {
-                    return true;
-                }
+        for (final String white : list) {
+            if (name.startsWith(white)) {
+                return true;
             }
         }
         return false;