xerces-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mrgla...@apache.org
Subject cvs commit: xml-xerces/java/src/org/apache/xerces/util SAXMessageFormatter.java
Date Thu, 05 Feb 2004 21:30:09 GMT
mrglavas    2004/02/05 13:30:09

  Modified:    java/src/org/apache/xerces/parsers AbstractSAXParser.java
               java/src/org/apache/xerces/jaxp SAXParserImpl.java
  Added:       java/src/org/apache/xerces/impl/msg SAXMessages.properties
               java/src/org/apache/xerces/util SAXMessageFormatter.java
  Log:
  Finally... Localizing messages for SAX. Created a new
  message formatter for SAX messages and replaced
  all the clear text with message keys.
  
  Revision  Changes    Path
  1.48      +47 -43    xml-xerces/java/src/org/apache/xerces/parsers/AbstractSAXParser.java
  
  Index: AbstractSAXParser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/AbstractSAXParser.java,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- AbstractSAXParser.java	3 Feb 2004 23:18:53 -0000	1.47
  +++ AbstractSAXParser.java	5 Feb 2004 21:30:09 -0000	1.48
  @@ -64,6 +64,7 @@
   import org.apache.xerces.xs.PSVIProvider;
   import org.apache.xerces.util.EntityResolverWrapper;
   import org.apache.xerces.util.ErrorHandlerWrapper;
  +import org.apache.xerces.util.SAXMessageFormatter;
   import org.apache.xerces.util.SymbolHash;
   import org.apache.xerces.xni.Augmentations;
   import org.apache.xerces.xni.NamespaceContext;
  @@ -1479,10 +1480,9 @@
                   if (suffixLength == Constants.STRING_INTERNING_FEATURE.length() &&

                       featureId.endsWith(Constants.STRING_INTERNING_FEATURE)) {
                       if (!state) {
  -                        // REVISIT: Localize this error message. -Ac
                           throw new SAXNotSupportedException(
  -                            "PAR018 " + state + " state for feature \"" + featureId
  -                            + "\" is not supported.\n" + state + '\t' + featureId);
  +                            SAXMessageFormatter.formatMessage(fConfiguration.getLocale(),

  +                            "false-not-supported", new Object [] {featureId}));
                       }
                       return;
                   }
  @@ -1512,12 +1512,16 @@
               fConfiguration.setFeature(featureId, state);
           }
           catch (XMLConfigurationException e) {
  -            String message = e.getMessage();
  +            String identifier = e.getIdentifier();
               if (e.getType() == XMLConfigurationException.NOT_RECOGNIZED) {
  -                throw new SAXNotRecognizedException(message);
  +                throw new SAXNotRecognizedException(
  +                    SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                    "feature-not-recognized", new Object [] {identifier}));
               }
               else {
  -                throw new SAXNotSupportedException(message);
  +                throw new SAXNotSupportedException(
  +                    SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                    "feature-not-supported", new Object [] {identifier}));
               }
           }
   
  @@ -1588,12 +1592,16 @@
               return fConfiguration.getFeature(featureId);
           }
           catch (XMLConfigurationException e) {
  -            String message = e.getMessage();
  +            String identifier = e.getIdentifier();
               if (e.getType() == XMLConfigurationException.NOT_RECOGNIZED) {
  -                throw new SAXNotRecognizedException(message);
  +                throw new SAXNotRecognizedException(
  +                    SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                    "feature-not-recognized", new Object [] {identifier}));
               }
               else {
  -                throw new SAXNotSupportedException(message);
  +                throw new SAXNotSupportedException(
  +                    SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                    "feature-not-supported", new Object [] {identifier}));
               }
           }
   
  @@ -1637,12 +1645,9 @@
                           setLexicalHandler((LexicalHandler)value);
                       }
                       catch (ClassCastException e) {
  -                        // REVISIT: Localize this error message. -ac
                           throw new SAXNotSupportedException(
  -                        "PAR012 For propertyID \""
  -                        +propertyId+"\", the value \""
  -                        +value+"\" cannot be cast to LexicalHandler."
  -                        +'\n'+propertyId+'\t'+value+"\tLexicalHandler");
  +                            SAXMessageFormatter.formatMessage(fConfiguration.getLocale(),

  +                            "incompatible-class", new Object [] {propertyId, "org.xml.sax.ext.LexicalHandler"}));
                       }
                       return;
                   }
  @@ -1658,13 +1663,9 @@
                           setDeclHandler((DeclHandler)value);
                       }
                       catch (ClassCastException e) {
  -                        // REVISIT: Localize this error message. -ac
                           throw new SAXNotSupportedException(
  -                        "PAR012 For propertyID \""
  -                        +propertyId+"\", the value \""
  -                        +value+"\" cannot be cast to DeclHandler."
  -                        +'\n'+propertyId+'\t'+value+"\tDeclHandler"
  -                        );
  +                            SAXMessageFormatter.formatMessage(fConfiguration.getLocale(),

  +                            "incompatible-class", new Object [] {propertyId, "org.xml.sax.ext.DeclHandler"}));
                       }
                       return;
                   }
  @@ -1680,11 +1681,9 @@
                   //
                   if (suffixLength == Constants.DOM_NODE_PROPERTY.length() && 
                       propertyId.endsWith(Constants.DOM_NODE_PROPERTY)) {
  -                    // REVISIT: Localize this error message. -ac
                       throw new SAXNotSupportedException(
  -                        "PAR013 Property \""+propertyId+"\" is read only."
  -                        +'\n'+propertyId
  -                        ); // read-only property
  +                        SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                        "property-read-only", new Object [] {propertyId}));
                   }
                   //
                   // Drop through and perform default processing
  @@ -1710,12 +1709,16 @@
               fConfiguration.setProperty(propertyId, value);
           }
           catch (XMLConfigurationException e) {
  -            String message = e.getMessage();
  +            String identifier = e.getIdentifier();
               if (e.getType() == XMLConfigurationException.NOT_RECOGNIZED) {
  -                throw new SAXNotRecognizedException(message);
  +                throw new SAXNotRecognizedException(
  +                    SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                    "property-not-recognized", new Object [] {identifier}));
               }
               else {
  -                throw new SAXNotSupportedException(message);
  +                throw new SAXNotSupportedException(
  +                    SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                    "property-not-supported", new Object [] {identifier}));
               }
           }
   
  @@ -1778,11 +1781,10 @@
                   //
                   if (suffixLength == Constants.DOM_NODE_PROPERTY.length() && 
                       propertyId.endsWith(Constants.DOM_NODE_PROPERTY)) {
  -                    // REVISIT: Localize this error message. -Ac
  +                    // we are not iterating a DOM tree
                       throw new SAXNotSupportedException(
  -                    "PAR014 Cannot getProperty(\""+propertyId
  -                    +"\". No DOM Tree exists.\n"+propertyId
  -                    ); // we are not iterating a DOM tree
  +                        SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                        "dom-node-read-not-supported", null));
                   }
                   //
                   // Drop through and perform default processing
  @@ -1808,12 +1810,16 @@
               return fConfiguration.getProperty(propertyId);
           }
           catch (XMLConfigurationException e) {
  -            String message = e.getMessage();
  +            String identifier = e.getIdentifier();
               if (e.getType() == XMLConfigurationException.NOT_RECOGNIZED) {
  -                throw new SAXNotRecognizedException(message);
  +                throw new SAXNotRecognizedException(
  +                    SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                    "property-not-recognized", new Object [] {identifier}));
               }
               else {
  -                throw new SAXNotSupportedException(message);
  +                throw new SAXNotSupportedException(
  +                    SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                    "property-not-supported", new Object [] {identifier}));
               }
           }
   
  @@ -1842,11 +1848,10 @@
           throws SAXNotRecognizedException, SAXNotSupportedException {
   
           if (fParseInProgress) {
  -            // REVISIT: Localize this error message. -Ac
               throw new SAXNotSupportedException(
  -                "PAR011 Feature: http://xml.org/sax/properties/declaration-handler"
  -                +" is not supported during parse."
  -                +"\nhttp://xml.org/sax/properties/declaration-handler");
  +                SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                "property-not-parsing-supported",
  +                new Object [] {"http://xml.org/sax/properties/declaration-handler"}));
           }
           fDeclHandler = handler;
   
  @@ -1879,11 +1884,10 @@
           throws SAXNotRecognizedException, SAXNotSupportedException {
   
           if (fParseInProgress) {
  -            // REVISIT: Localize this error message. -Ac
               throw new SAXNotSupportedException(
  -            "PAR011 Feature: http://xml.org/sax/properties/lexical-handler"
  -            +" is not supported during parse."
  -            +"\nhttp://xml.org/sax/properties/lexical-handler");
  +                SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), 
  +                "property-not-parsing-supported",
  +                new Object [] {"http://xml.org/sax/properties/lexical-handler"}));
           }
           fLexicalHandler = handler;
   
  
  
  
  1.22      +28 -20    xml-xerces/java/src/org/apache/xerces/jaxp/SAXParserImpl.java
  
  Index: SAXParserImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/jaxp/SAXParserImpl.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- SAXParserImpl.java	8 May 2003 20:11:58 -0000	1.21
  +++ SAXParserImpl.java	5 Feb 2004 21:30:09 -0000	1.22
  @@ -3,7 +3,7 @@
    * The Apache Software License, Version 1.1
    *
    *
  - * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
  + * Copyright (c) 2000-2004 The Apache Software Foundation.  All rights 
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -69,18 +69,20 @@
   import org.xml.sax.SAXNotSupportedException;
   import org.xml.sax.XMLReader;
   
  +import org.apache.xerces.util.SAXMessageFormatter;
  +
   /**
  + * This is the implementation specific class for the
  + * <code>javax.xml.parsers.SAXParser</code>.
  + * 
    * @author Rajiv Mordani
    * @author Edwin Goei
  + * 
    * @version $Id$
    */
  -
  -/**
  - * This is the implementation specific class for the
  - * <code>javax.xml.parsers.SAXParser</code>. 
  - */
   public class SAXParserImpl extends javax.xml.parsers.SAXParser
  -        implements JAXPConstants {
  +    implements JAXPConstants {
  +
       private XMLReader xmlReader;
       private String schemaLanguage = null;     // null means DTD
       
  @@ -200,20 +202,26 @@
                                        Constants.SCHEMA_VALIDATION_FEATURE,
                                        false);
               } else {
  +                // REVISIT: It would be nice if we could format this message
  +                // using a user specified locale as we do in the underlying
  +                // XMLReader -- mrglavas
  +                throw new SAXNotSupportedException(
  +                    SAXMessageFormatter.formatMessage(null, "schema-not-supported", null));
  +            }
  +        } 
  +        else if(JAXP_SCHEMA_SOURCE.equals(name)) {
  +            String val = (String)getProperty(JAXP_SCHEMA_LANGUAGE);
  +            if ( val != null && W3C_XML_SCHEMA.equals(val) ) {
  +                xmlReader.setProperty(name, value);
  +            }
  +            else {
                   throw new SAXNotSupportedException(
  -                    "Unsupported schema language");
  +                    SAXMessageFormatter.formatMessage(null, 
  +                    "jaxp-order-not-supported", 
  +                    new Object[] {JAXP_SCHEMA_LANGUAGE, JAXP_SCHEMA_SOURCE}));
               }
  -        } else if(JAXP_SCHEMA_SOURCE.equals(name)){
  -					String val = (String)getProperty(JAXP_SCHEMA_LANGUAGE);
  -					if(val != null && W3C_XML_SCHEMA.equals(val)){
  -            			xmlReader.setProperty(name, value);
  -					}else
  -                		throw new SAXNotSupportedException(
  -								"'http://java.sun.com/xml/jaxp/properties/schemaLanguage' "+
  -								"property should be set before setting "+
  -								"'http://java.sun.com/xml/jaxp/properties/schemaSource'"+
  -								" property");
  -		}else{
  +		}
  +		else {
               xmlReader.setProperty(name, value);
           }
       }
  
  
  
  1.1                  xml-xerces/java/src/org/apache/xerces/impl/msg/SAXMessages.properties
  
  Index: SAXMessages.properties
  ===================================================================
  # This file stores localized messages for the Xerces
  # SAX implementation.
  #
  # The messages are arranged in key and value tuples in a ListResourceBundle.
  #
  # @version $Id: SAXMessages.properties,v 1.1 2004/02/05 21:30:09 mrglavas Exp $
  
  BadMessageKey = The error message corresponding to the message key can not be found.
  FormatFailed = An internal error occurred while formatting the following message:\n
  
  # JAXP messages
  schema-not-supported = The specified schema language is not supported.
  jaxp-order-not-supported = Property ''{0}'' must be set before setting property ''{1}''.

  
  # feature messages
  feature-not-supported = Feature ''{0}'' is not supported.
  feature-not-recognized = Feature ''{0}'' is not recognized.
  true-not-supported = True state for feature ''{0}'' is not supported.
  false-not-supported = False state for feature ''{0}'' is not supported.
  
  # property messages
  property-not-supported = Property ''{0}'' is not supported.
  property-not-recognized = Property ''{0}'' is not recognized.
  property-read-only = Property ''{0}'' is read only.
  property-not-parsing-supported = Property ''{0}'' is not supported while parsing.
  dom-node-read-not-supported = Cannot read DOM node property. No DOM tree exists.
  incompatible-class = The value specified for property ''{0}'' cannot be casted to {1}.
  
  
  
  1.1                  xml-xerces/java/src/org/apache/xerces/util/SAXMessageFormatter.java
  
  Index: SAXMessageFormatter.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2004 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xerces" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.apache.org.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package org.apache.xerces.util;
  
  import java.util.Locale;
  import java.util.MissingResourceException;
  import java.util.ResourceBundle;
  import java.util.PropertyResourceBundle;
  
  /**
   * Used to format SAX error messages using a specified locale.
   * 
   * @author Michael Glavassevich, IBM
   * 
   * @version $Id: SAXMessageFormatter.java,v 1.1 2004/02/05 21:30:09 mrglavas Exp $
   */
  public class SAXMessageFormatter {
  
      /**
       * Formats a message with the specified arguments using the given
       * locale information.
       * 
       * @param locale    The locale of the message.
       * @param key       The message key.
       * @param arguments The message replacement text arguments. The order
       *                  of the arguments must match that of the placeholders
       *                  in the actual message.
       * 
       * @return          the formatted message.
       *
       * @throws MissingResourceException Thrown if the message with the
       *                                  specified key cannot be found.
       */
      public static String formatMessage(Locale locale, 
          String key, Object[] arguments)
          throws MissingResourceException {
  
          ResourceBundle resourceBundle = null;
          if (locale != null) {
              resourceBundle = 
                  PropertyResourceBundle.getBundle("org.apache.xerces.impl.msg.SAXMessages",
locale);
          }
          else {
              resourceBundle = 
                  PropertyResourceBundle.getBundle("org.apache.xerces.impl.msg.SAXMessages");
          }
  
          // format message
          String msg;
          try {
              msg = resourceBundle.getString(key);
              if (arguments != null) {
                  try {
                      msg = java.text.MessageFormat.format(msg, arguments);
                  } 
                  catch (Exception e) {
                      msg = resourceBundle.getString("FormatFailed");
                      msg += " " + resourceBundle.getString(key);
                  }
              } 
          }
          
          // error
          catch (MissingResourceException e) {
              msg = resourceBundle.getString("BadMessageKey");
              throw new MissingResourceException(key, msg, key);
          }
  
          // no message
          if (msg == null) {
              msg = key;
              if (arguments.length > 0) {
                  StringBuffer str = new StringBuffer(msg);
                  str.append('?');
                  for (int i = 0; i < arguments.length; i++) {
                      if (i > 0) {
                          str.append('&');
                      }
                      str.append(String.valueOf(arguments[i]));
                  }
              }
          }
          return msg;
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org


Mime
View raw message