Thanks for attention to my novice self-educational questions that bare no
practical sence. I attach my code and jar. I have no source (perhaps, you
never include it together with jars, and I need to compile the hole tree
myself?). I know not if it preserves line number after decompilation.

The essential lines of my code are
...
    NodeContainer nodeContainer = (NodeContainer) documentImpl;
...

    try
    {
 newChild = nodeContainer.appendChild (newChild);  // here it fails
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    }
    catch (DOMException e)
    {
 show (e);
    }
    println ("newChild = " + newChild);

    deep = false;     // fails for true !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    cloneNode = nodeContainer.cloneNode (deep);
    println ("cloneNode = " + cloneNode);
...
--------------------------------


Jeffrey Rodriguez wrote:

> Mr. Garbuzov, a question first.
> What is your nodeContainer variable? I know that it is a class that extends
> abstract class NodeContainer but which one: DocumentImpl, ElementImpl,etc.
>
> I am not able to reproduce your problem with the information that you
> provided.
>
> A ClassCastException is a runtime exception thrown when a program
> attemts to cas an instance of a class to another and that cast is
> not allowed.

--
Boris Garbuzov.
Mailing address:
Box 715, Seattle, Washington, 98111-0715, USA.
E-mail: [EMAIL PROTECTED], [EMAIL PROTECTED]
Telephone: 1(206)781-5165 (home), 1(206)576-4549 (office).
Resedential address: 139 NW 104 Street, Seattle, 98177, Wa, USA


package com.keystrokenet.loanproduct.xml.test;

import java.io.File;
import java.io.Reader;
import java.io.FileReader;
import java.io.Writer;
import java.io.FileWriter;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.StringWriter;
                     
import org.apache.xerces.parsers.DOMParser;
import org.xml.sax.InputSource;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Element;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Text;
import org.w3c.dom.Comment;
import org.w3c.dom.CDATASection;
import org.w3c.dom.DOMException;
import org.w3c.dom.ProcessingInstruction;
import org.w3c.dom.Attr;
import org.w3c.dom.EntityReference;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.NamedNodeMap;
import org.apache.xerces.dom.DocumentImpl;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.apache.xml.serialize.BaseMarkupSerializer;
import org.apache.xml.serialize.Serializer;
import org.apache.xml.serialize.DOMSerializer;
import org.xml.sax.DocumentHandler;
import org.xml.sax.ContentHandler;
import org.w3c.dom.traversal.TreeWalker;
import org.apache.xerces.dom.TreeWalkerImpl;
import org.w3c.dom.traversal.NodeFilter;
import org.apache.xerces.dom.NodeIteratorImpl;
import org.apache.xerces.dom.NodeContainer;
                        
import com.keystrokenet.testutil.Test;

