从 5.3.8 升级到 5.4.1 挂毯时出现空白命名样式表的渲染错误

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

我正在尝试将 5.3.8 版的工作项目升级到 5.4.1 版,但由于某些原因,有 2 个页面在 setuprender 时抛出一个空白命名样式 sheet 的异常,我搜索了所有的代码库都找不到任何这样的错误声明。

SetupRender 中的渲染队列错误[workflow/content/Input:slider]:无法定位资产 'context:styles/""'(文件不存在)。

不确定是什么原因,从@import 中删除样式sheet 后它不会抛出任何错误。

下面的异常跟踪

原因:java.lang.RuntimeException:无法定位资产 'context:styles/""'(文件不存在)。 在 org.apache.tapestry5.internal.services.AssetSourceImpl.getLocalizedAssetFromResource(AssetSourceImpl.java:390) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.AssetSourceImpl.getAssetInLocale(AssetSourceImpl.java:305) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.AssetSourceImpl.getAsset(AssetSourceImpl.java:131) ~[tapestry-core-5.4.1.jar:?] 在 $AssetSource_cf1a8b3ad15d.getAsset(未知来源)~[?:?] 在 org.apache.tapestry5.internal.services.assets.CSSURLRewriter.replaceURLs(CSSURLRewriter.java:177) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.CSSURLRewriter.access100 美元(CSSURLRewriter.java:46)~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.CSSURLRewriter$1.perform(CSSURLRewriter.java:109) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.CSSURLRewriter$1.perform(CSSURLRewriter.java:104) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.ioc.internal.OperationTrackerImpl.perform(OperationTrackerImpl.java:110) ~[tapestry-ioc-5.4.1.jar:?] 在 org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.perform(PerThreadOperationTracker.java:84) ~[tapestry-ioc-5.4.1.jar:?] 在 org.apache.tapestry5.ioc.internal.RegistryImpl.perform(RegistryImpl.java:1266) ~[tapestry-ioc-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.CSSURLRewriter.filter(CSSURLRewriter.java:102) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.CSSURLRewriter.getStreamableResource(CSSURLRewriter.java:94) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.SRSMinimizingInterceptor.getStreamableResource(SRSMinimizingInterceptor.java:38) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.UTF8ForTextAssets.getStreamableResource(UTF8ForTextAssets.java:40) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.SRSCachingInterceptor.getStreamableResource(SRSCachingInterceptor.java:55) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.SRSCompressingInterceptor.getStreamableResource(SRSCompressingInterceptor.java:38) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.JavaScriptStackMinimizeDisabler.getStreamableResource(JavaScriptStackMinimizeDisabler.java:61) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.assets.SRSCachingInterceptor.getStreamableResource(SRSCachingInterceptor.java:48) ~[tapestry-core-5.4.1.jar:?] 在 $StreamableResourceSource_cf1a8b3ad183.getStreamableResource(未知来源)~[?:?] 在 org.apache.tapestry5.internal.services.AbstractAssetFactory$1.toClientURL(AbstractAssetFactory.java:87) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.services.javascript.StylesheetLink.getURL(StylesheetLink.java:76) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.ajax.JavaScriptSupportImpl.importStylesheet(JavaScriptSupportImpl.java:408) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.services.ajax.JavaScriptSupportImpl.importStylesheet(JavaScriptSupportImpl.java:399) ~[tapestry-core-5.4.1.jar:?] 在 $JavaScriptSupport_cf1a8b3ad316.importStylesheet(未知来源)~[?:?] 在 $JavaScriptSupport_cf1a8b3ad1cc.importStylesheet(未知来源)~[?:?] 在 org.apache.tapestry5.internal.transform.ImportWorker$2.work(ImportWorker.java:60) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.transform.ImportWorker$2.work(ImportWorker.java:57) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.func.ArrayFlow.each(ArrayFlow.java:67) ~[tapestry-func-5.4.1.jar:?] 在 org.apache.tapestry5.func.ArrayFlow.each(ArrayFlow.java:30) ~[tapestry-func-5.4.1.jar:?] 在 org.apache.tapestry5.internal.transform.ImportWorker$8.advise(ImportWorker.java:275) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:92) ~[plastic-5.4.1.jar:?] 在 org.apache.tapestry5.internal.transform.ImportWorker$8.advise(ImportWorker.java:271) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:92) ~[plastic-5.4.1.jar:?] 在 mycompany.myproject.web.components.Slider.setupRender(Slider.java) ~[Slider.class:?] 在 org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.invokeComponent(ComponentPageElementImpl.java:174) ~[tapestry-core-5.4.1.jar:?] 在 org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:133) ~[tapestry-core-5.4.1.jar:?] ... 还有 92 个

Tapestry 5.4.1 尝试修复您的 CSS-es 中的 URL。在你的 CSS-es 中的某处有一个 link 例如损坏或 Tapestry 无法正确识别的图像。

在堆栈跟踪之前,Tapestry 还应该记录其执行的操作的缩略堆栈。此堆栈应包括包含 Rewriting relative URLs in 的行和当前处理的名称 CSS - 检查其内容以及包含 url( 文本的任何行。可能在某个地方你有无效的引用,如 url("")url("styles/""),你需要修复或删除它们。

如果你仍然卡住了,我建议按照以下步骤找出问题所在:

  • org.apache.tapestry5.internal.services.AssetSourceImpl.getLocalizedAssetFromResource 抛出异常之前设置一个断点(第 390 行);
  • 运行你的程序触发问题;
  • 一旦调试器在断点处停止程序,请查看您的堆栈跟踪,特别是 org.apache.tapestry5.internal.services.assets.CSSURLRewriter.replaceURLs 处的局部变量;
  • 检查变量的内容:inputmatchercompleteURLPatteroutput - 它们应该提供有关 CSS 的哪一部分触发的线索异常。