Hi Maarten Sorry for the huge delay getting around to your patch. I've applied it now in full - sorry it took so long to verify.
I couldn't use 'patch' to apply your patches (which is one of the feeble excuses of why its taken so long) so I ended up having to do it by hand. I'd appreciate you verifying I applied the patch correctly. Incidentally, fancy being a committer Maarten, then you can apply your own patches to the DOM part of the code if you find any more glitches? James ----- Original Message ----- From: "Maarten Coene" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, December 20, 2001 11:33 PM Subject: [dom4j-dev] Patch for DOMElement and DOMDocument > Hi, > > I had some problems using a custom DocumentFactory (extending the > DOMDocumentFactory) and DOM4J. The problem was that DOM4J wasn't realy using > my DocumentFactory, but the default factory (in this case the > DOMDocumentFactory) or didn't use a factory at all! I have fixed this with > the 2 following patches (one for DOMElement and one for DOMDocument, both in > the org.dom4j.dom package). I have also included these patches as > attachment. > > Index: DOMElement.java > =================================================================== > RCS file: /cvsroot/dom4j/dom4j/src/java/org/dom4j/dom/DOMElement.java,v > retrieving revision 1.13 > diff -u -w -r1.13 DOMElement.java > --- DOMElement.java 2001/08/14 13:21:10 1.13 > +++ DOMElement.java 2001/12/20 23:06:36 > @@ -299,7 +299,9 @@ > // Implementation methods > > //------------------------------------------------------------------------- > protected DocumentFactory getDocumentFactory() { > - return DOCUMENT_FACTORY; > + DocumentFactory factory = getQName().getDocumentFactory(); > + return ( factory != null ) ? factory : DOCUMENT_FACTORY; > + > } > > protected Attribute attribute(org.w3c.dom.Attr attr) { > > Index: DOMDocument.java > =================================================================== > RCS file: /cvsroot/dom4j/dom4j/src/java/org/dom4j/dom/DOMDocument.java,v > retrieving revision 1.6 > diff -u -w -r1.6 DOMDocument.java > --- DOMDocument.java 2001/06/20 18:59:23 1.6 > +++ DOMDocument.java 2001/12/20 23:13:08 > > @@ -35,7 +36,7 @@ > public class DOMDocument extends DefaultDocument implements > org.w3c.dom.Document { > > /** The <code>DocumentFactory</code> instance used by default */ > - private static final DocumentFactory DOCUMENT_FACTORY = > DOMDocumentFactory.getInstance(); > + private static final DOMDocumentFactory DOCUMENT_FACTORY = > (DOMDocumentFactory) DOMDocumentFactory.getInstance(); > > > public DOMDocument() { > > @@ -192,7 +193,12 @@ > } > > public org.w3c.dom.DOMImplementation getImplementation() { > - return DOMDocumentFactory.singleton; > + if (getDocumentFactory() instanceof org.w3c.dom.DOMImplementation) > { > + return (org.w3c.dom.DOMImplementation) getDocumentFactory(); > + } else { > + return DOCUMENT_FACTORY; > + } > + > } > > public org.w3c.dom.Element getDocumentElement() { > > @@ -200,7 +206,7 @@ > } > > public org.w3c.dom.Element createElement(String tagName) throws > DOMException { > - return new DOMElement(tagName); > + return (org.w3c.dom.Element) > getDocumentFactory().createElement(tagName); > } > > public org.w3c.dom.DocumentFragment createDocumentFragment() { > > @@ -209,29 +215,30 @@ > } > > public org.w3c.dom.Text createTextNode(String data) { > - return new DOMText(data); > + return (org.w3c.dom.Text) getDocumentFactory().createText(data); > } > > public org.w3c.dom.Comment createComment(String data) { > - return new DOMComment(data); > + return (org.w3c.dom.Comment) > getDocumentFactory().createComment(data); > } > > public org.w3c.dom.CDATASection createCDATASection(String data) throws > DOMException { > - return new DOMCDATA(data); > + return (org.w3c.dom.CDATASection) > getDocumentFactory().createCDATA(data); > } > > public org.w3c.dom.ProcessingInstruction createProcessingInstruction( > String target, String data > ) throws DOMException { > - return new DOMProcessingInstruction(target, data); > + return (org.w3c.dom.ProcessingInstruction) > getDocumentFactory().createProcessingInstruction(target, data); > } > > public org.w3c.dom.Attr createAttribute(String name) throws > DOMException { > - return new DOMAttribute( DOCUMENT_FACTORY.createQName(name) ); > + QName qname = getDocumentFactory().createQName(name); > + return (org.w3c.dom.Attr) > getDocumentFactory().createAttribute(null, qname, null); > } > > public org.w3c.dom.EntityReference createEntityReference(String name) > throws DOMException { > - return new DOMEntityReference(name); > + return (org.w3c.dom.EntityReference) ((DOMDocumentFactory) > getDocumentFactory()).createEntity(name); > } > > public org.w3c.dom.Node importNode( > > @@ -244,15 +251,15 @@ > public org.w3c.dom.Element createElementNS( > String namespaceURI, String qualifiedName > ) throws DOMException { > - QName qname = DOCUMENT_FACTORY.createQName( qualifiedName, > namespaceURI ); > - return new DOMElement( qname ); > + QName qname = getDocumentFactory().createQName( qualifiedName, > namespaceURI ); > + return (org.w3c.dom.Element) > getDocumentFactory().createElement(qname); > } > > public org.w3c.dom.Attr createAttributeNS( > String namespaceURI, String qualifiedName > ) throws DOMException { > - QName qname = DOCUMENT_FACTORY.createQName( qualifiedName, > namespaceURI ); > - return new DOMAttribute( qname ); > + QName qname = getDocumentFactory().createQName( qualifiedName, > namespaceURI ); > + return (org.w3c.dom.Attr) > getDocumentFactory().createAttribute(null, qname, null); > } > > > > @@ -261,13 +268,15 @@ > } > > > - > // Implementation methods > > //------------------------------------------------------------------------- > protected DocumentFactory getDocumentFactory() { > + if (super.getDocumentFactory() == null) { > return DOCUMENT_FACTORY; > + } else { > + return super.getDocumentFactory(); > } > - > + } > } > > > Regards, > Maarten > _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com _______________________________________________ dom4j-dev mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dom4j-dev