Velocity Tools
  1. Velocity Tools
  2. VELTOOLS-81

Patch to add escaping for property values and property keys in java properties files.

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 1.3
    • Fix Version/s: 1.x, 1.4, 2.x
    • Component/s: GenericTools
    • Labels:
      None

      Description

      Special escaping is required when writing keys and values into java properties files.

      I have simply taken the escaping routines from java.util.Properties in the private method saveConvert(String, boolean) and have added two new methods to propertyKey and propertyValue used in the same way as the other escaping routines.

      This is useful for example when trying to templatize an install path, say.

      Suppose I have a velocity variable available at runtime $INSTALL_PATH

      I could templatize the following properties thus.
      ----before
      #Policy Director properties file
      #Wed Mar 28 16:26:19 BST 2007
      mgmt_domain=Default
      config_type=standalone
      tcd_enabled=false
      pd-home=C\:\\IBMTest1\\WebSphere
      AppServer/java/jre/PolicyDirector
      pdvar-home=C\:\\IBMTest1\\WebSphere
      AppServer/java/jre/PolicyDirector
      — templatized
      #Policy Director properties file
      #Wed Mar 28 16:26:19 BST 2007
      mgmt_domain=Default
      config_type=standalone
      tcd_enabled=false
      pd-home=$enc.propertyValue($

      {INSTALL_PATH})WebSphere
      AppServer/java/jre/PolicyDirector
      pdvar-home=$enc.propertyValue(${INSTALL_PATH}

      )WebSphere
      AppServer/java/jre/PolicyDirector

      1. escape_harmony.patch
        7 kB
        Phil Cornelius
      2. escape.patch
        7 kB
        Phil Cornelius

        Activity

        Nathan Bubna made changes -
        Fix Version/s 1.x [ 12312285 ]
        Fix Version/s 2.0 [ 12310350 ]
        Resolution Fixed [ 1 ]
        Status Open [ 1 ] Resolved [ 5 ]
        Fix Version/s 1.4 [ 12312330 ]
        Hide
        Nathan Bubna added a comment -

        The test code ran perfect for me, as did everything else in the patch. I've applied it to both the 1.x trunk and the 2.x branch. Great work! Thanks!

        Show
        Nathan Bubna added a comment - The test code ran perfect for me, as did everything else in the patch. I've applied it to both the 1.x trunk and the 2.x branch. Great work! Thanks!
        Hide
        Phil Cornelius added a comment -

        OK.. scrapped previous patch and started again with Harmony..

        I also added the unit tests but I could not get them to run.. I checked out a fresh working set from the trunk and couldn't get the tests to run there either..

        When the trunk test script is working I will revisit these tests to make sure they work.

        Show
        Phil Cornelius added a comment - OK.. scrapped previous patch and started again with Harmony.. I also added the unit tests but I could not get them to run.. I checked out a fresh working set from the trunk and couldn't get the tests to run there either.. When the trunk test script is working I will revisit these tests to make sure they work.
        Phil Cornelius made changes -
        Attachment escape_harmony.patch [ 12355249 ]
        Hide
        Nathan Bubna added a comment -

        I found the Properties implementation for Harmony:

        https://svn.apache.org/repos/asf/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Properties.java

        If you don't mind, i'll leave it to you to take the relevant code and change the patch.

        Show
        Nathan Bubna added a comment - I found the Properties implementation for Harmony: https://svn.apache.org/repos/asf/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Properties.java If you don't mind, i'll leave it to you to take the relevant code and change the patch.
        Hide
        Nathan Bubna added a comment -

        Actually, i just did a little investigating. It looks like the OpenJDK version unfortunately won't be acceptable either (see http://people.apache.org/~cliffs/3party.html#category-a for lists of licenses whose source we can and can't incorporate), since it is under GPLv2.

        Looks like it either has to be from Apache Harmony (whose SVN repo is baffling to me) or else written from scratch. In the latter case, it might be prudent to have you submit a CLA (http://www.apache.org/licenses/icla.txt). I know, i don't think any sane person/corporation would really cause problems over this one little method, but i'm no lawyer and would rather be safe than sorry. All this is to say, that the easiest path is probably to find the relevant code in Harmony. I might take a look for it at some point, if you don't get to it. This would be a useful patch to have, and i do appreciate it!

        It's a shame Sun didn't just make the method public or protected in the first place...

        Show
        Nathan Bubna added a comment - Actually, i just did a little investigating. It looks like the OpenJDK version unfortunately won't be acceptable either (see http://people.apache.org/~cliffs/3party.html#category-a for lists of licenses whose source we can and can't incorporate), since it is under GPLv2. Looks like it either has to be from Apache Harmony (whose SVN repo is baffling to me) or else written from scratch. In the latter case, it might be prudent to have you submit a CLA ( http://www.apache.org/licenses/icla.txt ). I know, i don't think any sane person/corporation would really cause problems over this one little method, but i'm no lawyer and would rather be safe than sorry. All this is to say, that the easiest path is probably to find the relevant code in Harmony. I might take a look for it at some point, if you don't get to it. This would be a useful patch to have, and i do appreciate it! It's a shame Sun didn't just make the method public or protected in the first place...
        Hide
        Phil Cornelius added a comment -

        Well that is the only way to ensure that the escaping is precisely the same..

        The method is saveConvert from java.lang.Properties and is a private method.. I see your point about copying it directly.. but If I wrote it from scratch it would almost certainly be nearly identical..

        I would check openjdk but the site is currently down for maintenance.. I am sure that it would probably be exactly the same code in which case there shouldn't be a problem including the code..

        Show
        Phil Cornelius added a comment - Well that is the only way to ensure that the escaping is precisely the same.. The method is saveConvert from java.lang.Properties and is a private method.. I see your point about copying it directly.. but If I wrote it from scratch it would almost certainly be nearly identical.. I would check openjdk but the site is currently down for maintenance.. I am sure that it would probably be exactly the same code in which case there shouldn't be a problem including the code..
        Hide
        Nathan Bubna added a comment -

        So, you just copied the saveConvert() method out of the JDK source? What version and what vendor? Unless this is copied from Apache Harmony (or maybe OpenJDK?), i don't think we can accept the code due to license issues.

        Show
        Nathan Bubna added a comment - So, you just copied the saveConvert() method out of the JDK source? What version and what vendor? Unless this is copied from Apache Harmony (or maybe OpenJDK?), i don't think we can accept the code due to license issues.
        Phil Cornelius made changes -
        Field Original Value New Value
        Attachment escape.patch [ 12354840 ]
        Phil Cornelius created issue -

          People

          • Assignee:
            Unassigned
            Reporter:
            Phil Cornelius
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development