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 Tim Davidson <ti...@greenhatconsulting.com> on 2003/12/17 17:35:25 UTC

How can you prevent DeferredTextImpl?

Hi,

 I've searched the archives and this details my problem, but doesnt offer me a solution. Basically, we need to be able to load a DOM and tell the builder not to create any nodes which are DeferredTextImpl's. We havn't had this problem 'till we added 

      transformer.setOutputProperty(OutputKeys.INDENT, "yes");

to saving a DOM. Now when we load the DOM everwhere were we have (Element)nodes.getNode(i) it causes a ClassCastException. The exception is because now node's are not exclusively Elements but DeferredTextImpl's aswell (see http://xml.apache.org/xerces-j/apiDocs/org/apache/xerces/dom/DeferredTextImpl.html). 
We expected that 

	factory.setIgnoringElementContentWhitespace(true);

would solve the problem, but it didn't. I've also tried document.normalise() after generating the DOM but we are still getting the CCE's?

 We can't normalise or validate against a dtd when saving as we sometimes load in externally generated XML files.

Any help would be much apprecitated.

<code>
   public static Document generateDOM(InputSource p_is)
      throws SAXException, IOException, ParserConfigurationException
   {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

      factory.setIgnoringElementContentWhitespace(true);

      factory.setIgnoringComments(true);

      DocumentBuilder builder = factory.newDocumentBuilder();
      
      return builder.parse(p_is);
   }
</code>

From: Jeff Greif <jg...@alumni.princeton.edu>
Subject: ClassCastException
Date: Thu, 7 Aug 2003 08:05:07 -0700
Content-Type: text/plain;
	charset="iso-8859-1"

A DeferredTextImpl is a text node, not any kind of Element.  This could
happen if
  -- the document structure had changed and the code hadn't kept up
  -- more likely, the treatment of white space is different, so a text node
is now appearing (and didn't on the other machines) between elements, e.g.
the x and y children of z in <z><x/><y/></z>.  This would happen if the
document weren't normalized and was not validated against a DTD or Schema.

Jeff

----- Original Message ----- 
From: "Matt Cohen" <mc...@ifvisions.com>
To: <xe...@xml.apache.org>
Sent: Thursday, August 07, 2003 12:24 AM
Subject: ClassCastException


> Hi,
>
> I've been developing using Xerces 2.4.0 and have successfully completed
xsd
> validation with schema in my application.
>
> However, now that I've moved it to our test machines, I'm getting the
> following exception:
>
> ClassCastException: com.apache.xerces.dom.DeferredTextImpl
>
> when I try to cast a Node to an Element:
>
> Element elem = (Element)sourceElem.getFirstChild();
>
> And sourceElem is definately not null.
>
> Now, I have xercesImpl.jar at the front of the classpath so no other class
> copy could be picked up instead.  And I can't seem to get why this is so?
> Is there any other possible package that could cause this?  Anyone have
any
> thoughts?
>
> Thanks,
> -Matt

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