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

Reply via email to