You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2019/04/12 20:14:06 UTC

[sling-org-apache-sling-app-cms] branch master updated: Cleaning up SonarLint violations and formatting whitespace

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

dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git


The following commit(s) were added to refs/heads/master by this push:
     new 791fff9  Cleaning up SonarLint violations and formatting whitespace
791fff9 is described below

commit 791fff90a51b4a8dc509aad8dcfae5be3a495208
Author: Dan Klco <dk...@apache.org>
AuthorDate: Fri Apr 12 16:13:54 2019 -0400

    Cleaning up SonarLint violations and formatting whitespace
---
 .../apache/sling/cms/ConfigurableJobExecutor.java  |   1 +
 .../org/apache/sling/cms/PageTemplateManager.java  |   1 -
 .../sling/cms/core/i18n/impl/I18NProviderImpl.java |   6 +-
 .../sling/cms/core/insights/impl/FakeRequest.java  |   2 +-
 .../sling/cms/core/insights/impl/FakeResponse.java |  50 ++++++
 .../providers/HTMLValdiatorInsightProvider.java    |  12 +-
 .../impl/providers/PageSpeedInsightProvider.java   |  11 +-
 .../impl/providers/ReadabilityInsightProvider.java |  16 +-
 .../core/internal/filters/CMSSecurityFilter.java   | 194 +++++++++++----------
 .../internal/operations/BulkReplaceOperation.java  |  10 +-
 .../core/internal/rewriter/HTML5Serializer.java    |   4 +-
 .../impl/ReadabilityServiceFactoryImpl.java        |   2 +-
 12 files changed, 192 insertions(+), 117 deletions(-)

