Uploaded image for project: 'Velocity'
  1. Velocity
  2. VELOCITY-912

Hyphen Handling in Identifiers that are inside java collection

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.1
    • 2.2
    • Engine
    • None

    Description

      I have this template:

      hello-world.properties.vm 
       ---------------------------------------------------------- 
       Slash: ${sample-slash}
       Slash in a Map: ${map.sample-slash}

      ----------------------------------------------------------
      And I have this sample test case:

       

      public class ApacheVelocityTest {
      private final String RESOURCES_DIR = "src/test/resources";
      
      @Test
      public void testVelocity() {
      Path templatePath = Paths.get(RESOURCES_DIR, "templates", "hello-world.properties.vm");
      
      
      VelocityEngine ve = new VelocityEngine();
      ve.setProperty(Velocity.PARSER_HYPHEN_ALLOWED, true);
      
      ve.init();
      Template t = ve.getTemplate(templatePath.toString());
      
      VelocityContext context = new VelocityContext();
      
      context.put("sample-slash", "SLASH");
      
      Map<String, String> sampleData = createData();
      context.put("map", sampleData);
      
      StringWriter writer = new StringWriter();
      t.merge(context, writer);
      
      System.out.println(writer.toString());
      }
      
      public Map<String, String> createData() {
      Map<String, String> mapData = new HashMap<String, String>();
      
      mapData.put("sample-slash", "USER1");
      
      return mapData;
      
      }
      }
      

       

      Now, the first "sample-slash" is rendered correctly but the one that is in the config map is not..it is throwing out an error like this:

      ---------------------------------------------------------------------

      org.apache.velocity.exception.ParseErrorException: Encountered "-slash}" at src\test\resources\templates\hello-world.properties.vm[line 5, column 22]
       Was expecting one of:
       "[" ...
       "|" ...
       "}" ...
       "}" ...
      at org.apache.velocity.Template.process(Template.java:154)
      

       

      The parser exception is being thrown by the object that is embedded into the java map.

      Do I have any workaround for this developers? Any pointers are greatly appreciated.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            cbrisson Claude Brisson
            mark.estrada Mark Estrada
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment