[
http://issues.apache.org/jira/browse/XERCESJ-1165?page=comments#action_12412378
]
Jonathan Mezach commented on XERCESJ-1165:
------------------------------------------
I see. I didn't notice this because for some reason, my debugger (Eclipse)
doesn't show me any local variables. But anyway, I am in fact using the
validator in Java 5, but isn't that in fact Xerces. As far as I can tell, the
Xerces implementation is used when validating. Unfortunately I'm not able to
check it right now.
> Problem resolving namespace prefix for QName, suspected bug in
> NamespaceSupport
> -------------------------------------------------------------------------------
>
> Key: XERCESJ-1165
> URL: http://issues.apache.org/jira/browse/XERCESJ-1165
> Project: Xerces2-J
> Type: Bug
> Components: XML Schema API
> Versions: 2.8.0
> Environment: Windows XP SP2, JRE 1.5.0_06
> Reporter: Jonathan Mezach
>
> I think I found a bug in the NamespaceSupport class which is part of
> Xerces2-J. I'm working on a project which involves elements which have a
> QName as type. Let me just write some XML to clarify:
> <xbrli:xbrl xmlns:iso4217="http://www.xbrl.org/2003/iso4217">
> <xbrli:unit id="EUR">
> <xbrli:measure>iso4217:EUR</xbrli:measure>
> </xbrli:unit>
> </xbrli:xbrl>
> I'm trying to validate this using JAXP with the Xerces implementation. The
> schema for the measure element is as follows:
> <xsd:element name="measure" type="QName"/>
> Now, when the validation is run an exception is thrown which reads as follows:
> UndeclaredPrefix: Cannot resolve 'iso4217:EUR' as a QName: the prefix
> 'iso4217' is not declared.
> This is quite strange because the namespace prefix is clearly declared at the
> top level element. So I decided to have a debug through the code and found
> that the problem is in the NamespaceSupport class. At the bottom of the
> getActualValue method of the QNameDV class the method getURI is called on the
> ValidationContext that was passed to it. This eventually calls the
> getURI(String) method on the NamespaceSupport class. The code here reads as
> follows:
> 1. // find prefix in current context
> 2. for (int i = fNamespaceSize; i > 0; i -= 2) {
> 3. if (fNamespace[i - 2] == prefix) {
> 4. return fNamespace[i - 1];
> 5. }
> 6. }
> 7.
> 8. // prefix not found
> 9. return null;
> The fNamespace instance variable is a String array and the prefix argument is
> a String as well. This leads me to conclude that line 3 of the above code
> should have been written as follows:
> if (fNamespace[i -2].equals(prefix)) {
> String comparison in Java is done using the equals method rather than the
> equals operator as far as I know.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
|