Search code examples
tapestry

getting render error for blank named stylesheet while upgrading to 5.4.1 tapestry from 5.3.8


I'm trying to upgrade a working project in 5.3.8 version to 5.4.1 but 2 pages for some reasons are throwing exception at the time of setuprender for a blank named style sheet and I searched all the codebase and could not find any such bad declaration.

Render queue error in SetupRender[workflow/content/Input:slider]: Unable to locate asset 'context:styles/""' (the file does not exist).

Not sure what is the reason, after removing stylesheet from @import it does not throw any error.

Exception trace below

Caused by: java.lang.RuntimeException: Unable to locate asset 'context:styles/""' (the file does not exist). at org.apache.tapestry5.internal.services.AssetSourceImpl.getLocalizedAssetFromResource(AssetSourceImpl.java:390) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.AssetSourceImpl.getAssetInLocale(AssetSourceImpl.java:305) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.AssetSourceImpl.getAsset(AssetSourceImpl.java:131) ~[tapestry-core-5.4.1.jar:?] at $AssetSource_cf1a8b3ad15d.getAsset(Unknown Source) ~[?:?] at org.apache.tapestry5.internal.services.assets.CSSURLRewriter.replaceURLs(CSSURLRewriter.java:177) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.CSSURLRewriter.access$100(CSSURLRewriter.java:46) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.CSSURLRewriter$1.perform(CSSURLRewriter.java:109) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.CSSURLRewriter$1.perform(CSSURLRewriter.java:104) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.perform(OperationTrackerImpl.java:110) ~[tapestry-ioc-5.4.1.jar:?] at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.perform(PerThreadOperationTracker.java:84) ~[tapestry-ioc-5.4.1.jar:?] at org.apache.tapestry5.ioc.internal.RegistryImpl.perform(RegistryImpl.java:1266) ~[tapestry-ioc-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.CSSURLRewriter.filter(CSSURLRewriter.java:102) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.CSSURLRewriter.getStreamableResource(CSSURLRewriter.java:94) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.SRSMinimizingInterceptor.getStreamableResource(SRSMinimizingInterceptor.java:38) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.UTF8ForTextAssets.getStreamableResource(UTF8ForTextAssets.java:40) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.SRSCachingInterceptor.getStreamableResource(SRSCachingInterceptor.java:55) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.SRSCompressingInterceptor.getStreamableResource(SRSCompressingInterceptor.java:38) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.JavaScriptStackMinimizeDisabler.getStreamableResource(JavaScriptStackMinimizeDisabler.java:61) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.assets.SRSCachingInterceptor.getStreamableResource(SRSCachingInterceptor.java:48) ~[tapestry-core-5.4.1.jar:?] at $StreamableResourceSource_cf1a8b3ad183.getStreamableResource(Unknown Source) ~[?:?] at org.apache.tapestry5.internal.services.AbstractAssetFactory$1.toClientURL(AbstractAssetFactory.java:87) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.services.javascript.StylesheetLink.getURL(StylesheetLink.java:76) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.ajax.JavaScriptSupportImpl.importStylesheet(JavaScriptSupportImpl.java:408) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.services.ajax.JavaScriptSupportImpl.importStylesheet(JavaScriptSupportImpl.java:399) ~[tapestry-core-5.4.1.jar:?] at $JavaScriptSupport_cf1a8b3ad316.importStylesheet(Unknown Source) ~[?:?] at $JavaScriptSupport_cf1a8b3ad1cc.importStylesheet(Unknown Source) ~[?:?] at org.apache.tapestry5.internal.transform.ImportWorker$2.work(ImportWorker.java:60) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.transform.ImportWorker$2.work(ImportWorker.java:57) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.func.ArrayFlow.each(ArrayFlow.java:67) ~[tapestry-func-5.4.1.jar:?] at org.apache.tapestry5.func.ArrayFlow.each(ArrayFlow.java:30) ~[tapestry-func-5.4.1.jar:?] at org.apache.tapestry5.internal.transform.ImportWorker$8.advise(ImportWorker.java:275) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:92) ~[plastic-5.4.1.jar:?] at org.apache.tapestry5.internal.transform.ImportWorker$8.advise(ImportWorker.java:271) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:92) ~[plastic-5.4.1.jar:?] at mycompany.myproject.web.components.Slider.setupRender(Slider.java) ~[Slider.class:?] at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.invokeComponent(ComponentPageElementImpl.java:174) ~[tapestry-core-5.4.1.jar:?] at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:133) ~[tapestry-core-5.4.1.jar:?] ... 92 more


Solution

  • Tapestry 5.4.1 tries to fix URLs in your CSS-es. Somewhere in one of your CSS-es there is a link to e.g. a image that is either broken or Tapestry cannot properly recognise.

    Before the stack trace, Tapestry should also log an abbreviated stack of operations its performing. This stack should include line containing Rewriting relative URLs in and the name of currently processed CSS - check its content and for any lines containing url( text. Probably somewhere you have line with invalid references like url("") or url("styles/""), and you need to fix or remove them.

    If you are still stuck, I suggest following procedure to find what is wrong:

    • set a breakpoint in org.apache.tapestry5.internal.services.AssetSourceImpl.getLocalizedAssetFromResource just before the exception is thrown (line 390);
    • run your program to trigger the problem;
    • once the debugger stops the program at the breakpoint, see your stack trace, specifically local variables at org.apache.tapestry5.internal.services.assets.CSSURLRewriter.replaceURLs;
    • examine content of variables: input, matcher, completeURLPatter, output - they should provide a clue about what part of your CSS triggered the exception.