There is a bug where when you compare namespaces, the underlying code
does == instead of .equals(). I fixed it with some code like this:
m_grammar=loadGrammar();
m_model=m_grammar.toXSModel();
// This is a nasty bug in xerces. I suspect that somewhere under the
// covers it is doing an equality test using == instead of .equals().
for (int i=0;i<m_model.getNamespaces().getLength();i++)
{
//System.out.println(i + ":" + m_model.getNamespaces().item(i));
if (m_model.getNamespaces().item(i).equals(m_typeNamespace))
{
m_typeNamespace = m_model.getNamespaces().item(i);
}
}
This may be what you are encountering. If the namespaces contain the
same string, I force my internal one to a reference to the same string
instance as xerces will use internally. Nasty, but it will work until
the fix gets rolled out in the next release.
-----Original Message-----
From: Stanimir Stamenkov [mailto:[EMAIL PROTECTED]
Sent: Monday, October 25, 2004 5:14 AM
To: Xerces-J User
Subject: [XML Schema API] XSModel.getComponentsByNamespace() problem
Hello,
I've faced the following problem: The
'XSModel.getComponentsByNamespace()' method simply doesn't work for
me. I've tried pretty simple example:
-----"simple.xsd"
<?xml version="1.0" encoding="US-ASCII" ?>
<xs:schema
xmlns="http://www.geocities.com/stanio/otherthing"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.geocities.com/stanio/otherthing">
<xs:element name="info">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="description"
minOccurs="0" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
-----"simple.xsd"--
I've set the default namespace for the schema document to match the
'targetNamespace' although I'm not sure I need it (I've tried it
both ways - with and without it).
A call to 'XSModel.getComponents(XSConstants.ELEMENT_DECLARATION)'
returns an 'XSNamedMap' which contains the "info" element
declaration. However if I call:
XSModel.getComponentsByNamespace(XSConstants.ELEMENT_DECLARATION,
"http://www.geocities.com/stanio/otherthing");
I get a 'null' result although the API doc specifies it should
return an empty map even if it didn't find matching element. But the
real problem is that it doesn't find the matching element - "info".
Is this a know issue?
FWIW, If I don't use 'targetNamespace' and try:
XSModel.getComponentsByNamespace(XSConstants.ELEMENT_DECLARATION,
null);
I get a "positive" result.
--
Stanimir
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]