Hi Martin,

I have created a pull request, see
https://github.com/l0rdn1kk0n/wicket-bootstrap/pull/636

Regards
Erik

On Tue, Sep 20, 2016 at 9:08 PM, Martin Grigorov <mgrigo...@apache.org>
wrote:

> Hi Erik,
>
> Many thanks for investigating this!
>
> Please create a Pull Request!
> It seems you already know how to fix it!
> Thank you!
>
> Martin Grigorov
> Wicket Training and Consulting
> https://twitter.com/mtgrigorov
>
> On Tue, Sep 20, 2016 at 2:16 PM, Erik Strid <strid.e...@gmail.com> wrote:
>
> > Hi Martin,
> >
> > I have finally found some time to investigate this issue further.
> >
> > It seems that clearing the cache only will clear the variable
> contentCache
> > and not both the contentCache and urlSourceCache variables in
> > LessCacheManager. A cleared cache will trigger a recompile in
> > LessCacheManager.getCss(URLSource) on a cached URLSource, in this case
> > will
> > the compiler add the imported files to the importedSources list, returned
> > by AbstractHierarchicalSource.getImportedSources(), once more. And the
> > importedSources list will grow with imported files after each call to
> > clearCache.
> > The NPE that we get is a result of the shared URLSource and a race
> > condition in AbstractHierarchicalSource.addImportedSource(LessSource)
> > (importedSources isn't thread safe).
> >
> > Furthermore I think there is an issue with the
> > LessCacheManager.getCss(URLSource). For the first file that is compiled
> > will the list of imported sources for lessSource be empty. The
> > lastModifiedTime will then only contain the timestamp for the file and
> not
> > the last modified time of the file itself or its imports, so the
> > lastModifiedTime will be incorrect when adding the compiled source to the
> > timeToContentMap the first time.
> >
> > You should be able to see these two issues in this commit
> > https://github.com/strido/wicket-bootstrap/commit/
> > 2be0d8d4294162bd103e63c74198d90457e6069e
> >
> > Should I report this to your issue tracker (
> > https://github.com/l0rdn1kk0n/wicket-bootstrap/issues)?
> >
> > Regards
> > Erik Strid
> >
> > On Tue, Sep 6, 2016 at 10:49 AM, Martin Grigorov <mgrigo...@apache.org>
> > wrote:
> >
> > > Hi,
> > >
> > > If the list of imported sources contains "null" then you should ask at
> > > https://github.com/SomMeri/less4j/issues.
> > >
> > > What I can do in Wicket-Bootstrap-Less is to add protection against
> this
> > > NullPointerException by ignoring all "null"s. But this may lead to
> broken
> > > UI!
> > > Please file an issue at
> > > https://github.com/l0rdn1kk0n/wicket-bootstrap/issues if you think
> this
> > > could help.
> > >
> > > Martin Grigorov
> > > Wicket Training and Consulting
> > > https://twitter.com/mtgrigorov
> > >
> > > On Tue, Sep 6, 2016 at 10:39 AM, Erik Strid <strid.e...@gmail.com>
> > wrote:
> > >
> > > > Hi.
> > > >
> > > > We are using Wicket Bootstap Less in our project and have an issue
> with
> > > the
> > > > Less compilation.
> > > > From time to time the compilation fails for some of the Less files in
> > our
> > > > project, usually we see this in our Selenium Grid but it have
> happened
> > > > locally as well.
> > > >
> > > > When the compilation fails we get this stacktrace:
> > > >
> > > > java.lang.NullPointerException: null
> > > > at
> > > > de.agilecoders.wicket.less.LessCacheManager.findLastModified(
> > > > LessCacheManager.java:159)
> > > > ~[wicket-bootstrap-less-0.9.16.jar:0.9.16]
> > > > at
> > > > de.agilecoders.wicket.less.LessCacheManager.findLastModified(
> > > > LessCacheManager.java:165)
> > > > ~[wicket-bootstrap-less-0.9.16.jar:0.9.16]
> > > > at
> > > > de.agilecoders.wicket.less.LessCacheManager.getLastModifiedTime(
> > > > LessCacheManager.java:145)
> > > > ~[wicket-bootstrap-less-0.9.16.jar:0.9.16]
> > > > at
> > > > de.agilecoders.wicket.less.LessResourceStream.lastModifiedTime(
> > > > LessResourceStream.java:65)
> > > > ~[wicket-bootstrap-less-0.9.16.jar:0.9.16]
> > > > at
> > > > org.apache.wicket.request.resource.PackageResource.
> > newResourceResponse(
> > > > PackageResource.java:295)
> > > > ~[wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.request.resource.AbstractResource.
> > > > respond(AbstractResource.java:498)
> > > > ~[wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.request.handler.resource.ResourceRequestHandler.
> > > respond(
> > > > ResourceRequestHandler.java:75)
> > > > ~[wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.request.handler.resource.
> > > ResourceReferenceRequestHandle
> > > > r.respond(ResourceReferenceRequestHandler.java:108)
> > > > ~[wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.request.cycle.RequestCycle$
> HandlerExecutor.respond(
> > > > RequestCycle.java:890)
> > > > ~[wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.request.RequestHandlerStack.execute(
> > > > RequestHandlerStack.java:64)
> > > > ~[wicket-request-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.request.cycle.RequestCycle.execute(
> > > > RequestCycle.java:261)
> > > > [wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.request.cycle.RequestCycle.
> > > processRequest(RequestCycle.
> > > > java:218)
> > > > [wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.request.cycle.RequestCycle.
> processRequestAndDetach(
> > > > RequestCycle.java:289)
> > > > [wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(
> > > > WicketFilter.java:259)
> > > > [wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.protocol.http.WicketFilter.
> > > processRequest(WicketFilter.
> > > > java:201)
> > > > [wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.apache.wicket.protocol.http.WicketFilter.doFilter(
> > > > WicketFilter.java:282)
> > > > [wicket-core-6.22.0.jar:6.22.0]
> > > > at
> > > > org.eclipse.jetty.servlet.ServletHandler$CachedChain.
> > > > doFilter(ServletHandler.java:1652)
> > > > [jetty-servlet-9.2.15.v20160210.jar:9.2.15.v20160210]
> > > > at
> > > > org.springframework.security.web.FilterChainProxy$
> > > > VirtualFilterChain.doFilter(FilterChainProxy.java:369)
> > > > [spring-security-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
> > > > at
> > > > org.springframework.security.web.access.intercept.
> > > > FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
> > > > [spring-security-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
> > > > at
> > > > org.springframework.security.web.access.intercept.
> > > > FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.
> java:83)
> > > > [spring-security-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
> > > > at
> > > > org.springframework.security.web.FilterChainProxy$
> > > > VirtualFilterChain.doFilter(FilterChainProxy.java:381)
> > > > [spring-security-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
> > > > at
> > > > org.springframework.security.web.access.ExceptionTranslationFilter.
> > > > doFilter(ExceptionTranslationFilter.java:97)
> > > > [spring-security-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
> > > > at
> > > > org.springframework.security.web.FilterChainProxy$
> > > > VirtualFilterChain.doFilter(FilterChainProxy.java:381)
> > > > [spring-security-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
> > > > at
> > > > org.springframework.security.web.session.SessionManagementFilter.
> > > doFilter(
> > > > SessionManagementFilter.java:100)
> > > > [spring-security-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
> > > > at
> > > > org.springframework.security.web.FilterChainProxy$
> > > > VirtualFilterChain.doFilter(FilterChainProxy.java:381)
> > > > [spring-security-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
> > > > at
> > > > org.springframework.security.web.authentication.
> > > > AnonymousAuthenticationFilter.doFilter(
> AnonymousAuthenticationFilter.
> > > > java:78)
> > > > [spring-security-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
> > > >
> > > > I have been able do see what is happening when we get the problem
> > > locally,
> > > > it is the importedSources for the file currently compiled that
> contains
> > > > null.
> > > > And from what I have seen (if I'm remembering correctly) it has been
> > the
> > > > first element in the list that is null and the other items in the
> list
> > > > contains the correct imports. We are using "classpath!" imports for
> > > usually
> > > > one or two imports.
> > > >
> > > > I cannot see any point where it is possible to add null to the list
> of
> > > > imported sources from reviewing the code that adds the imports in the
> > > Less
> > > > files.
> > > >
> > > > Furthermore we are adding Less a variable using
> > > > LessCompilerConfigurationFactory and clear the LessCacheManager upon
> > > > changes to this variable, however during the tests in our Selenium
> Grid
> > > > this shouldn't happen.
> > > >
> > > > My problem is that I'm not able to reproduce the issue.
> > > > Have someone encountered this problem before? Or does someone have
> > hints
> > > on
> > > > how to proceed with the troubleshooting?
> > > >
> > > > Regards
> > > > Erik Strid
> > > >
> > >
> >
>

Reply via email to