[jboss-svn-commits] JBoss Common SVN: r2154 - in jbossxb/trunk/src: main/java/org/jboss/xb/binding main/java/org/jboss/xb/binding/parser main/java/org/jboss/xb/binding/parser/sax test/java/org/jboss/test/xml/book

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Nov 5 18:16:41 EST 2006


Author: scott.stark at jboss.org
Date: 2006-11-05 18:16:33 -0500 (Sun, 05 Nov 2006)
New Revision: 2154

Modified:
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/DelegatingObjectModelFactory.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/ObjectModelBuilder.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/JBossXBParser.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/book/BookObjectFactory.java
Log:
DtdAwareContentHandler that extends ContentHandler to support key SAX2 LexicalHandler events such as startDTD


Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/DelegatingObjectModelFactory.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/DelegatingObjectModelFactory.java	2006-11-05 22:16:50 UTC (rev 2153)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/DelegatingObjectModelFactory.java	2006-11-05 23:16:33 UTC (rev 2154)
@@ -61,6 +61,21 @@
       }
    }
 
+   public void startDTD(String name, String publicId, String systemId)
+   {
+      try
+      {
+         Class[] sig = {String.class, String.class, String.class};
+         Method startDTD = typedFactory.getClass().getMethod("startDTD", sig);
+         Object[] args = {name, publicId, systemId};
+         startDTD.invoke(typedFactory, args);
+      }
+      catch(Exception e)
+      {
+         // Ignore
+      }
+   }
+
    public Object newRoot(Object root,
                          UnmarshallingContext navigator,
                          String namespaceURI,

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/ObjectModelBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/ObjectModelBuilder.java	2006-11-05 22:16:50 UTC (rev 2153)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/ObjectModelBuilder.java	2006-11-05 23:16:33 UTC (rev 2154)
@@ -47,7 +47,7 @@
  * @version <tt>$Revision$</tt>
  */
 public class ObjectModelBuilder
-   implements UnmarshallingContext, JBossXBParser.ContentHandler
+   implements UnmarshallingContext, JBossXBParser.DtdAwareContentHandler
 {
    /**
     * logger
@@ -289,6 +289,35 @@
       return root;
    }
 
+   public void startDTD(String name, String publicId, String systemId)
+   {
+      try
+      {
+         Class[] sig = {String.class, String.class, String.class};
+         Method startDTD = defaultFactory.getClass().getMethod("startDTD", sig);
+         Object[] args = {name, publicId, systemId};
+         startDTD.invoke(defaultFactory, args);
+      }
+      catch(Exception e)
+      {
+         log.debug("No startDTD found on factory: "+defaultFactory);
+      }
+   }
+   public void endDTD()
+   {
+      try
+      {
+         Class[] sig = {};
+         Method endDTD = defaultFactory.getClass().getMethod("endDTD", sig);
+         Object[] args = {};
+         endDTD.invoke(defaultFactory, args);
+      }
+      catch(Exception e)
+      {
+         log.debug("No endDTD found on factory: "+defaultFactory);
+      }      
+   }
+
    public void startElement(String namespaceURI,
                             String localName,
                             String qName,

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/JBossXBParser.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/JBossXBParser.java	2006-11-05 22:16:50 UTC (rev 2153)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/JBossXBParser.java	2006-11-05 23:16:33 UTC (rev 2154)
@@ -23,6 +23,7 @@
 
 import org.xml.sax.Attributes;
 import org.xml.sax.EntityResolver;
+import org.xml.sax.SAXException;
 import org.jboss.xb.binding.JBossXBException;
 import org.apache.xerces.xs.XSTypeDefinition;
 
@@ -51,6 +52,14 @@
 
       Object getRoot();
    }
+   /**
+    * Extended to support key SAX2 LexicalHandler events
+    */
+   interface DtdAwareContentHandler extends ContentHandler
+   {
+      public void startDTD(String name, String publicId, String systemId);
+      public void endDTD();
+   }
 
    void setEntityResolver(EntityResolver entityResolver) throws JBossXBException;
 

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java	2006-11-05 22:16:50 UTC (rev 2153)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java	2006-11-05 23:16:33 UTC (rev 2154)
@@ -109,6 +109,15 @@
       reader.setContentHandler(delegateHandler);
       reader.setErrorHandler(MetaDataErrorHandler.INSTANCE);
       reader.setEntityResolver(new JBossEntityResolver());
+      // LexicalHandler
+      try
+      {
+         reader.setProperty("http://xml.org/sax/properties/lexical-handler", delegateHandler);
+      }
+      catch(Exception e)
+      {
+         log.debug("LexicalHandler", e);
+      }
 
 /*
       setFeature(Unmarshaller.VALIDATION, true);
@@ -215,10 +224,59 @@
    // Inner
 
    private final class DelegatingContentHandler
-      implements org.xml.sax.ContentHandler
+      implements org.xml.sax.ContentHandler,
+      org.xml.sax.ext.LexicalHandler
    {
       Locator locator;
-      
+      // Begin LexicalHandler
+
+      public void comment(char[] ch, int start, int length) throws SAXException
+      {
+         // TODO Auto-generated method stub
+         
+      }
+
+      public void startDTD(String name, String publicId, String systemId) throws SAXException
+      {
+         if( contentHandler instanceof DtdAwareContentHandler )
+         {
+            DtdAwareContentHandler dach = (DtdAwareContentHandler) contentHandler;
+            dach.startDTD(name, publicId, systemId);
+         }
+      }
+      public void endDTD() throws SAXException
+      {
+         if( contentHandler instanceof DtdAwareContentHandler )
+         {
+            DtdAwareContentHandler dach = (DtdAwareContentHandler) contentHandler;
+            dach.endDTD();
+         }
+      }
+
+      public void startEntity(String name) throws SAXException
+      {
+         // TODO Auto-generated method stub
+         
+      }
+      public void endEntity(String name) throws SAXException
+      {
+         // TODO Auto-generated method stub
+         
+      }
+
+      public void startCDATA() throws SAXException
+      {
+         // TODO Auto-generated method stub
+         
+      }
+      public void endCDATA() throws SAXException
+      {
+         // TODO Auto-generated method stub
+         
+      }
+
+      // End LexicalHandler
+
       public void endDocument()
       {
       }

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/book/BookObjectFactory.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/book/BookObjectFactory.java	2006-11-05 22:16:50 UTC (rev 2153)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/book/BookObjectFactory.java	2006-11-05 23:16:33 UTC (rev 2154)
@@ -37,6 +37,10 @@
 {
    // ObjectModelFactory implementation
 
+   public void startDTD(String name, String publicId, String systemId)
+   {
+      System.err.print("startDTD, name="+name+", publicId="+publicId+", systemId="+systemId);
+   }
    /**
     * Return the root.
     */




More information about the jboss-svn-commits mailing list