/**
@author Boris
@since 14Mar2000
@genesis
My first XML code made out of Peter's.
*/
public class Lab
  extends Test
{
  // fields

  /** Document object can be formed out of HTML */
  private static final String HTML_FILE = "data/name.html";

  // methods

  /** Entry point. */
  public void executeTestBody()
    throws Exception
  {
    File file = new File (XmlFileBasic.DEFAULT_XML_FILE_NAME);
    //File file = new File (HTML_FILE);
    Reader reader = new FileReader (file);
    InputSource inputSource = new InputSource (reader);
    DOMParser parser = new DOMParser();
    /*
    parser.setFeature (
    "http://xml.org/sax/features/validation";,
    true
    );
    */
    parser.parse (inputSource);
    Document document = parser.getDocument();
    println ("document = " + document);

    // document methods

    DocumentType documentType = document.getDoctype();
    println ("documentType = " + documentType);

    DOMImplementation domImplementation = document.getImplementation();
    println ("domImplementation = " + domImplementation);

    Element rootElement = document.getDocumentElement();
    println ("rootElement = " + rootElement);

    String tagName = "huynya";
    Element createdElement = document.createElement (tagName);
    println ("createdElement = " + createdElement);
    println ("Can I reparse the document somehow? Parser can take document 
argument? Automatically reparsed?");

    DocumentFragment documentFragment = document.createDocumentFragment();
    println ("documentFragment = " + documentFragment);

    String data = "dataForTheNode";
    Text text = document.createTextNode (data);
    println ("text = " + text);

    String commentString = "commentString";
    Comment comment = document.createComment (commentString);
    println ("comment = " + comment);

    String cdataSectionString = "cdataSectionString";
    try
    {
      CDATASection cdataSection = document.createCDATASection 
(cdataSectionString);
      println ("cdataSection = " + cdataSection);
    }
    catch (DOMException e)
    {
      println ("Perhaps, document is HTML.");
      e.printStackTrace();
    }
    println ("Strange. Id does not throw exception for HTML document.");

    String target = "ProcessingInstructionTarget";
    String processingInstructionData = "processingInstructionData";
    ProcessingInstruction processingInstruction = 
document.createProcessingInstruction
      (target, processingInstructionData);
    println ("processingInstruction = " + processingInstruction);

    String attributeName = "attributeName";
    println ("Before creating attrubute: document = " + document);
    Attr attr = document.createAttribute (attributeName);
    println ("attr = " + attr);

    String entityName = "entityName";
    EntityReference entityReference = document.createEntityReference 
(entityName);
    println ("entityReference = " + entityReference);

    tagName = "tagName";
    NodeList nodes = document.getElementsByTagName (tagName);
    println ("nodes = " + nodes);

    println ("Node");

    println ("Fields of Node");
    println ("Node.ATTRIBUTE_NODE = " + Node.ATTRIBUTE_NODE);
    println ("Node.CDATA_SECTION_NODE = " + Node.CDATA_SECTION_NODE);
    println ("Node.COMMENT_NODE = " + Node.COMMENT_NODE);
    println ("Node.DOCUMENT_FRAGMENT_NODE = " + Node.DOCUMENT_FRAGMENT_NODE);
    println ("Node.DOCUMENT_NODE = " + Node.DOCUMENT_NODE);
    println ("Node.DOCUMENT_TYPE_NODE = " + Node.DOCUMENT_TYPE_NODE);

    Node documentNode = (Node) document;
    println ("documentNode = " + documentNode);

    println ("Methods of Node");

    String nodeName = documentNode.getNodeName();
    println ("nodeName = " + nodeName);

    String nodeValue = documentNode.getNodeValue();
    println ("nodeValue = " + nodeValue);

    String newNodeValue = "newNodeValue";
    try
    {
      documentNode.setNodeValue (newNodeValue);
    }
    catch (DOMException e)
    {
      println ("Lowful error: " + e);
      e.printStackTrace();
    }

    short nodeType = documentNode.getNodeType();
    println ("nodeType = " + nodeType);

    Node parentNode = documentNode.getParentNode();
    println ("parentNode = " + parentNode);

    NodeList nodeList = documentNode.getChildNodes();
    println ("nodeList = " + nodeList);

    Node firstChild = documentNode.getFirstChild();
    println ("firstChild = " + firstChild);

    Node lastChild = documentNode.getLastChild();
    println ("lastChild = " + lastChild);

    Node previousSibling = documentNode.getPreviousSibling();
    println ("previousSibling = " + previousSibling);

    Node nextSibling = documentNode.getNextSibling();
    println ("nextSibling = " + nextSibling);

    NamedNodeMap attributes = documentNode.getAttributes();
    println ("attributes = " + attributes);

    println ("Before getOwnerDocument():");
    println ("document = " + document);
    Document ownerDocument = documentNode.getOwnerDocument();
    println ("ownerDocument = " + ownerDocument);

    Node refChild = firstChild;
    Node newChild = text;
    println ("newChild = " + newChild);
    try
    {
      newChild = documentNode.insertBefore (newChild, refChild);
    }
    catch (DOMException e)
    {
      println ("Lawful failure: " + e);
    }

    Node oldChild = firstChild;
    try
    {
      newChild = documentNode.replaceChild (newChild, oldChild);
    }
    catch (DOMException e)
    {
      show (e);
    }

    try
    {
      newChild = documentNode.appendChild (newChild);
    }
    catch (DOMException e)
    {
      show (e);
    }

    boolean hasChildNodes = documentNode.hasChildNodes();
    println ("hasChildNodes = " + hasChildNodes);

    boolean deep = true;
    Node cloneNode = documentNode.cloneNode (deep);
    println ("cloneNode = " + cloneNode);

    println ("Attr's API");
    println ("attr = " + attr);

    String attrName = attr.getName();
    println ("attrName = " + attrName);

    boolean isSpecified = attr.getSpecified();
    println ("isSpecified = " + isSpecified);

    String attrValue = attr.getValue();
    println ("attrValue = " + attrValue);

    String newAttrValue = "newAttrValue";
    attr.setValue (newAttrValue);
    println ("attr = " + attr);

    println ("DOMImplementation's API");
    println ("domImplementation = " + domImplementation);

    String feature = "feature";
    String version = "version";
    boolean hasFeature = domImplementation.hasFeature (feature, version);
    println ("hasFeature = " + hasFeature);


    println ("NodeList's API");
    tagName = "product";
    println ("document = " + document);
    NodeList productNodes = document.getElementsByTagName (tagName);
    println ("productNodes = " + productNodes);

    int length = productNodes.getLength();
    println ("length = " + length);
    int extra = 2;
    println ("extra = " + extra);
    for (int itemIndex = 0; itemIndex < length + extra; itemIndex++)
    {
      Node item = productNodes.item (itemIndex);
      println ("item [" + itemIndex + "] = " + item);
    }

    println ("NamedNodeMap's API");
    Node firstProductItem = productNodes.item (0);
    NamedNodeMap namedNodeMap = attributes = firstProductItem.getAttributes();
    println ("namedNodeMap = " + namedNodeMap);

    String attrubuteName = "id";
    Node namedItem = namedNodeMap.getNamedItem (attrubuteName);
    println ("namedItem = " + namedItem);
/*
java.lang.ClassCastException: org.apache.xerces.dom.TextImpl
        at 
org.apache.xerces.dom.NamedNodeMapImpl.setNamedItem(NamedNodeMapImpl.java:304)
        at 
com.keystrokenet.loanproduct.xml.test.Lab.executeTestBody(Lab.java:265)
*/
    println ("The following failure is not totally lawful. I do not understand 
it.");
    try
    {
      Node existingNode = namedNodeMap.setNamedItem (newChild);
      println ("existingNode = " + existingNode);
    }
    catch (Exception e)
    {
      show (e);
    }

    nodeName = namedItem.getNodeName();
    Node removedNode = namedNodeMap.removeNamedItem (nodeName);
    println ("removedNode = " + removedNode);

    length = namedNodeMap.getLength();
    println ("length = " + length);
    extra = 2;
    println ("extra = " + extra);
    for (int itemIndex = 0; itemIndex < length + extra; itemIndex++)
    {
      Node itemByIndex = namedNodeMap.item (itemIndex);
      println ("itemByIndex [" + itemIndex + "] = " + itemByIndex);
    }

    println ("Node's API = DocumentFragment's");
    println ("DocumentType's API");
    println ("documentType = " + documentType);

    String documentTypeName = documentType.getName();
    println ("documentTypeName = " + documentTypeName);

    NamedNodeMap entities = documentType.getEntities();
    println ("entities = " + entities);

    NamedNodeMap notations = documentType.getNotations();
    println ("notations = " + notations);


    println ("Node's API = EntityReference's");

    println ("Entity API");     
    int entitiesLength = entities.getLength();
    println ("entitiesLength = " + entitiesLength);
    println ("Since it is empty, I do not know where to take an instance.");    
    /*
public java.lang.String getPublicId()
public java.lang.String getSystemId()
public java.lang.String getNotationName()
    */
    println ("ProcessingInstruction's API");
    println ("processingInstruction = " + processingInstruction);

    String processingInstructionTarget = processingInstruction.getTarget();
    println ("processingInstructionTarget = " + processingInstructionTarget);
    
    processingInstructionData = processingInstruction.getData();
    println ("processingInstructionData = " + processingInstructionData);
    
    processingInstruction.setData (processingInstructionData);
    println ("processingInstruction = " + processingInstruction);

    println ("Start testing to create and print the document");
    
    File newFile = new File ("data/newFile.xml");
    Writer writer = new FileWriter (newFile);
    OutputFormat outputFormat = new OutputFormat();
    println ("Created default outputFormat = " + outputFormat);
    
    Document newDocunent = new DocumentImpl();
    println ("Created default newDocunent = " + newDocunent);

    XMLSerializer xmlSerializer = new XMLSerializer (writer, outputFormat);
    println ("xmlSerializer = " + xmlSerializer);

    println ("Upcast the serializer and test the methods of the super first.");
    BaseMarkupSerializer baseMarkupSerializer = (BaseMarkupSerializer) 
xmlSerializer;
    println ("baseMarkupSerializer = " + baseMarkupSerializer);

    println ("Upcast again and test just interface's methods. Start with 
Serializer.");
    Serializer serializer = (Serializer) baseMarkupSerializer;
    println ("serializer = " + serializer);

    File newByteFile = new File ("data/newByteFile.xml");
    OutputStream output = new FileOutputStream (newByteFile);
    println ("output = " + output);
    serializer.setOutputByteStream (output);
    println ("serializer = " + serializer);

    File newCharFile = new File ("data/newCharFile.xml");
    Writer charWriter = new FileWriter (newCharFile);
    serializer.setOutputCharStream (charWriter);
    println ("serializer.setOutputCharStream (charWriter); OK");

    serializer.setOutputFormat (outputFormat);
    println ("serializer.setOutputFormat (outputFormat); OK");
    
    DocumentHandler documentHandler = serializer.asDocumentHandler();
    println ("documentHandler = " + documentHandler);
    
    ContentHandler contentHandler = serializer.asContentHandler();
    println ("contentHandler = " + contentHandler);
    println ("(serializer == documentHandler) = " + (serializer == 
documentHandler));
    println ("(contentHandler == documentHandler) = " + (contentHandler == 
documentHandler));

    DOMSerializer domSerializer = serializer.asDOMSerializer();
    println ("domSerializer = " + domSerializer);
    println ("(serializer == domSerializer) = " + (serializer == 
domSerializer));

    println ("Test DOMSerializer's API");

    //domSerializer.serialize (rootElement);
    /*
    java.lang.ClassCastException: org.apache.xerces.dom.TextImpl
      at 
org.apache.xml.serialize.XMLSerializer.serializeElement(XMLSerializer.java:577)
      at 
org.apache.xml.serialize.BaseMarkupSerializer.serializeNode(BaseMarkupSerializer.java:827)
      at 
org.apache.xml.serialize.XMLSerializer.serializeElement(XMLSerializer.java:608)
      at 
org.apache.xml.serialize.BaseMarkupSerializer.serializeNode(BaseMarkupSerializer.java:827)
      at 
org.apache.xml.serialize.BaseMarkupSerializer.serialize(BaseMarkupSerializer.java:373)
      at com.keystrokenet.loanproduct.xml.test.Lab.executeTestBody(Lab.java:397)
    */

    domSerializer.serialize (createdElement);
    println ("newFile.length() = " + newFile.length());
    println ("newByteFile.length() = " + newByteFile.length());
    println ("newCharFile.length() = " + newCharFile.length());

    // fails likewise
    //domSerializer.serialize (document);
 
    domSerializer.serialize (documentFragment);
    println ("serialize newly created documentFragment - OK");
    
    
    println ("Test org.xml.sax.DocumentHandler's API");
    println ("documentHandler = " + documentHandler);

    documentHandler.startDocument();
    println ("documentHandler.startDocument() - OK");
    
    documentHandler.endDocument();
    println ("documentHandler.endDocument() - OK");
    
    char [] ch = {'a', 'b'};
    int start = 0;
    length = 1;
    documentHandler.characters (ch, start, length);
    println ("documentHandler.characters (ch, start, length); - OK");
    
    documentHandler.ignorableWhitespace (ch, start, length);
    println ("documentHandler.ignorableWhitespace (ch, start, length); - OK");

    documentHandler.processingInstruction (target, data);
    println ("documentHandler.processingInstruction (target, data); - OK");

    String unexistingName = "unexistingName";
    // in new version of Xerces the bug is fixed.
    //documentHandler.endElement (unexistingName);
    println ("documentHandler.endElement (unexistingName); - OK");


    // Now that the document is created we need to *serialize* it
    OutputFormat format = new OutputFormat (document, "8859_1", true);
    format.setLineSeparator ("\r\n");
    format.setLineWidth (72);
    format.setDoctype (null, "fibonacci.dtd");
    xmlSerializer = new XMLSerializer (System.out, format);
    Element root = document.createElement ("Pizda");
    xmlSerializer.serialize (root);
    /*
public void setDocumentLocator(Locator locator)
public void startElement(java.lang.String name,
                         AttributeList atts)
    */
    format  = new OutputFormat (document);
    StringWriter  stringOut = new StringWriter();
    XMLSerializer serial = new XMLSerializer (stringOut, format);
    //serial.serialize (document.getDocumentElement());
    serial.serialize (root);
    println ("stringOut.toString() = \n" + stringOut.toString());

    println ("org.w3c.dom.traversal package.");
    println ("org.w3c.dom.traversal.NodeFilter's API");
    println ("NodeFilter.FILTER_ACCEPT = " + NodeFilter.FILTER_ACCEPT);
    println ("NodeFilter.FILTER_REJECT = " + NodeFilter.FILTER_REJECT);
    println ("NodeFilter.FILTER_SKIP = " + NodeFilter.FILTER_SKIP);
    println ("NodeFilter.SHOW_ALL = " + NodeFilter.SHOW_ALL);
    println ("NodeFilter.SHOW_ATTRIBUTE = " + NodeFilter.SHOW_ATTRIBUTE);
    println ("NodeFilter.SHOW_CDATA_SECTION = " + 
NodeFilter.SHOW_CDATA_SECTION);
    println ("NodeFilter.SHOW_COMMENT = " + NodeFilter.SHOW_COMMENT);
    println ("NodeFilter.SHOW_DOCUMENT = " + NodeFilter.SHOW_DOCUMENT);
    println ("NodeFilter.SHOW_DOCUMENT_FRAGMENT = " + 
NodeFilter.SHOW_DOCUMENT_FRAGMENT);
    println ("NodeFilter.SHOW_DOCUMENT_TYPE = " + 
NodeFilter.SHOW_DOCUMENT_TYPE);
    println ("NodeFilter.SHOW_ELEMENT = " + NodeFilter.SHOW_ELEMENT);
    println ("NodeFilter.SHOW_ENTITY = " + NodeFilter.SHOW_ENTITY);
    println ("NodeFilter.SHOW_ENTITY_REFERENCE = " + 
NodeFilter.SHOW_ENTITY_REFERENCE);
    println ("NodeFilter.SHOW_NOTATION = " + NodeFilter.SHOW_NOTATION);
    println ("NodeFilter.SHOW_PROCESSING_INSTRUCTION = " + 
NodeFilter.SHOW_PROCESSING_INSTRUCTION);

    println ("org.w3c.dom.traversal.NodeFilter's API");
    NodeFilter nodeFilter = new MyNodeFilter();
    int whatToShow = NodeFilter.SHOW_ALL; 
    short accept = nodeFilter.acceptNode (root);

    println ("org.w3c.dom.traversal.TreeWalker's API");
    println ("org.apache.xerces.dom.TreeWalkerImplr's API");
    println ("Constructor?");
    boolean entityReferenceExpansion = false; 
    TreeWalkerImpl treeWalkerImpl = new TreeWalkerImpl (root, whatToShow, 
nodeFilter, entityReferenceExpansion);
    Node walkedRoot = treeWalkerImpl.getRoot();
    println ("walkedRoot = " + walkedRoot);

    whatToShow = treeWalkerImpl.getWhatToShow(); 
    println ("whatToShow = " + whatToShow);

    nodeFilter = treeWalkerImpl.getFilter(); 
    println ("nodeFilter = " + nodeFilter);

    nodeFilter = treeWalkerImpl.getFilter(); 
    println ("nodeFilter = " + nodeFilter);

    boolean isExpandEntityReferences = 
treeWalkerImpl.getExpandEntityReferences(); 
    println ("isExpandEntityReferences = " + isExpandEntityReferences);

    Node currentNode = treeWalkerImpl.getCurrentNode(); 
    println ("currentNode = " + currentNode);

    treeWalkerImpl.setCurrentNode (currentNode); 
    println ("setCurrentNode() OK");

    parentNode = treeWalkerImpl.parentNode(); 
    println ("parentNode = " + parentNode);

    firstChild = treeWalkerImpl.firstChild(); 
    println ("firstChild = " + firstChild);

    lastChild = treeWalkerImpl.lastChild(); 
    println ("lastChild = " + lastChild);

    previousSibling = treeWalkerImpl.previousSibling(); 
    println ("previousSibling = " + previousSibling);

    nextSibling = treeWalkerImpl.nextSibling(); 
    println ("nextSibling = " + nextSibling);

    Node previousNode = treeWalkerImpl.previousNode(); 
    println ("previousNode = " + previousNode);

    Node nextNode = treeWalkerImpl.nextNode(); 
    println ("nextNode = " + nextNode);

    println ("NodeIteratorImpl's API.");
    println ("Constructor");

    DocumentImpl documentImpl = (DocumentImpl) document;
    NodeIteratorImpl nodeIteratorImpl = new NodeIteratorImpl
    (
        documentImpl,
        root,
        whatToShow,
        nodeFilter,
        entityReferenceExpansion
    );

    println ("nodeIteratorImpl = " + nodeIteratorImpl);

    Node rootNode = nodeIteratorImpl.getRoot();
    println ("root = " + root);

    whatToShow = nodeIteratorImpl.getWhatToShow();
    println ("whatToShow = " + whatToShow);

    nodeFilter = nodeIteratorImpl.getFilter();
    println ("nodeFilter = " + nodeFilter);

    boolean expandEntityReferences = 
nodeIteratorImpl.getExpandEntityReferences();
    println ("expandEntityReferences = " + expandEntityReferences);

    nextNode = nodeIteratorImpl.nextNode();
    println ("nextNode = " + nextNode);

    nextNode = nodeIteratorImpl.previousNode();
    println ("previousNode = " + previousNode);

    nodeIteratorImpl.removeNode (previousNode);
    println ("previousNode = " + previousNode);

    nodeIteratorImpl.detach();
    println ("nodeIteratorImpl = " + nodeIteratorImpl);

    println ("NodeContainer's API");
    NodeContainer nodeContainer = (NodeContainer) documentImpl;
    println ("nodeContainer = " + nodeContainer);

    try
    {
        newChild = nodeContainer.appendChild (newChild);
    }
    catch (DOMException e)
    {
        show (e);
    }
    println ("newChild = " + newChild);

    deep = false; // fails for true
    cloneNode = nodeContainer.cloneNode (deep);
    println ("cloneNode = " + cloneNode);

    hasChildNodes = nodeContainer.hasChildNodes();
    println ("hasChildNodes = " + hasChildNodes);

    NodeList childNodes = nodeContainer.getChildNodes();
    println ("childNodes = " + childNodes);

    firstChild = nodeContainer.getFirstChild();
    println ("firstChild = " + firstChild);

    lastChild = nodeContainer.getLastChild();
    println ("lastChild = " + lastChild);

    length = nodeContainer.getLength();
    println ("length = " + length);

    nodeContainer.normalize();
    println ("normalize - OK");

    boolean readOnly = true;
    deep = false;
    nodeContainer.setReadOnly (readOnly, deep);
    println ("setReadOnly - OK");

    /*
    
    */

  }

}

Reply via email to