Uploaded image for project: 'Sling'
  1. Sling
  2. SLING-12302

CA Config access syntax is inconsistent in HTL

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Reopened
    • Major
    • Resolution: Unresolved
    • None
    • None
    • None
    • None

    Description

      I have a problem understanding how nested configs can be accessed in HTL or if there is a bug in the implementation.

      The documentation gives an example:
      ${caconfig['x.y.z.ConfigSample']['nestedConfig/stringParam']}

      However, it doesn't work when a configuration annotation class is defined.

      Steps to reproduce:
      1. Create a config node:

      /conf/we-retail/sling:configs/us/en/sling:configs/com.mysite.core.config.TestConfig

      <?xml version="1.0" encoding="UTF-8"?>
      <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
                jcr:primaryType="sling:OsgiConfig"
                email="test@example.com"
                enabled="{Boolean}true"
                number="{Long}123">
          <nested
                  jcr:primaryType="sling:OsgiConfig"
                  greeting="hello"/>
      </jcr:root>
      

      and reference it from some path.

      2. Access in HTL without configuration annotation class:

      Email: ${caconfig['com.mysite.core.config.TestConfig'].email}
      Number: ${caconfig['com.mysite.core.config.TestConfig'].number}
      Enabled: ${caconfig['com.mysite.core.config.TestConfig'].enabled}
      
      Greeting (config path): ${caconfig['com.mysite.core.config.TestConfig/nested'].greeting}
      Greeting (property path): ${caconfig['com.mysite.core.config.TestConfig']['nested/greeting']} 

      This gives the output:

      Email: test@example.com
      Number: 123
      Enabled: true
      
      Greeting (config path): hello
      Greeting (property path): hello 

      It works as expected.

      3. Create annotation classes:

      package com.mysite.core.config;
      
      import org.apache.sling.caconfig.annotation.Configuration;
      
      @Configuration
      public @interface TestConfig {
          String email();
          int number() default 5;
          boolean enabled();
          NestedConfig nested();
      }
      

      and

      package com.mysite.core.config;
      
      public @interface NestedConfig {
          String greeting();
      }
      

      The previous HTL will print:

      Email: test@example.com
      Number: 123
      Enabled: true
      
      Greeting (config path): hello
      Greeting (property path): 

      Accessing nested config value with property name path doesn't work. Is it expected?

      I'm working on support for CA Configs in AEM IDE, so I don't want to make it work in my AEM application but provide the correct syntax support.

      Attachments

        Activity

          People

            sseifert Stefan Seifert
            karol.lewandowski Karol Lewandowski
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: