Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
    * JBoss, Home of Professional Open Source
    * Copyright 2005, JBoss Inc., and individual contributors as indicated
    * by the @authors tag. See the copyright.txt in the distribution for a
    * full listing of individual contributors.
    *
    * This is free software; you can redistribute it and/or modify it
    * under the terms of the GNU Lesser General Public License as
    * published by the Free Software Foundation; either version 2.1 of
   * the License, or (at your option) any later version.
   *
   * This software is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this software; if not, write to the Free
   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
   */
 package org.jboss.xb.binding.parser.sax;
 
 import java.io.Reader;
 
 import  org.jboss.logging.Logger;

Author(s):
Alexey Loubyansky
Version:
$Revision: 2658 $
 
 public class SaxJBossXBParser
    implements JBossXBParser
 {
    private static final Logger log = Logger.getLogger(SaxJBossXBParser.class);
 
    private static final SAXParserFactory saxFactory = SAXParserFactory.newInstance();
    static
    {
       .setValidating(true);
       .setNamespaceAware(true);
       enableXInclude();
    }
 
    private final SAXParser parser;
    private final XMLReader reader;
    private boolean trace;

   
Enables XInclude if the saxFactory supports it.

NOTE: Checks the real factory class, not the JAXP interface.

 
    private static void enableXInclude()
    {
       try
       {
          Class clazz = .getClass();
          Method method = clazz.getMethod("setXIncludeAware"new Class[] { . });
          method.invoke(new Object[] { . });
       }
       catch (Exception e)
       {
          .trace("Not setting XIncludeAware"e);
       }
    }
    
    public SaxJBossXBParser()
       throws JBossXBException
    {
       try
       {
           = .newSAXParser();
          logParserInfo();
       }
       catch(Exception e)
       {
          throw new JBossXBException("Failed to create a new SAX parser"e);
       }
 
      try
      {
          = .getXMLReader();
      }
      catch(SAXException e1)
      {
         throw new JBossXBRuntimeException("Failed to get parser's XMLReader"e1);
      }
      // LexicalHandler
      try
      {
         .setProperty("http://xml.org/sax/properties/lexical-handler");
      }
      catch(Exception e)
      {
         .debug("LexicalHandler"e);
      }
/*
      setFeature(Unmarshaller.VALIDATION, true);
      setFeature(Unmarshaller.SCHEMA_VALIDATION, true);
      setFeature(Unmarshaller.SCHEMA_FULL_CHECKING, true);
      setFeature(Unmarshaller.DYNAMIC_VALIDATION, true);
      setFeature(Unmarshaller.NAMESPACES, true);
*/
   }
   // JBossXBParser implementation
   public void setEntityResolver(EntityResolver entityResolver)
      throws JBossXBException
   {
      .setEntityResolver(entityResolver);
   }
   public void setProperty(String nameObject value)
   {
      try
      {
         .setProperty(namevalue);
      }
      catch(SAXException e)
      {
         throw new JBossXBRuntimeException("Failed to set property on the XML reader"e);
      }
   }
   public void setFeature(String nameboolean value)
   {
      try
      {
         .setFeature(namevalue);
         .debug(name+" set to: "+.getFeature(name));
      }
      catch(SAXException e)
      {
         throw new JBossXBRuntimeException("Failed to set feature on the XMLReader"e);
      }
   }
   public void parse(String systemIdContentHandler handlerthrows JBossXBException
   {
      this. = handler;
       = .isTraceEnabled();
      logParserInfo();
      try
      {
         .parse(systemId);
      }
      catch(Throwable e)
      {
         throw new JBossXBException("Failed to parse source: " + getLocationAsString(systemId), e);
      }
   }
   public void parse(InputStream isContentHandler handlerthrows JBossXBException
   {
      this. = handler;
       = .isTraceEnabled();
      
      logParserInfo();
      try
      {
         .parse(new InputSource(is));
      }
      catch(Throwable e)
      {
         throw new JBossXBException("Failed to parse source: " + e.getMessage(), e);
      }
   }
   public void parse(Reader readerContentHandler handlerthrows JBossXBException
   {
      this. = handler;
       = .isTraceEnabled();
      
      logParserInfo();
      try
      {
         this..parse(new InputSource(reader));
      }
      catch(Throwable e)
      {
         throw new JBossXBException("Failed to parse source: " + e.getMessage(), e);
      }
   }
   public String getLocationAsString(String fileName)
   {
      Locator locator = .getDocumentLocator();
      if (locator == null)
         return fileName;
      else
      {
         JBossStringBuilder buffer = new JBossStringBuilder();
         String id = locator.getSystemId();
         if (id == null)
            id = locator.getPublicId();
         buffer.append(id).append('@');
         buffer.append(locator.getLineNumber());
         buffer.append(',');
         buffer.append(locator.getColumnNumber());
         return buffer.toString();
      }
   }
   private void logParserInfo()
   {
      StringBuffer sb = new StringBuffer();
      sb.append("Created parser: ").append()
      .append(", isNamespaceAware: ").append(.isNamespaceAware())
      .append(", isValidating: ").append(.isValidating())
      .append(", isXIncludeAware: ");
      try
      {
         sb.append(.isXIncludeAware());
      }
      catch(UnsupportedOperationException e)
      {
         sb.append("unsupported operation '").append(e.getMessage()).append('\'');
      }
      .debug(sb.toString());
   }
   // Inner
   private final class DelegatingContentHandler
      implements org.xml.sax.ContentHandler,
   {
      Locator locator;
      // Begin LexicalHandler
      public void comment(char[] chint startint lengththrows SAXException
      {
         // TODO Auto-generated method stub
         
      }
      public void startDTD(String nameString publicIdString systemIdthrows SAXException
      {
         if instanceof DtdAwareContentHandler )
         {
            dach.startDTD(namepublicIdsystemId);
         }
      }
      public void endDTD() throws SAXException
      {
         if instanceof DtdAwareContentHandler )
         {
            dach.endDTD();
         }
      }
      public void startEntity(String namethrows SAXException
      {
         // TODO Auto-generated method stub
         
      }
      public void endEntity(String namethrows 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()
      {
      }
      public void startDocument()
      {
      }
      public void characters(char ch[], int startint length)
      {
         // todo look at this later
         // do not notify content handler if these are just whitespaces
         //int i = start;
         //while(i < start + length)
         //{
         //   if(!Character.isWhitespace(ch[i++]))
         //   {
               .characters(chstartlength);
         //      break;
         //   }
         //}
      }
      public void ignorableWhitespace(char ch[], int startint length)
      {
      }
      public void endPrefixMapping(String prefix)
      {
         .endPrefixMapping(prefix);
      }
      public void skippedEntity(String name)
      {
      }
      public Locator getDocumentLocator()
      {
         return ;
      }
      
      public void setDocumentLocator(Locator locator)
      {
         this. = locator;
      }
      public void processingInstruction(String targetString data)
      {
         .processingInstruction(targetdata);
      }
      public void startPrefixMapping(String prefixString uri)
      {
         .startPrefixMapping(prefixuri);
      }
      public void endElement(String namespaceURIString localNameString qName)
      {
         String name = null;
         if()
         {
            if(localName.length() == 0)
            {
               name = qName;
            }
            else
            {
               name = namespaceURI + ':' + localName;
            }
            .trace("Enter endElement " + name);
         }
         try
         {
            .endElement(namespaceURIlocalNameqName);
         }
         finally
         {
            if()
            {
               .trace("Exit endElement  " + name);
            }
         }
      }
      public void startElement(String namespaceURIString localNameString qNameAttributes atts)
      {
         String name = null;
         if()
         {
            if(localName.length() == 0)
            {
               name = qName;
            }
            else
            {
               name = namespaceURI + ':' + localName;
            }
            .trace("Enter startElement " + name);
         }
         try
         {
            .startElement(namespaceURIlocalNameqNameattsnull);
         }
         finally
         {
            if()
            {
               .trace("Exit startElement  " + name);
            }
         }
      }
   }
   private static final class MetaDataErrorHandler
      implements ErrorHandler
   {
      public static final ErrorHandler INSTANCE = new MetaDataErrorHandler();
      public void warning(SAXParseException exception)
      {
         .warn(formatMessage(exception));
      }
      public void error(SAXParseException exception)
         throws SAXException
      {
         throw new SAXException(formatMessage(exception));
      }
      public void fatalError(SAXParseException exception)
         throws SAXException
      {
         throw new SAXException(formatMessage(exception));
      }
      public String formatMessage(SAXParseException exception)
      {
         StringBuffer buffer = new StringBuffer(50);
         buffer.append(exception.getMessage()).append(" @ ");
         String location = exception.getPublicId();
         if(location != null)
         {
            buffer.append(location);
         }
         else
         {
            location = exception.getSystemId();
            if(location != null)
            {
               buffer.append(location);
            }
            else
            {
               buffer.append("*unknown*");
            }
         }
         buffer.append('[');
         buffer.append(exception.getLineNumber()).append(',');
         buffer.append(exception.getColumnNumber()).append(']');
         return buffer.toString();
      }
   }
New to GrepCode? Check out our FAQ X