You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by bu...@apache.org on 2003/06/05 23:35:08 UTC

DO NOT REPLY [Bug 20525] New: - Invlalid ELEMENT_DECLARATION returned after printing the length of the components list

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20525>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20525

Invlalid ELEMENT_DECLARATION returned after printing the length of the components list

           Summary: Invlalid ELEMENT_DECLARATION returned after printing the
                    length of the components list
           Product: Xerces2-J
           Version: 2.4.0
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: XML Schema Structures
        AssignedTo: xerces-j-dev@xml.apache.org
        ReportedBy: karl@quotetech.com
                CC: karl@quotetech.com


Product version:  Xerces-J 2.4.0

OS version: Microsoft Windows 2000 [Version 5.00.2195]

JDK version: 
java version "1.4.2-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-beta-b19)
Java HotSpot(TM) Client VM (build 1.4.2-beta-b19, mixed mode)

This seems to be a problem with the latest Xerces (2.4.0) as well as the one I 
was using last fall (2.2.0). Basically just calling getComponents 
(...).getLength method on an XSModel object causes a future call for components 
of ELEMENT_DECLARATION (there are possibly more variations for failure as well) 
to fail.

I have a test schema (see below) and when I query the grammar object (AFTER 
printing out the length of the components) for the ELEMENT_DECLARATION's, in 
one case I get an exception thrown from Xerces and in another case I get the 
ATTRIBUTE_DECLARATION's instead! Here is the code snippet:

	
	XMLSchemaLoader xmlSchemaLoader = new XMLSchemaLoader();

	XMLInputSource xmlInputSource = new XMLInputSource (null, schemaFile.
	  getName (), schemaFile.toURI ().getPath ());

	FileInputStream inputStream = null;
	try
	{
		inputStream = new FileInputStream (schemaFile);
	}
	catch (Exception pException) { pException.printStackTrace (); }

	xmlInputSource.setByteStream (inputStream);


	// ***********************************************************
	// Variation 1 begin
	// ***********************************************************
	// Causes following exception:
	//java.lang.ArrayIndexOutOfBoundsException: 2
	//  at org.apache.xerces.util.SymbolHash.getValues(Unknown
	//    Source)
	//  at org.apache.xerces.impl.xs.util.XSNamedMapImpl.item(
	//  Unknown Source)
	XSGrammar schemaGrammar = null;
	try
	{
		schemaGrammar = (XSGrammar) xmlSchemaLoader.loadGrammar (
		  xmlInputSource);
	
		XSModel schemaModel = schemaGrammar.toXSModel();
	
		System.out.println ("Number of element components: " + 
schemaModel.
		  getComponents (XSConstants.ELEMENT_DECLARATION).getLength ());
	
		System.out.println ("Complex components begin:");
		XSNamedMap complexComponents = schemaModel.getComponents (
		  XSTypeDefinition.COMPLEX_TYPE);
		for (int i = 0; i < complexComponents.getLength (); i++)
		{
			System.out.println ("\tNamespace:Name: " + 
complexComponents.
			  item (i).getNamespace () + ":" + 
complexComponents.item  (i).
			  getName ());
		}
		System.out.println ("Complex components end...\n\n");
	
		XSNamedMap elementComponents = schemaModel.getComponents (
		  XSConstants.ELEMENT_DECLARATION);
		System.out.println ("Element components begin (" + 
elementComponents.
		  getLength () + ")");
		for (int i = 0; i < elementComponents.getLength (); i++)
		{
			// Exception thrown here ==> Buglet!!!
			System.out.println ("\tNamespace:Name: " + 
elementComponents.
			  item (i).getNamespace () + ":" + 
elementComponents.item (i).
			  getName ());
		}
		System.out.println ("Element components end...\n");
	
		System.out.println ("Attribute components begin:");
		XSNamedMap attributeComponents = schemaModel.getComponents (
		  XSConstants.ATTRIBUTE_DECLARATION);
		for (int i = 0; i < attributeComponents.getLength (); i++)
		{
			System.out.println ("\tNamespace:Name: " + 
attributeComponents.
			  item (i).getNamespace () + ":" + 
attributeComponents.item (i).
			  getName ());
		}
		System.out.println ("Attribute components end...\n");
	}
	catch (Exception pException)
	{
		pException.printStackTrace ();
	}
	// ***********************************************************
	// Variation 1 end
	// ***********************************************************
	
	
	
	// ***********************************************************
	// Variation 2 begin
	// ***********************************************************
	// Seems to cause the ATTRIBUTE_DECLARATION components to be
	// returned instead of ELEMENT_DECLARATION
	XSGrammar schemaGrammar = null;
	try
	{
		schemaGrammar = (XSGrammar) xmlSchemaLoader.loadGrammar (
		  xmlInputSource);
	
		XSModel schemaModel = schemaGrammar.toXSModel();
	
	
		System.out.println ("Number of complex components: " + 
schemaModel.
		  getComponents (XSTypeDefinition.COMPLEX_TYPE).getLength ());
		System.out.println ("Number of simple components: " + 
schemaModel.
		  getComponents (XSTypeDefinition.SIMPLE_TYPE).getLength ());
		
		System.out.println ("Number of element components: " + 
schemaModel.
		  getComponents (XSConstants.ELEMENT_DECLARATION).getLength ());
		
		System.out.println ("Number of attribute components: " + 
schemaModel.
		  getComponents (XSConstants.ATTRIBUTE_DECLARATION).getLength 
()); 
	
		System.out.println ("Complex components begin:");
		XSNamedMap complexComponents = schemaModel.getComponents (
		  XSTypeDefinition.COMPLEX_TYPE);
		for (int i = 0; i < complexComponents.getLength (); i++)
		{
			System.out.println ("\tNamespace:Name: " + 
complexComponents.
			  item (i).getNamespace () + ":" + 
complexComponents.item  (i).
			  getName ());
		}
		System.out.println ("Complex components end...\n\n");
	
		XSNamedMap elementComponents = schemaModel.getComponents (
		  XSConstants.ELEMENT_DECLARATION);
		System.out.println ("Element components begin (" + 
elementComponents.
		  getLength () + ")");
		for (int i = 0; i < elementComponents.getLength (); i++)
		{
			// Note: this shouldn't be null but it is!!! ==> 
buglet!!!
			if (elementComponents.item  (i) == null)
			{
				System.out.println ("Element was null...");
				continue;
			}
		
			System.out.println ("\tNamespace:Name: " + 
elementComponents.
			  item (i).getNamespace () + ":" + 
elementComponents.item (i).
			  getName ());
		}
		System.out.println ("Element components end...\n");
	
		System.out.println ("Attribute components begin:");
		XSNamedMap attributeComponents = schemaModel.getComponents (
		  XSConstants.ATTRIBUTE_DECLARATION);
		for (int i = 0; i < attributeComponents.getLength (); i++)
		{
			System.out.println ("\tNamespace:Name: " + 
attributeComponents.
			  item (i).getNamespace () + ":" + 
attributeComponents.item (i).
			  getName ());
		}
		System.out.println ("Attribute components end...\n");
	}
	catch (Exception pException)
	{
		pException.printStackTrace ();
	}
	// ***********************************************************
	// Variation 2 end
	// ***********************************************************

<<< Test schema begin >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<?xml version = "1.0" ?>
	<schema xmlns = "http://www.w3.org/2001/XMLSchema">
	
	<element name = "Customer">
		<complexType>
			<sequence>
				<element name = "FirstName" type = "string" />
				<element name = "MiddleInitial" type 
= "string" />
				<element name = "LastName" type = "string" />
			</sequence>
		</complexType>
	</element>

	<element name = "SimpleElement" type = "string" />

	<complexType name = "TestComplexType">
		<attribute name = "testAttribute" type = "string"/>
	</complexType>

	<attribute name = "languageUsed" type = "language"/>

</schema>
<<< Test schema end >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-j-dev-help@xml.apache.org