Grzegorz Kossakowski wrote:
Kamal pisze:
Hi,
I am responsible for JIRA issue 2211, including the associated patch. I will be honest, I didn't really understand what I did.

If your patch is a result of random typing then I'm truly impressed. ;-)

I knew enough to test it and make sure it worked, but there are some points I would like to clarify:

Firstly, I was looking at the code for jx:attribute, in particular this:

final Attributes EMPTY_ATTRS = new AttributesImpl();
String elementName = "attribute";

TextSerializer serializer = new TextSerializer();
StringWriter writer = new StringWriter();
serializer.setOutputCharStream(writer);

ContentHandlerWrapper contentHandler = new ContentHandlerWrapper(serializer, serializer);
contentHandler.startDocument();

contentHandler.startElement(JXTemplateGenerator.NS, elementName, elementName, EMPTY_ATTRS); Invoker.execute(contentHandler, objectModel, executionContext, macroContext, namespaces, this.getNext(), this.getEndInstruction()); contentHandler.endElement(JXTemplateGenerator.NS, elementName, elementName);
contentHandler.endDocument();
valueStr = writer.toString();
Am I right in saying that the text serializer is what ensures that XML ouput is not serialized in the attributes? I looked at the javadoc for TextSerializer and found little useful information.

Yep, I guess that TextSerializer implements text output method described for XSLT, see[2]. It means that <jx:attribute> will evaluate it's content (descendant elements) and will pull only text result of this evaluation. This enables one to use for example macros to generate the value of attribute.

I noticed that there is very little validation for jx:attribute. You can put in any old value for an attribute name, including invalid values such as values with spaces and colons (':') in them. I took a very different approach for jx:element and tested that the prefix and name are valid.

Obviously, your approach is much, much better. I appreciate your attention to details.

Is there are reason why jx:attribute does not check that the name is a correct name?

I think the only reason is that original authors forgot about implementing these checks. Are you a
volunteer to fix that? :)

Also, in xsp:element, apparently[1], you could not specify a namespace without a prefix and visa versa. I chose to relax this to just not allowing a prefix without a namespace. Is this right?

To be honest, I don't remember why such a rule has been established. Could anyone comment?

It should be totally ok to declare a namespace without a prefix[1]:

<?xml version="1.0"?>
<!-- initially, the default namespace is "books" -->
<book xmlns='urn:loc.gov:books'
      xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <title>Cheaper by the Dozen</title>
    <isbn:number>1568491379</isbn:number>
    <notes>
      <!-- make HTML the default namespace for some commentary -->
      <p xmlns='http://www.w3.org/1999/xhtml'>
          This is a <i>funny</i> book!
      </p>
    </notes>
</book>

[1] http://www.w3.org/TR/REC-xml-names/#defaulting

--
Leszek Gawron                         http://www.mobilebox.pl/krs.html
CTO at MobileBox Ltd.

Reply via email to