Expand my Community achievements bar.

SlingFilter doFilter NPE root cause and diagnosis

Avatar

Level 2

Apologies for the slow reply, just back from holidays.

 

Thanks for your willingness to take a look at the package. Unfortunately I can't send it on as there's IP constraints and it's used by a number of customers of our service.

 

I was hoping for a bit of direction on:

  1. Where and why the NPE is being thrown from what I can send in the way of stack traces.
  2. Where I might add any extra logging or
  3. any tips for Filter debugging by way of what we're encountering.

 

I suspect it is another lib/package that is interfering with our Filter. However I have compared the two environments and their respective Filter Configurations via http://<domain>/system/console/status-slingfilter which appear the same frown ???

4 Replies

Avatar

Level 2

Great it doesn't handle attachements. OK, here's the end of the stack trace, hopefully that'll be enough:

Caused by: java.lang.NullPointerException
    at org.apache.sling.i18n.DefaultLocaleResolver.resolveLocale(DefaultLocaleResolver.java:53)
    at org.apache.sling.i18n.DefaultLocaleResolver.resolveLocale(DefaultLocaleResolver.java:44)
    at org.apache.sling.i18n.impl.I18NFilter$I18NSlingHttpServletRequest.getLocaleList(I18NFilter.java:360)
    at org.apache.sling.i18n.impl.I18NFilter$I18NSlingHttpServletRequest.getLocale(I18NFilter.java:347)
    at org.apache.sling.i18n.impl.I18NFilter$BaseI18NSlingHttpServletRequest.getResourceBundle(I18NFilter.java:301)
    at org.apache.sling.i18n.impl.I18NFilter$BaseI18NSlingHttpServletRequest.getResourceBundle(I18NFilter.java:294)
    at org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper.getResourceBundle(SlingHttpServletRequestWrapper.java:106)
    at org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper.getResourceBundle(SlingHttpServletRequestWrapper.java:106)
    at org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper.getResourceBundle(SlingHttpServletRequestWrapper.java:106)
    at org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper.getResourceBundle(SlingHttpServletRequestWrapper.java:106)
    at org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper.getResourceBundle(SlingHttpServletRequestWrapper.java:106)
    at org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper.getResourceBundle(SlingHttpServletRequestWrapper.java:106)
    at org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper.getResourceBundle(SlingHttpServletRequestWrapper.java:106)
    at org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper.getResourceBundle(SlingHttpServletRequestWrapper.java:106)
    at org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper.getResourceBundle(SlingHttpServletRequestWrapper.java:106)
    at org.apache.jsp.apps.cq.personalization.components.teaser.teaser_jsp._jspService(teaser_jsp.java:195)
    at org.apache.sling.scripting.jsp.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:502)
    ... 340 more

Avatar

Level 10

Inyour use case, are you using Java APIs. If so, which one?

Avatar

Level 2

Current file imports plus interface implementations:

import com.day.cq.wcm.api.components.ComponentContext; import com.google.common.base.Charsets; import com.google.common.base.Strings; import com.google.common.hash.HashCode; import com.google.common.hash.Hasher; import com.google.common.hash.Hashing; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.apache.felix.scr.annotations.Activate; import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.sling.SlingFilter; import org.apache.felix.scr.annotations.sling.SlingFilterScope; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.request.RequestPathInfo; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ValueMap; import org.osgi.framework.Constants; import org.osgi.service.component.ComponentException; import javax.servlet.*; import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import static com.day.cq.commons.jcr.JcrConstants.JCR_PRIMARYTYPE; import static com.google.common.base.Preconditions.checkNotNull; import static com.mydomain.aem.InterrogationServlet.HEADER_REFERRER; @SlingFilter(label = "My Filter", description = "Does stuff", scope = SlingFilterScope.COMPONENT, order = Integer.MAX_VALUE, metatype = true) @Slf4j public class MyFilter implements Filter, ErrorCodes { // implementation }

Avatar

Level 10

I am really interested in knowing why it works on some instances and not others - do you ahve other libs on the machine where its not working where there can be some lib conflicts. Do you mind emailing me yoru package with a README of how to test. i want to dig into this. scottm@adobe.com