You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xerces.apache.org by Gaël Lalire <ga...@bull.net> on 2012/01/18 16:49:55 UTC
Attribute validation bug ?
Hello,
I endorsed xerces in my JVM and found a validation issue.
When you create an attribute with DOM level 1 method (Document.createAttribute or directly Element.setAttribute) the created element is
a Node which Node.getLocalName() must returns null.
In ...jaxp.validation.DOMValidatorHelper there is a method named fillQName which fetch localName and uri from a Node for a later validation.
In most of JDK (at least sun, apple and openjdk) if the localName is null, the method try to construct it from rawName parsing (see code below)
However xerces seems to ignore this patch, so is it because of ignorance or the will to refuse mix between level 1 and 2 ?
Regards,
Gael Lalire
--------------------------------
Extract from OpenJDK
398 private void fillQName(QName toFill, Node node) {
399 final String prefix = node.getPrefix();
400 final String localName = node.getLocalName();
401 final String rawName = node.getNodeName();
402 final String namespace = node.getNamespaceURI();
403
404 toFill.uri = (namespace != null && namespace.length() > 0) ? fSymbolTable.addSymbol(namespace) : null;
405 toFill.rawname = (rawName != null) ? fSymbolTable.addSymbol(rawName) : XMLSymbols.EMPTY_STRING;
406
407 // Is this a DOM level1 document?
408 if (localName == null) {
409 int k = rawName.indexOf(':');
410 if (k > 0) {
411 toFill.prefix = fSymbolTable.addSymbol(rawName.substring(0, k));
412 toFill.localpart = fSymbolTable.addSymbol(rawName.substring(k + 1));
413 }
414 else {
415 toFill.prefix = XMLSymbols.EMPTY_STRING;
416 toFill.localpart = toFill.rawname;
417 }
418 }
419 else {
420 toFill.prefix = (prefix != null) ? fSymbolTable.addSymbol(prefix) : XMLSymbols.EMPTY_STRING;
421 toFill.localpart = (localName != null) ? fSymbolTable.addSymbol(localName) : XMLSymbols.EMPTY_STRING;
422 }
423 }
---------------------------------------------------------------------
To unsubscribe, e-mail: j-users-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-users-help@xerces.apache.org
Re: Attribute validation bug ?
Posted by ke...@us.ibm.com.
Speaking as someone who was on the DOM Working Group at the time: Michael
is entirely correct.
The DOM Level 1 non-namespace-aware nodes and methods should be considered
DEPRECATED. They are simply not interoperable with DOM Level 2 code. The
only justification for continuing to use them is if you must interface
with ancient code which has never been updated to conform to DOM Level
2... and even then you should not expect those nodes to work properly with
a DOM Level 2 application.
Unfortunately the W3C did not have a formal deprecation mechansim, so the
DOM WG could not express it in these terms in the Recommendation. But that
really was our intent.
If anyone else is really conflating these, they are not W3C DOM compliant
and should fix their bug.
See also http://www.w3.org/DOM/faq.html#create (Is createAttribute("href")
the same as createAttributeNS(null, "href")?) for a few related words.
______________________________________
"You build world of steel and stone
I build worlds of words alone
Skilled tradespeople, long years taught:
You shape matter; I shape thought."
(http://www.songworm.com/lyrics/songworm-parody/ShapesofShadow.html)
From:
Michael Glavassevich <mr...@ca.ibm.com>
To:
j-users@xerces.apache.org,
Date:
01/19/2012 11:58 AM
Subject:
Re: Attribute validation bug ?
Hello Gael,
This is not a bug. Please see [1] for the previous discussion.
Thanks.
[1] https://issues.apache.org/jira/browse/XERCESJ-1163
Michael Glavassevich
XML Technologies and WAS Development
IBM Toronto Lab
E-mail: mrglavas@ca.ibm.com
E-mail: mrglavas@apache.org
Gaël Lalire <ga...@bull.net> wrote on 01/18/2012 10:49:55 AM:
> Hello,
>
> I endorsed xerces in my JVM and found a validation issue.
>
> When you create an attribute with DOM level 1 method
> (Document.createAttribute or directly Element.setAttribute) the
> created element is
> a Node which Node.getLocalName() must returns null.
>
> In ...jaxp.validation.DOMValidatorHelper there is a method named
> fillQName which fetch localName and uri from a Node for a later
validation.
> In most of JDK (at least sun, apple and openjdk) if the localName is
> null, the method try to construct it from rawName parsing (see code
below)
>
> However xerces seems to ignore this patch, so is it because of
> ignorance or the will to refuse mix between level 1 and 2 ?
>
> Regards,
> Gael Lalire
>
> --------------------------------
>
> Extract from OpenJDK
>
> 398 private void fillQName(QName toFill, Node node) {
> 399 final String prefix = node.getPrefix();
> 400 final String localName = node.getLocalName();
>
> 401 final String rawName = node.getNodeName();
> 402 final String namespace = node.getNamespaceURI();
> 403
> 404 toFill.uri = (namespace != null && namespace.length
> () > 0) ? fSymbolTable.addSymbol(namespace) : null;
> 405 toFill.rawname = (rawName != null) ?
> fSymbolTable.addSymbol(rawName) : XMLSymbols.EMPTY_STRING;
> 406
> 407 // Is this a DOM level1 document?
> 408 if (localName == null) {
> 409 int k = rawName.indexOf(':');
> 410 if (k > 0) {
>
> 411 toFill.prefix = fSymbolTable.addSymbol
> (rawName.substring(0, k));
> 412 toFill.localpart = fSymbolTable.addSymbol
> (rawName.substring(k + 1));
> 413 }
> 414 else {
> 415 toFill.prefix = XMLSymbols.EMPTY_STRING;
> 416 toFill.localpart = toFill.rawname;
> 417 }
> 418 }
> 419 else {
> 420 toFill.prefix = (prefix != null) ?
> fSymbolTable.addSymbol(prefix) : XMLSymbols.EMPTY_STRING;
>
> 421 toFill.localpart = (localName != null) ?
> fSymbolTable.addSymbol(localName) : XMLSymbols.EMPTY_STRING;
> 422 }
> 423 }
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: j-users-unsubscribe@xerces.apache.org
> For additional commands, e-mail: j-users-help@xerces.apache.org
Re: Attribute validation bug ?
Posted by Michael Glavassevich <mr...@ca.ibm.com>.
Hello Gael,
This is not a bug. Please see [1] for the previous discussion.
Thanks.
[1] https://issues.apache.org/jira/browse/XERCESJ-1163
Michael Glavassevich
XML Technologies and WAS Development
IBM Toronto Lab
E-mail: mrglavas@ca.ibm.com
E-mail: mrglavas@apache.org
Gaël Lalire <ga...@bull.net> wrote on 01/18/2012 10:49:55 AM:
> Hello,
>
> I endorsed xerces in my JVM and found a validation issue.
>
> When you create an attribute with DOM level 1 method
> (Document.createAttribute or directly Element.setAttribute) the
> created element is
> a Node which Node.getLocalName() must returns null.
>
> In ...jaxp.validation.DOMValidatorHelper there is a method named
> fillQName which fetch localName and uri from a Node for a later
validation.
> In most of JDK (at least sun, apple and openjdk) if the localName is
> null, the method try to construct it from rawName parsing (see code
below)
>
> However xerces seems to ignore this patch, so is it because of
> ignorance or the will to refuse mix between level 1 and 2 ?
>
> Regards,
> Gael Lalire
>
> --------------------------------
>
> Extract from OpenJDK
>
> 398 private void fillQName(QName toFill, Node node) {
> 399 final String prefix = node.getPrefix();
> 400 final String localName = node.getLocalName();
>
> 401 final String rawName = node.getNodeName();
> 402 final String namespace = node.getNamespaceURI();
> 403
> 404 toFill.uri = (namespace != null && namespace.length
> () > 0) ? fSymbolTable.addSymbol(namespace) : null;
> 405 toFill.rawname = (rawName != null) ?
> fSymbolTable.addSymbol(rawName) : XMLSymbols.EMPTY_STRING;
> 406
> 407 // Is this a DOM level1 document?
> 408 if (localName == null) {
> 409 int k = rawName.indexOf(':');
> 410 if (k > 0) {
>
> 411 toFill.prefix = fSymbolTable.addSymbol
> (rawName.substring(0, k));
> 412 toFill.localpart = fSymbolTable.addSymbol
> (rawName.substring(k + 1));
> 413 }
> 414 else {
> 415 toFill.prefix = XMLSymbols.EMPTY_STRING;
> 416 toFill.localpart = toFill.rawname;
> 417 }
> 418 }
> 419 else {
> 420 toFill.prefix = (prefix != null) ?
> fSymbolTable.addSymbol(prefix) : XMLSymbols.EMPTY_STRING;
>
> 421 toFill.localpart = (localName != null) ?
> fSymbolTable.addSymbol(localName) : XMLSymbols.EMPTY_STRING;
> 422 }
> 423 }
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: j-users-unsubscribe@xerces.apache.org
> For additional commands, e-mail: j-users-help@xerces.apache.org