[jdom-interest] Entities with inner structure (proposed fix)

Gabor Greif gabor at no.netopia.com
Tue Jul 4 04:18:05 PDT 2000


I would underline Steve's diagnosis and add one more twist.
The inEntity instance variable has  to be updated to mirror the class of
the object on the top of the stack.


In SAXBuilder.startElement:

        if (atRoot) {
            document.setRootElement(element);
            stack.push(element);
            atRoot = false;
        } else {
        	  Object peeked = stack.peek();
            if (inEntity)
            {
            	((Entity)peeked).addChild(element);
            	inEntity = false;
            }
            else
            	((Element)peeked).addChild(element);

            stack.push(element);
        }

In SAXBuilder.endElement:

        stack.pop();
        
        inEntity = !stack.empty() && stack.peek() instanceof Entity;


Of course a common (abstract) baseclass to Element and Entity factoring out
their intersection would be the best solution (as suggested by Steve).

	Gabor

On Wed, Jun 21, 2000 20:49 Uhr, Steve Weiss <mailto:sweiss at aamc.org> wrote:
>I've had trouble trying to use Entities also, and it looks to me like
>there is a problem in SAXBuilder.java.  In startElement(), at line 561
>(beta4 release) there is this:
>
>    if (atRoot) {
>        document.setRootElement(element);
>        stack.push(element);
>        atRoot = false;
>    } else {
>        ((Element)stack.peek()).addChild(element); <<---- throws
>ClassCastException
>        stack.push(element);
>    }
>
>It looks like the ClassCastException is being thrown when an Entity
>comes off the stack rather than an Element. Looking at these two
>classes, it seems that both could extend some TBD AbstractXmlThing
>class, which might solve this problem (i.e, cast to AbstractXmlThing
>instead of Element). Of course, I could be way off on this.
>
>-Steve
>
>Gabor Greif wrote:
>> 
>> I get an exception when parsing something like
>> 
>> <tag>
>>         &CancelButton;
>> </tag>
>> 
>> where CancelButton is an entity that is not string valued but consists
of
>> tag(s):
>> 
>> <!ENTITY CancelButton "<pane type=&#x27;Button&#x27;><ostype
>> name=&#x27;id&#x27;>&CancelButtonID;</ostype><string
>> name=&#x22;label&#x22;>Cancel</string></pane>" >
>> 
>> I am using JDOM b4.
>> 
>> What is the preferred way to use this feature?
>> 
>> I would propose that a subclass of Entity would be created in the "tag"
>> Element, that would have a method for parsing the internal structure of
the
>> entity and giving back its constituents.
>> 
>> Any ideas?
>> 
>> Thanks,
>> 
>>         Gabor








More information about the jdom-interest mailing list