diff --git a/api/src/main/java/org/apache/sling/cms/ConfigurableJobExecutor.java b/api/src/main/java/org/apache/sling/cms/ConfigurableJobExecutor.java
index 0804a2f..ec375d8 100644
--- a/api/src/main/java/org/apache/sling/cms/ConfigurableJobExecutor.java
+++ b/api/src/main/java/org/apache/sling/cms/ConfigurableJobExecutor.java
@@ -79,6 +79,7 @@ public abstract class ConfigurableJobExecutor implements JobExecutor {
      */
     public abstract String getTopic();
 
+    @Override
     @SuppressWarnings("deprecation")
     public final JobExecutionResult process(Job job, JobExecutionContext context) {
         ResourceResolver resolver = null;
diff --git a/api/src/main/java/org/apache/sling/cms/PageTemplateManager.java b/api/src/main/java/org/apache/sling/cms/PageTemplateManager.java
index ca397ad..f841540 100644
--- a/api/src/main/java/org/apache/sling/cms/PageTemplateManager.java
+++ b/api/src/main/java/org/apache/sling/cms/PageTemplateManager.java
@@ -18,7 +18,6 @@ package org.apache.sling.cms;
 
 import java.util.List;
 
-import org.apache.sling.cms.PageTemplate;
 import org.osgi.annotation.versioning.ProviderType;
 
 /**
diff --git a/core/src/main/java/org/apache/sling/cms/core/i18n/impl/I18NProviderImpl.java b/core/src/main/java/org/apache/sling/cms/core/i18n/impl/I18NProviderImpl.java
index 32aacb7..0ebc2b3 100644
--- a/core/src/main/java/org/apache/sling/cms/core/i18n/impl/I18NProviderImpl.java
+++ b/core/src/main/java/org/apache/sling/cms/core/i18n/impl/I18NProviderImpl.java
@@ -91,13 +91,13 @@ public class I18NProviderImpl implements I18NProvider {
 
     private final DefaultLocaleResolver defaultLocaleResolver = new DefaultLocaleResolver();
 
-    private volatile LocaleResolver localeResolver = defaultLocaleResolver;
+    private LocaleResolver localeResolver = defaultLocaleResolver;
 
     private final Map<Object, ResourceBundleProvider> providers = new TreeMap<>();
 
-    private volatile RequestLocaleResolver requestLocaleResolver = defaultLocaleResolver;
+    private RequestLocaleResolver requestLocaleResolver = defaultLocaleResolver;
 
-    private volatile ResourceBundleProvider[] sortedProviders = new ResourceBundleProvider[0];
+    private ResourceBundleProvider[] sortedProviders = new ResourceBundleProvider[0];
 
     @Reference(cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC, policyOption = ReferencePolicyOption.GREEDY)
     protected void bindLocaleResolver(final LocaleResolver resolver) {
diff --git a/core/src/main/java/org/apache/sling/cms/core/insights/impl/FakeRequest.java b/core/src/main/java/org/apache/sling/cms/core/insights/impl/FakeRequest.java
index 32c3a4c..78c3234 100644
--- a/core/src/main/java/org/apache/sling/cms/core/insights/impl/FakeRequest.java
+++ b/core/src/main/java/org/apache/sling/cms/core/insights/impl/FakeRequest.java
@@ -249,7 +249,7 @@ public class FakeRequest implements HttpServletRequest {
     }
 
     public String getServletPath() {
-        return path;
+        return this.getRequestURI();
     }
 
     public HttpSession getSession() {
diff --git a/core/src/main/java/org/apache/sling/cms/core/insights/impl/FakeResponse.java b/core/src/main/java/org/apache/sling/cms/core/insights/impl/FakeResponse.java
index 9de5a02..20d445c 100644
--- a/core/src/main/java/org/apache/sling/cms/core/insights/impl/FakeResponse.java
+++ b/core/src/main/java/org/apache/sling/cms/core/insights/impl/FakeResponse.java
@@ -69,53 +69,72 @@ public class FakeResponse implements HttpServletResponse {
         };
     }
 
+    @Override
     public void addCookie(Cookie cookie1) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void addDateHeader(String s, long l) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void addHeader(String s, String s1) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void addIntHeader(String s, int i) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public boolean containsHeader(String name) {
         return false;
     }
 
+    @Override
     public String encodeRedirectUrl(String url) {
         return null;
     }
 
+    @Override
     public String encodeRedirectURL(String url) {
         return null;
     }
 
+    @Override
     public String encodeUrl(String url) {
         return null;
     }
 
+    @Override
     public String encodeURL(String url) {
         return null;
     }
 
+    @Override
     public void flushBuffer() throws IOException {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public int getBufferSize() {
         return 0;
     }
 
+    @Override
     public String getCharacterEncoding() {
         return charset;
     }
 
+    @Override
     public String getContentType() {
         return contentType;
     }
 
+    @Override
     public Locale getLocale() {
         return null;
     }
@@ -124,10 +143,12 @@ public class FakeResponse implements HttpServletResponse {
         return new String(md.digest());
     }
 
+    @Override
     public ServletOutputStream getOutputStream() throws IOException {
         return outputStream;
     }
 
+    @Override
     public PrintWriter getWriter() throws IOException {
         if (printWriter == null) {
             java.io.Writer osWriter = new OutputStreamWriter(getOutputStream(), "UTF-8");
@@ -136,54 +157,83 @@ public class FakeResponse implements HttpServletResponse {
         return printWriter;
     }
 
+    @Override
     public boolean isCommitted() {
         return false;
     }
 
+    @Override
     public void reset() {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void resetBuffer() {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void sendError(int i) throws IOException {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void sendError(int i, String s) throws IOException {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void sendRedirect(String s) throws IOException {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void setBufferSize(int i) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void setCharacterEncoding(String charset) {
         this.charset = charset;
     }
 
+    @Override
     public void setContentLength(int i) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void setContentType(String type) {
         contentType = type;
     }
 
+    @Override
     public void setDateHeader(String s, long l) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void setHeader(String s, String s1) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void setIntHeader(String s, int i) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void setLocale(Locale locale) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void setStatus(int i) {
+        throw new UnsupportedOperationException();
     }
 
+    @Override
     public void setStatus(int i, String s) {
+        throw new UnsupportedOperationException();
     }
 }
diff --git a/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/HTMLValdiatorInsightProvider.java b/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/HTMLValdiatorInsightProvider.java
index ac9e19e..9b77ecc 100644
--- a/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/HTMLValdiatorInsightProvider.java
+++ b/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/HTMLValdiatorInsightProvider.java
@@ -20,12 +20,14 @@ package org.apache.sling.cms.core.insights.impl.providers;
 
 import java.io.StringReader;
 import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.util.HashSet;
 import java.util.Set;
 
 import javax.json.Json;
 import javax.json.JsonArray;
 import javax.json.JsonObject;
+import javax.json.JsonReader;
 
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -90,16 +92,18 @@ public class HTMLValdiatorInsightProvider extends BaseInsightProvider {
 
         HttpPost httpPost = new HttpPost("http://validator.w3.org/nu/?out=json&showsource=no&level=all");
         httpPost.addHeader("Content-type", "text/html; charset=utf-8");
-        HttpEntity htmlEntity = new ByteArrayEntity(html.getBytes("UTF-8"));
+        HttpEntity htmlEntity = new ByteArrayEntity(html.getBytes(StandardCharsets.UTF_8));
         httpPost.setEntity(htmlEntity);
 
         I18NDictionary dictionary = i18nProvider.getDictionary(request.getResource().getResourceResolver());
 
         CloseableHttpResponse response = null;
+        JsonReader reader = null;
         try (CloseableHttpClient client = HttpClients.createDefault()) {
             response = client.execute(httpPost);
             HttpEntity entity = response.getEntity();
-            JsonObject json = Json.createReader(new StringReader(EntityUtils.toString(entity))).readObject();
+            reader = Json.createReader(new StringReader(EntityUtils.toString(entity)));
+            JsonObject json = reader.readObject();
             log.debug("Loaded response: {}", json);
             JsonArray messages = json.getJsonArray("messages");
             int errors = 0;
@@ -148,6 +152,10 @@ public class HTMLValdiatorInsightProvider extends BaseInsightProvider {
             insight.setScore(score);
             insight.setMoreDetailsLink("https://validator.w3.org/nu/?doc="
                     + URLEncoder.encode(pageRequest.getPage().getPublishedUrl(), Charsets.UTF_8.toString()));
+        } finally {
+            if (reader != null) {
+                reader.close();
+            }
         }
 
         return insight;
diff --git a/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/PageSpeedInsightProvider.java b/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/PageSpeedInsightProvider.java
index 0036907..c3141d6 100644
--- a/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/PageSpeedInsightProvider.java
+++ b/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/PageSpeedInsightProvider.java
@@ -23,6 +23,7 @@ import java.net.URLEncoder;
 
 import javax.json.Json;
 import javax.json.JsonObject;
+import javax.json.JsonReader;
 
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -90,6 +91,7 @@ public class PageSpeedInsightProvider extends BaseInsightProvider {
         HttpGet httpGet = new HttpGet(checkUrl);
 
         CloseableHttpResponse response = null;
+        JsonReader reader = null;
         try (CloseableHttpClient client = HttpClients.createDefault()) {
 
             I18NDictionary dictionary = i18nProvider.getDictionary(request.getResource().getResourceResolver());
@@ -97,9 +99,10 @@ public class PageSpeedInsightProvider extends BaseInsightProvider {
             log.debug("Requesting page speed via: {}", checkUrl);
             response = client.execute(httpGet);
             HttpEntity entity = response.getEntity();
-            JsonObject resp = Json.createReader(new StringReader(EntityUtils.toString(entity))).readObject();
+            reader = Json.createReader(new StringReader(EntityUtils.toString(entity)));
+            JsonObject resp = reader.readObject();
 
-            log.debug("Retrieved response: {}", resp.toString());
+            log.debug("Retrieved response: {}", resp);
 
             insight.setScored(true);
             double score = resp.getJsonObject("ruleGroups").getJsonObject("SPEED").getJsonNumber("score").doubleValue()
@@ -118,6 +121,10 @@ public class PageSpeedInsightProvider extends BaseInsightProvider {
 
             log.debug("Response parsed successfully");
 
+        } finally {
+            if (reader != null) {
+                reader.close();
+            }
         }
         return insight;
     }
diff --git a/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/ReadabilityInsightProvider.java b/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/ReadabilityInsightProvider.java
index 9a5d0af..0a62b22 100644
--- a/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/ReadabilityInsightProvider.java
+++ b/core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/ReadabilityInsightProvider.java
@@ -63,7 +63,7 @@ public class ReadabilityInsightProvider extends BaseInsightProvider {
     @Reference
     private I18NProvider i18nProvider;
 
-    private void addDetail(Insight insight, I18NDictionary dictionary, double score, String title) {
+    private void addDetail(Insight insight, double score, String title) {
         insight.getScoreDetails().add(Message.defaultMsg(title + ": " + new DecimalFormat("##0.00").format(score)));
     }
 
@@ -112,7 +112,7 @@ public class ReadabilityInsightProvider extends BaseInsightProvider {
 
                 StandardDeviation sd = new StandardDeviation(false);
                 double stddev = sd.evaluate(new double[] { config.getMinGradeLevel(), config.getMaxGradeLevel() });
-                double dev = 0.0;
+                double dev;
                 if (score > config.getMaxGradeLevel()) {
                     dev = score - config.getMaxGradeLevel();
                 } else {
@@ -137,12 +137,12 @@ public class ReadabilityInsightProvider extends BaseInsightProvider {
 
             insight.getScoreDetails().add(Message.defaultMsg(dictionary.get(I18N_KEY_READABILITY_STATS,
                     new Object[] { t.getSentences().size(), t.getWordCount(), t.getComplexWordCount() })));
-            addDetail(insight, dictionary, svc.calculateARI(t), "ARI");
-            addDetail(insight, dictionary, svc.calculateColemanLiauIndex(t), "Coleman-Liau Index");
-            addDetail(insight, dictionary, svc.calculateFleschKincaidGradeLevel(t), "Flesch-Kincaid Grade Level");
-            addDetail(insight, dictionary, svc.calculateFleschReadingEase(t), "Flesch-Kincaid Reading Ease");
-            addDetail(insight, dictionary, svc.calculateGunningFog(t), "Gunning Fog");
-            addDetail(insight, dictionary, svc.calculateSMOG(t), "SMOG");
+            addDetail(insight, svc.calculateARI(t), "ARI");
+            addDetail(insight, svc.calculateColemanLiauIndex(t), "Coleman-Liau Index");
+            addDetail(insight, svc.calculateFleschKincaidGradeLevel(t), "Flesch-Kincaid Grade Level");
+            addDetail(insight, svc.calculateFleschReadingEase(t), "Flesch-Kincaid Reading Ease");
+            addDetail(insight, svc.calculateGunningFog(t), "Gunning Fog");
+            addDetail(insight, svc.calculateSMOG(t), "SMOG");
 
         } else {
             log.warn("Failed to get readability for resource {} site or config were null",
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/filters/CMSSecurityFilter.java b/core/src/main/java/org/apache/sling/cms/core/internal/filters/CMSSecurityFilter.java
index bfb2e65..ec20f35 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/filters/CMSSecurityFilter.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/filters/CMSSecurityFilter.java
@@ -55,101 +55,103 @@ import org.slf4j.LoggerFactory;
 @Designate(ocd = CMSSecurityFilterConfig.class)
 public class CMSSecurityFilter implements Filter {
 
-	private static final Logger log = LoggerFactory.getLogger(CMSSecurityFilter.class);
-
-	private CMSSecurityFilterConfig config;
-
-	private List<Pattern> patterns = new ArrayList<>();
-
-	@Modified
-	@Activate
-	public void activate(CMSSecurityFilterConfig config) {
-		if (config.hostDomains() != null && config.hostDomains().length > 0) {
-			log.info("Applying CMS Security Filter for domains {}", Arrays.toString(config.hostDomains()));
-			this.config = config;
-			for (String p : config.allowedPatterns()) {
-				patterns.add(Pattern.compile(p));
-			}
-		} else {
-			this.config = null;
-			log.info("No host domains supplied, CMS Security Filter not enabled");
-		}
-	}
-
-	@Override
-	public void init(FilterConfig filterConfig) throws ServletException {
-		// Nothing required
-	}
-
-	@Override
-	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-			throws IOException, ServletException {
-
-		SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
-		if (config != null && ArrayUtils.contains(config.hostDomains(), request.getServerName())) {
-			log.trace("Filtering requests to host {}", request.getServerName());
-			String uri = slingRequest.getRequestURI();
-			boolean allowed = false;
-			for (Pattern p : this.patterns) {
-				if (p.matcher(uri).matches()) {
-					log.trace("Allowing request matching pattern {}", p);
-					allowed = true;
-					break;
-				}
-			}
-
-			// the uri isn't allowed automatically, so check user permissions
-			if (!allowed) {
-
-				// check to see if the user is a member of the specified group
-				if (StringUtils.isNotBlank(config.group())) {
-					Authorizable auth;
-					try {
-						Session session = slingRequest.getResourceResolver().adaptTo(Session.class);
-						UserManager userManager = AccessControlUtil.getUserManager(session);
-						log.trace("Retrieved user manager {} with session {}", userManager, session);
-						auth = userManager.getAuthorizable(slingRequest.getUserPrincipal());
-						if (auth != null) {
-							log.trace("Checking to see if user {} is in required group {}", auth.getID(),
-									config.group());
-							Iterator<Group> groups = ((User) auth).memberOf();
-							while (groups.hasNext()) {
-								if (groups.next().getID().equals(config.group())) {
-									allowed = true;
-									break;
-								}
-							}
-						}
-					} catch (Exception e) {
-						log.error("Exception determing group membership", e);
-					}
-
-					// just check to make sure the user is logged in
-				} else {
-					if (!"anonymous".equals(slingRequest.getResourceResolver().getUserID())) {
-						allowed = true;
-					}
-				}
-
-			}
-
-			// permission checked failed, so return an unauthorized error
-			if (!allowed) {
-				log.trace("Request to {} not allowed for user {}", slingRequest.getRequestURI(),
-						slingRequest.getResourceResolver().getUserID());
-				((HttpServletResponse) response).sendError(401);
-				return;
-			}
-		} else {
-			log.trace("Not filtering request to host {}", request.getServerName());
-		}
-
-		chain.doFilter(request, response);
-	}
-
-	@Override
-	public void destroy() {
-		// Nothing required
-	}
+    private static final Logger log = LoggerFactory.getLogger(CMSSecurityFilter.class);
+
+    private CMSSecurityFilterConfig config;
+
+    private List<Pattern> patterns = new ArrayList<>();
+
+    @Modified
+    @Activate
+    public void activate(CMSSecurityFilterConfig config) {
+        if (config.hostDomains() != null && config.hostDomains().length > 0) {
+            if (log.isInfoEnabled()) {
+                log.info("Applying CMS Security Filter for domains {}", Arrays.toString(config.hostDomains()));
+            }
+            this.config = config;
+            for (String p : config.allowedPatterns()) {
+                patterns.add(Pattern.compile(p));
+            }
+        } else {
+            this.config = null;
+            log.info("No host domains supplied, CMS Security Filter not enabled");
+        }
+    }
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+        // Nothing required
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException {
+
+        SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
+        if (config != null && ArrayUtils.contains(config.hostDomains(), request.getServerName())) {
+            log.trace("Filtering requests to host {}", request.getServerName());
+            String uri = slingRequest.getRequestURI();
+            boolean allowed = false;
+            for (Pattern p : this.patterns) {
+                if (p.matcher(uri).matches()) {
+                    log.trace("Allowing request matching pattern {}", p);
+                    allowed = true;
+                    break;
+                }
+            }
+
+            // the uri isn't allowed automatically, so check user permissions
+            if (!allowed) {
+
+                // check to see if the user is a member of the specified group
+                if (StringUtils.isNotBlank(config.group())) {
+                    Authorizable auth;
+                    try {
+                        Session session = slingRequest.getResourceResolver().adaptTo(Session.class);
+                        UserManager userManager = AccessControlUtil.getUserManager(session);
+                        log.trace("Retrieved user manager {} with session {}", userManager, session);
+                        auth = userManager.getAuthorizable(slingRequest.getUserPrincipal());
+                        if (auth != null) {
+                            log.trace("Checking to see if user {} is in required group {}", auth.getID(),
+                                    config.group());
+                            Iterator<Group> groups = ((User) auth).memberOf();
+                            while (groups.hasNext()) {
+                                if (groups.next().getID().equals(config.group())) {
+                                    allowed = true;
+                                    break;
+                                }
+                            }
+                        }
+                    } catch (Exception e) {
+                        log.error("Exception determing group membership", e);
+                    }
+
+                    // just check to make sure the user is logged in
+                } else {
+                    if (!"anonymous".equals(slingRequest.getResourceResolver().getUserID())) {
+                        allowed = true;
+                    }
+                }
+
+            }
+
+            // permission checked failed, so return an unauthorized error
+            if (!allowed) {
+                log.trace("Request to {} not allowed for user {}", slingRequest.getRequestURI(),
+                        slingRequest.getResourceResolver().getUserID());
+                ((HttpServletResponse) response).sendError(401);
+                return;
+            }
+        } else {
+            log.trace("Not filtering request to host {}", request.getServerName());
+        }
+
+        chain.doFilter(request, response);
+    }
+
+    @Override
+    public void destroy() {
+        // Nothing required
+    }
 
 }
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/operations/BulkReplaceOperation.java b/core/src/main/java/org/apache/sling/cms/core/internal/operations/BulkReplaceOperation.java
index 18c5d05..2e40792 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/operations/BulkReplaceOperation.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/operations/BulkReplaceOperation.java
@@ -27,6 +27,7 @@ import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.sling.api.SlingException;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.ModifiableValueMap;
 import org.apache.sling.api.resource.Resource;
@@ -65,7 +66,9 @@ public class BulkReplaceOperation implements PostOperation {
 
             // perform the bulk replacement
             Pattern updateProperties = Pattern.compile(request.getParameter(PN_UPDATE_PROPERTIES));
-            log.debug("Updating properties matching: {}", updateProperties.pattern());
+            if (log.isDebugEnabled()) {
+                log.debug("Updating properties matching: {}", updateProperties.pattern());
+            }
             Pattern rfind = null;
             String find = request.getParameter(PN_FIND);
             if (MODE_REGEX.equals(request.getParameter(PN_MODE))) {
@@ -114,6 +117,11 @@ public class BulkReplaceOperation implements PostOperation {
             String replace, PostResponse response, List<Modification> changes) {
         ModifiableValueMap properties = resource.adaptTo(ModifiableValueMap.class);
         boolean updated = false;
+
+        if (properties == null) {
+            throw new SlingException("Failed to retrieve modifiable value map, cannot update properties", null);
+        }
+
         for (Entry<String, Object> entry : properties.entrySet()) {
 
             if (updateProperties.matcher(entry.getKey()).matches()) {
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/rewriter/HTML5Serializer.java b/core/src/main/java/org/apache/sling/cms/core/internal/rewriter/HTML5Serializer.java
index aa0ff2b..a36bb36 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/rewriter/HTML5Serializer.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/rewriter/HTML5Serializer.java
@@ -69,7 +69,7 @@ public class HTML5Serializer implements Serializer {
         this.resolver = resolver;
     }
 
-    public void characters(char buffer[], int offset, int length) throws SAXException {
+    public void characters(char[] buffer, int offset, int length) throws SAXException {
         if (length == 0) {
             writer.flush();
         } else {
@@ -98,7 +98,7 @@ public class HTML5Serializer implements Serializer {
         // Nothing required
     }
 
-    public void ignorableWhitespace(char ac[], int i, int j) throws SAXException {
+    public void ignorableWhitespace(char[] ac, int i, int j) throws SAXException {
         // Nothing required
     }
 
diff --git a/core/src/main/java/org/apache/sling/cms/core/readability/impl/ReadabilityServiceFactoryImpl.java b/core/src/main/java/org/apache/sling/cms/core/readability/impl/ReadabilityServiceFactoryImpl.java
index e5354ab..28e0241 100644
--- a/core/src/main/java/org/apache/sling/cms/core/readability/impl/ReadabilityServiceFactoryImpl.java
+++ b/core/src/main/java/org/apache/sling/cms/core/readability/impl/ReadabilityServiceFactoryImpl.java
@@ -36,7 +36,7 @@ public class ReadabilityServiceFactoryImpl implements ReadabilityServiceFactory
     private static final Logger log = LoggerFactory.getLogger(ReadabilityServiceFactoryImpl.class);
 
     @Reference(cardinality = ReferenceCardinality.MULTIPLE)
-    private volatile List<ReadabilityService> services;
+    private List<ReadabilityService> services;
 
     public ReadabilityService getReadabilityService(Locale locale) {
         log.debug("Locating readability service for {}", locale);