You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by "Jean-Louis Boudart (JIRA)" <ji...@apache.org> on 2014/01/01 13:23:53 UTC

[jira] [Created] (IVY-1457) XmlModuleDescriptorWritter doesn't support fully extra infos elements

Jean-Louis Boudart created IVY-1457:
---------------------------------------

             Summary: XmlModuleDescriptorWritter doesn't support fully extra infos elements
                 Key: IVY-1457
                 URL: https://issues.apache.org/jira/browse/IVY-1457
             Project: Ivy
          Issue Type: Bug
          Components: Core
    Affects Versions: 2.3.0
            Reporter: Jean-Louis Boudart


Ivy supports a way to add your own elements into extends tag. 
Exemple :
{code:xml}
<info organisation="org.apache.easyant" module="standard-java-app" revision="0.1" status="integration" >
        <ea:build organisation="org.apache.easyant.buildtypes" module="build-std-java" revision="0.9">
            <ea:property name="run.main.classname" value="org.apache.easyant.example.Example"/>
            <ea:plugin organisation="org.apache.easyant.plugins" module="run-java" revision="0.9" />
        </ea:build>
    </info>
{code}

After invoking XmlModuleDescriptorWritter.write()
We get the following :
{code:xml}
<info organisation="org.apache.easyant"
                module="standard-java-app"
                revision="0.1"
                status="integration"
                publication="20131231193827"
        >
              <ea:property>
            </ea:property>
        </info>
{code}

We can notice a few things :
 * <ea:plugin> element is missing
 * <ea:build> element is missing
 *  wrong identation on ending <ea:property> (probably due to nested elements)
 * attributes from <ea:property> gets wiped


Here is the code form XmlModuleDescriptorParser.endElement() method :
{code:java}
else if (state == State.EXTRA_INFO) {
                getMd().addExtraInfo(qName, buffer == null ? "" : buffer.toString());
                buffer = null;
                state = State.INFO;
            } 
{code}

Unfortunatly buffer doesn't contains attributes and doesn't seems to handle nested element.

Here is the code writting extra infos elements from XmlModuleDescriptorWritter :

{code:java}
            for (Iterator it = md.getExtraInfo().entrySet().iterator(); it.hasNext();) {
                Map.Entry extraDescr = (Map.Entry) it.next();
                if (extraDescr.getValue() == null 
                        || ((String) extraDescr.getValue()).length() == 0) {
                    continue;
                }
                out.print("\t\t<");
                out.print(extraDescr.getKey());
                out.print(">");
                out.print(XMLHelper.escape((String) extraDescr.getValue()));
                out.print("</");
                out.print(extraDescr.getKey());
                out.println(">");
            }
{code}
Still no attributes support and all "contents" will be escaped.

I don't know how much this feature is used by the community but fixing this bug could break backward compatibility.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)