Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    problem with custom skins in latest builds

    Hello, I wanted to ask what might have changed in version 13.1 after the 20250329 build (the last working one) in the March 31 and April 1 builds. Basically, my custom skins no longer load the load_skin.js file.

    The file is located at a path like:
    ./isomorphic/skins/1.1.9-13.1-p20250329/mySkin/load_skin.js?isc_version=13.1-p20250331.js

    I load them using the skinDir attribute of the loadISC tag. The generated path in the script tag is correct, but in the browser, the file appears empty (while in the deployment, I can see that it is not empty).

    Regular skins are loading normally.

    #2
    now I've verified that if I deploy the custom skins directly under isomorphic/skins without the "versioning" subfolder, then everything works. But why the above path stopped working after 20250329 build?

    Comment


      #3
      I just realized that I'm using the FileDownload servlet with this mapping:
      Code:
      <servlet-mapping>
              <servlet-name>FileDownload</servlet-name>
              <url-pattern>/isomorphic/skins/*</url-pattern>
          </servlet-mapping>
      so something must've changed there.

      Comment


        #4
        hi Claudio, thanks for the report.

        We're not immediately seeing an issue delivering load_skin content for custom skins, even with the skin-dir being inside a sub-dir of skins/, which is indeed the most likely cause of an issue here - we're still investigating and will get back to you.

        Can you confirm, is your custom skin from the Skin Editor? Did you "Export as a base skin" and, if not, what is the baseSkin?

        Comment


          #5
          Hello, yes it's from the skin editor, *not* exported as a base skin, the base skin is Shiva.

          Comment


            #6
            Hello, I’d like to add that I was hoping a possible workaround could be adding the subdirectory to the FileDownload servlet mappings:

            Code:
            <servlet-mapping>
                    <servlet-name>FileDownload</servlet-name>
                    <url-pattern>/isomorphic/skins/mysubdirectory/*</url-pattern>
                </servlet-mapping>
            but it actually doesn’t change anything.

            Comment


              #7
              hi Claudio - we'll get a fix in for this for tomorrow's builds.

              The existing code has always technically expected "custom" skins, from and for the Skin Editor, to be in a direct subdir of the skins/ dir, but not more deeply nested. Since it worked for you in earlier builds, we did try putting an export in a subdir with the same name as yours, and it worked as expected.

              However, there were indeed changes to this server code around your reported date, so we'll go over those changes and get it fixed for your use-case.
              Last edited by Isomorphic; 7 Apr 2025, 09:07.

              Comment


                #8
                hi Claudio - following up, unfortunately changes didn't make it into the build queue in time for today's builds.

                However, a change is now in. This does correct a situation where requests for files from skins in a subdir of skins/, like skins/mySkins/SkinOne, could try to return content from the wrong place and showed an error in the server log.

                Please delay re-testing until builds dated April 9 - if you still see issues, please let us know about any logs you see at the server.
                Last edited by Isomorphic; 8 Apr 2025, 03:12.

                Comment


                  #9
                  v13.1p_2025-04-09/Enterprise Deployment

                  Hello, now I got this error:

                  Code:
                  INFORMAZIONI: 2025-04-09T16:07:02,454 [ ] INFO DSRequest Executing isc_userSkin.fetch rows: 0->-1 with
                  criteria: {name:"1.1.9-13.1-p20250401.4"}
                  2025-04-09T16:07:02,466 [ ] DEBUG PoolableSQLConnectionFactory makeObject() created an unpooled Connection '1778331919'
                  2025-04-09T16:07:02,466 [ ] DEBUG SQLConnectionManager Borrowed connection '1778331919' from DBCP
                  2025-04-09T16:07:02,468 [ ] INFO DSRequest Executing isc_userSkin.fetch rows: 0->-1 with
                  criteria: {name:"1.1.9-13.1-p20250401.4"}
                  2025-04-09T16:07:02,468 [ ] DEBUG AppBase No userTypes defined, allowing anyone access to all operations for this application
                  2025-04-09T16:07:02,469 [ ] DEBUG AppBase No public zero-argument method named '_null' found, performing generic datasource operation
                  2025-04-09T16:07:02,474 [ ] DEBUG SQLOrderClause no data; returning empty string
                  2025-04-09T16:07:02,477 [ ] DEBUG SQL 1372: Executing SQL query on 'dbJas': SELECT isc_userSkin.pk, isc_userSkin.name, isc_userSkin.baseSkin, isc_userSkin.userSettings, isc_userSkin.skinStylesCSS, isc_userSkin.thumbnail, isc_userSkin.created_by, isc_userSkin.created_at, isc_userSkin.modified_by, isc_userSkin.modified_at, isc_userSkin.version FROM isc_userSkin WHERE (LOWER(isc_userSkin.name)='1.1.9-13.1-p20250401.4')
                  2025-04-09T16:07:02,592 [ ] DEBUG PoolableSQLConnectionFactory makeObject() created an unpooled Connection '31135143'
                  2025-04-09T16:07:02,592 [ ] DEBUG SQLConnectionManager Borrowed connection '31135143' from DBCP
                  2025-04-09T16:07:02,592 [ ] INFO SQL Executing SQL query on 'dbJas': SELECT isc_userSkin.pk, isc_userSkin.name, isc_userSkin.baseSkin, isc_userSkin.userSettings, isc_userSkin.skinStylesCSS, isc_userSkin.thumbnail, isc_userSkin.created_by, isc_userSkin.created_at, isc_userSkin.modified_by, isc_userSkin.modified_at, isc_userSkin.version FROM isc_userSkin WHERE (LOWER(isc_userSkin.name)='1.1.9-13.1-p20250401.4')
                  2025-04-09T16:07:02,605 [ ] INFO SQLDriver Execute of select: SELECT isc_userSkin.pk, isc_userSkin.name, isc_userSkin.baseSkin, isc_userSkin.userSettings, isc_userSkin.skinStylesCSS, isc_userSkin.thumbnail, isc_userSkin.created_by, isc_userSkin.created_at, isc_userSkin.modified_by, isc_userSkin.modified_at, isc_userSkin.version FROM isc_userSkin WHERE (LOWER(isc_userSkin.name)='1.1.9-13.1-p20250401.4') on db: dbJas threw exception: java.sql.SQLSyntaxErrorException: ORA-00942: tabella o vista inesistente
                   - assuming stale connection and retrying query.
                  2025-04-09T16:07:02,605 [ ] DEBUG SQLConnectionManager About to close PoolGuardConnectionWrapper with hashcode "31135143"
                  2025-04-09T16:07:02,617 [ ] DEBUG PoolableSQLConnectionFactory makeObject() created an unpooled Connection '305446370'
                  2025-04-09T16:07:02,642 [ ] DEBUG SQL_ERROR Failed to execute query: SELECT isc_userSkin.pk, isc_userSkin.name, isc_userSkin.baseSkin, isc_userSkin.userSettings, isc_userSkin.skinStylesCSS, isc_userSkin.thumbnail, isc_userSkin.created_by, isc_userSkin.created_at, isc_userSkin.modified_by, isc_userSkin.modified_at, isc_userSkin.version FROM isc_userSkin WHERE (LOWER(isc_userSkin.name)='1.1.9-13.1-p20250401.4'), SQL error: ORA-00942: tabella o vista inesistente
                  
                  2025-04-09T16:07:02,643 [ ] DEBUG SQLConnectionManager About to close PoolGuardConnectionWrapper with hashcode "305446370"
                  2025-04-09T16:07:02,646 [ ] DEBUG SQLConnectionManager About to close PoolGuardConnectionWrapper with hashcode "1778331919"
                  2025-04-09T16:07:02,650 [ ] ERROR Download Problem sending static file: /Users/bosticco/iscSDK/tools/visualBuilder/wsmvn/Jat/target/Jat/isomorphic/skins/1.1.9-13.1-p20250401.4/JLight_Pink/load_skin.js
                  javax.script.ScriptException: java.sql.SQLSyntaxErrorException: ORA-00942: tabella o vista inesistente
                  
                      at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320) ~[groovy-jsr223-3.0.13.jar:3.0.13]
                      at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71) ~[groovy-jsr223-3.0.13.jar:3.0.13]
                      at DataSource isc_userSkin, operation: fetch, operationId: null.(Unknown Source) ~[?:?]
                      at com.isomorphic.scripting.ScriptXBase.evalScript(ScriptXBase.java:551) ~[isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.scripting.ScriptXBase.eval(ScriptXBase.java:76) ~[isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.rpc.Scripting.evalServerScript(Scripting.java:141) ~[isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.rpc.BuiltinRPC.evalServerScript(BuiltinRPC.java:763) ~[isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.datasource.DataSourceDMI.evalInlineScript(DataSourceDMI.java:1010) ~[isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.datasource.DataSourceDMI.evalInlineScript(DataSourceDMI.java:836) ~[isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.datasource.DataSourceDMI.execute(DataSourceDMI.java:236) ~[isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.datasource.DataSourceDMI.execute(DataSourceDMI.java:64) ~[isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:4777) ~[isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.util.SkinUtil.getSkinConfigMap(SkinUtil.java:521) ~[isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.servlet.ServletTools.sendStaticFile(ServletTools.java:1620) [isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.servlet.ServletTools.sendStaticFile(ServletTools.java:1525) [isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.servlet.FileDownload.doGet(FileDownload.java:225) [isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) [servlet-api.jar:?]
                      at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:178) [isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) [servlet-api.jar:?]
                      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.23]
                      at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-websocket.jar:8.5.23]
                      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.23]
                      at com.juve.spring.FrameOriginFilter.doFilter(FrameOriginFilter.java:36) [classes/:build 20250409133610]
                      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.23]
                      at com.juve.utils.Log4j2SessionFilter.doFilter(Log4j2SessionFilter.java:72) [classes/:build 20250409133610]
                      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.23]
                      at com.isomorphic.servlet.CompressionFilter._doFilter(CompressionFilter.java:263) [isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at com.isomorphic.servlet.BaseFilter.doFilter(BaseFilter.java:91) [isomorphic-core-rpc-13.1-p20250409.jar:?]
                      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.23]
                      at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:209) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
                      at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
                      at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
                      at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
                      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.23]
                      at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
                      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
                      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:185) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:8.5.23]
                      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [catalina.jar:8.5.23]
                      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [catalina.jar:8.5.23]
                      at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) [catalina.jar:8.5.23]
                      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [catalina.jar:8.5.23]
                      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [catalina.jar:8.5.23]
                      at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) [tomcat-coyote.jar:8.5.23]
                      at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-coyote.jar:8.5.23]
                      at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-coyote.jar:8.5.23]
                      at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-coyote.jar:8.5.23]
                      at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:8.5.23]
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_252]
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_252]
                      at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.5.23]
                      at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]
                  besides the fact that it is not using the correct skin name, but is using the subdirectory name, I don't understand why that query is being executed outside of the skin editor

                  Comment


                    #10
                    hi Claudio,

                    In terms of what's going on, user-skins can be used directly from the database outside of the Skin Editor, so the server-code that deals with user-skins isn't specific to the Skin Editor, and it currently expects user-skins to be directly in a sub-dir of skins, like skins/skinName. When the server receives a request for file-paths in the skins/ dir, if the isc_userSkin DS is available, it filters for a skin-name matching the first sub-dir in the path, hence it using your versioning-dir's name. In your case it looks like the DS is available but the table doesn't exist - adding the table or removing the DS should fix the error.

                    For the moment, you could also put your custom-skins directly in skins/, or move your versioning-dir outside of skins/, which will avoid the userSkin flow altogether (including the error you hit). If you move it outside of skins/ but at the same level, that will also address another issue you may have hit but not noticed, which is that the Shiva font is probably not being loaded due to a relative path in the CSS.

                    We'll look at better supporting skins nested inside the skins/ dir and address the relative-path issue.

                    Comment


                      #11
                      Hello, thanks for the clarification. Removing the isc_userSkin DataSource from the deployment solved the problem (and I don't need it in the application anyway).

                      So, if I understand correctly, it should be possible to load a custom skin from the database without including it in the deployment, right?

                      One last thing - sorry, but I think I’ve found a bug in the Skin Editor with version v13.1p_2025-04-09/Enterprise Development Only (the version from April 8 works fine). When trying to load a custom skin, I get the following error in the browser console:

                      Code:
                      *15:38:02.323:ERROR:FileLoader:CSS file https://localhost:8443/CustomSkins/isomorphic/skins/JLight_Pink/skin_styles_editor.css?isc_version=v13.1p_2025-04-09.css failed to load
                      Stack trace:
                      
                      
                          anonymous([object Event])
                              "isc.FileLoader.logError("CSS file "+_1+" failed to load");isc.FileLoader.fileLoaded(_2)"
                      ISC_Core.js:1478:85
                      And in the Tomcat logs:

                      Code:
                      INFORMAZIONI: === 2025-04-10 15:38:02,314 [ec-6] INFO RequestContext - URL: '/CustomSkins/isomorphic/skins/JLight_Pink/skin_styles_editor.css', User-Agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:137.0) Gecko/20100101 Firefox/137.0': Moz (Gecko) with Accept-Encoding header
                      === 2025-04-10 15:38:02,316 [ec-6] INFO Download - File /Users/bosticco/iscSDK/tools/visualBuilder/wsmvn/CustomSkins/target/CustomSkins/isomorphic/skins/JLight_Pink/skin_styles_editor.css not found, sending 404
                      In the previous version, it would correctly fetch the skin record from isc_userSkin.

                      Comment


                        #12
                        It's possible to load a custom skin from the database if the DS is available, yes, without exporting it to disk - in other words, you can create a skin in the Skin Editor and then just use it in some other app - once you've saved in Skin Editor, your latest skin is available right away.

                        Note that this capability is enhanced by new features which allow you to enter customCSS and customJS directly in the Skin Editor, rather than exporting the skin and modifying files - this content is injected into the skin at runtime by the server - so you can customize load_skin JS, skin_styles CSS and SVG content directly in the Skin Editor, click Save and then change to another page that uses that skin, and your changes will be in effect right away.

                        Note that these features probably won't be exposed in 13.1, but they are actually present in that branch - drop a note to support if you want to try it out in 13.1.

                        We'll take a look at the most recent error you hit and let you know when we have a fix.

                        Comment

                        Working...
                        X