Skip to main content

[jsonp~git:9096e37a] [JSONP-20] Localizing parser and generator exception messages.

  • From:
  • To:
  • Subject: [jsonp~git:9096e37a] [JSONP-20] Localizing parser and generator exception messages.
  • Date: Mon, 7 Oct 2013 22:58:30 +0000

Project:    jsonp
Repository: git
Revision:   9096e37af8b7b042fd3b851cd6f0d8fbd998c40b
Author:     jitu
Date:       2013-10-07 22:57:54 UTC
Link:       

Log Message:
------------
[JSONP-20] Localizing parser and generator exception messages.



Revisions:
----------
9096e37af8b7b042fd3b851cd6f0d8fbd998c40b


Modified Paths:
---------------
impl/src/main/java/org/glassfish/json/JsonGeneratorImpl.java
impl/src/main/java/org/glassfish/json/JsonParserImpl.java
impl/src/main/java/org/glassfish/json/JsonPrettyGeneratorImpl.java


Added Paths:
------------
impl/src/main/java/org/glassfish/json/JsonMessages.java
impl/src/main/resources/org/glassfish/json/messages.properties


Diffs:
------
--- a/impl/src/main/java/org/glassfish/json/JsonGeneratorImpl.java
+++ b/impl/src/main/java/org/glassfish/json/JsonGeneratorImpl.java
@@ -134,7 +134,7 @@ class JsonGeneratorImpl implements JsonGenerator {
         try {
             writer.flush();
         } catch (IOException ioe) {
-            throw new JsonException("I/O error while flushing generated 
JSON", ioe);
+            throw new JsonException(JsonMessages.GENERATOR_FLUSH_IO_ERR(), 
ioe);
         }
     }
 
@@ -146,12 +146,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope == Scope.IN_NONE && !currentContext.first) {
             throw new JsonGenerationException("writeStartObject() cannot be 
called in no context more than once");
         }
-        try {
-            writeComma();
-            writeChar('{');
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing start object", 
ioe);
-        }
+        writeComma();
+        writeChar('{');
         stack.push(currentContext);
         currentContext = new Context(Scope.IN_OBJECT);
         return this;
@@ -162,18 +158,14 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_OBJECT) {
             throw new JsonGenerationException("writeStartObject(String) can 
only be called in object context");
         }
-        try {
-            writeName(name);
-            writeChar('{');
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing start of object 
in JSON object", ioe);
-        }
+        writeName(name);
+        writeChar('{');
         stack.push(currentContext);
         currentContext = new Context(Scope.IN_OBJECT);
         return this;
     }
 
-    private JsonGenerator writeName(String name) throws IOException {
+    private JsonGenerator writeName(String name) {
         writeComma();
         writeEscapedString(name);
         writeChar(':');
@@ -185,12 +177,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_OBJECT) {
             throw new JsonGenerationException("write(String, String) can 
only be called in object context");
         }
-        try {
-            writeName(name);
-            writeEscapedString(fieldValue);
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing (name, String) 
pair in JSON object", ioe);
-        }
+        writeName(name);
+        writeEscapedString(fieldValue);
         return this;
     }
 
@@ -199,12 +187,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_OBJECT) {
             throw new JsonGenerationException("write(String, int) can only 
be called in object context");
         }
-        try {
-            writeName(name);
-            writeInt(value);
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing (name, int) 
pair in JSON object", ioe);
-        }
+        writeName(name);
+        writeInt(value);
         return this;
     }
 
@@ -213,12 +197,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_OBJECT) {
             throw new JsonGenerationException("write(String, long) can only 
be called in object context");
         }
-        try {
-            writeName(name);
-            writeString(String.valueOf(value));
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing (name, long) 
pair in JSON object",ioe);
-        }
+        writeName(name);
+        writeString(String.valueOf(value));
         return this;
     }
 
@@ -230,12 +210,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (Double.isInfinite(value) || Double.isNaN(value)) {
             throw new NumberFormatException("write(String, double) value 
cannot be Infinite or NaN");
         }
-        try {
-            writeName(name);
-            writeString(String.valueOf(value));
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing (name, double) 
pair in JSON object", ioe);
-        }
+        writeName(name);
+        writeString(String.valueOf(value));
         return this;
     }
 
@@ -244,12 +220,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_OBJECT) {
             throw new JsonGenerationException("write(String, BigInteger) can 
only be called in object context");
         }
-        try {
-            writeName(name);
-            writeString(String.valueOf(value));
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing (name, 
BigInteger) pair in JSON object", ioe);
-        }
+        writeName(name);
+        writeString(String.valueOf(value));
         return this;
     }
 
@@ -258,12 +230,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_OBJECT) {
             throw new JsonGenerationException("write(String, BigDecimal) can 
only be called in object context");
         }
-        try {
-            writeName(name);
-            writeString(String.valueOf(value));
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing (name, 
BigDecimal) pair in JSON object", ioe);
-        }
+        writeName(name);
+        writeString(String.valueOf(value));
         return this;
     }
 
@@ -272,12 +240,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_OBJECT) {
             throw new JsonGenerationException("write(String, boolean) can 
only be called in object context");
         }
-        try {
-            writeName(name);
-            writeString(value? "true" : "false");
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing (name, boolean) 
pair in JSON object", ioe);
-        }
+        writeName(name);
+        writeString(value? "true" : "false");
         return this;
     }
 
@@ -286,12 +250,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_OBJECT) {
             throw new JsonGenerationException("writeNull(String) can only be 
called in object context");
         }
-        try {
-            writeName(name);
-            writeString("null");
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing null value in 
JSON object", ioe);
-        }
+        writeName(name);
+        writeString("null");
         return this;
     }
 
@@ -323,11 +283,7 @@ class JsonGeneratorImpl implements JsonGenerator {
                 break;
             case NUMBER:
                 JsonNumber number = (JsonNumber)value;
-                try {
-                    writeValue(number.toString());
-                } catch(IOException ioe) {
-                    throw new JsonException("I/O error while writing a 
number", ioe);
-                }
+                writeValue(number.toString());
                 break;
             case TRUE:
                 write(true);
@@ -351,12 +307,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope == Scope.IN_NONE && !currentContext.first) {
             throw new JsonGenerationException("writeStartArray() cannot be 
called in no context more than once");
         }
-        try {
-            writeComma();
-            writeChar('[');
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing start of JSON 
array", ioe);
-        }
+        writeComma();
+        writeChar('[');
         stack.push(currentContext);
         currentContext = new Context(Scope.IN_ARRAY);
         return this;
@@ -367,12 +319,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_OBJECT) {
             throw new JsonGenerationException("writeStartArray(String) can 
only be called in object context");
         }
-        try {
-            writeName(name);
-            writeChar('[');
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing start of array 
in JSON object", ioe);
-        }
+        writeName(name);
+        writeChar('[');
         stack.push(currentContext);
         currentContext = new Context(Scope.IN_ARRAY);
         return this;
@@ -406,11 +354,7 @@ class JsonGeneratorImpl implements JsonGenerator {
                 break;
             case NUMBER:
                 JsonNumber number = (JsonNumber)value;
-                try {
-                    writeValue(name, number.toString());
-                } catch (IOException ioe) {
-                    throw new JsonException("I/O error while writing a 
number in JSON object", ioe);
-                }
+                writeValue(name, number.toString());
                 break;
             case TRUE:
                 write(name, true);
@@ -429,12 +373,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_ARRAY) {
             throw new JsonGenerationException("write(String) can only be 
called in array context");
         }
-        try {
-            writeComma();
-            writeEscapedString(value);
-        } catch (IOException e) {
-            throw new JsonException("I/O error while writing string value in 
JSON array", e);
-        }
+        writeComma();
+        writeEscapedString(value);
         return this;
     }
 
@@ -443,12 +383,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_ARRAY) {
             throw new JsonGenerationException("write(int) can only be called 
in array context");
         }
-        try {
-            writeComma();
-            writeInt(value);
-        } catch (IOException e) {
-            throw new JsonException("I/O error while writing int value in 
JSON array", e);
-        }
+        writeComma();
+        writeInt(value);
         return this;
     }
 
@@ -457,11 +393,7 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_ARRAY) {
             throw new JsonGenerationException("write(long) can only be 
called in array context");
         }
-        try {
-            writeValue(String.valueOf(value));
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing long value in 
JSON array", ioe);
-        }
+        writeValue(String.valueOf(value));
         return this;
     }
 
@@ -473,11 +405,7 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (Double.isInfinite(value) || Double.isNaN(value)) {
             throw new NumberFormatException("write(double) value cannot be 
Infinite or NaN");
         }
-        try {
-            writeValue(String.valueOf(value));
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing double value in 
JSON array", ioe);
-        }
+        writeValue(String.valueOf(value));
         return this;
     }
 
@@ -486,11 +414,7 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_ARRAY) {
             throw new JsonGenerationException("write(BigInteger) can only be 
called in array context");
         }
-        try {
-            writeValue(value.toString());
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing BigInteger 
value in JSON array", ioe);
-        }
+        writeValue(value.toString());
         return this;
     }
 
@@ -499,11 +423,7 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_ARRAY) {
             throw new JsonGenerationException("write(BigDecimal) can only be 
called in array context");
         }
-        try {
-            writeValue(value.toString());
-        } catch(IOException ioe) {
-            throw new JsonException("I/O error while writing BigDecimal 
value in JSON array", ioe);
-        }
+        writeValue(value.toString());
         return this;
     }
 
@@ -511,12 +431,8 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_ARRAY) {
             throw new JsonGenerationException("write(boolean) can only be 
called in array context");
         }
-        try {
-            writeComma();
-            writeString(value ? "true" : "false");
-        } catch (IOException e) {
-            throw new JsonException("I/O error while writing boolean value 
in JSON array", e);
-        }
+        writeComma();
+        writeString(value ? "true" : "false");
         return this;
     }
 
@@ -524,21 +440,17 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_ARRAY) {
             throw new JsonGenerationException("writeNull() can only be 
called in array context");
         }
-        try {
-            writeComma();
-            writeString("null");
-        } catch (IOException e) {
-            throw new JsonException("I/O error while writing null value in 
JSON array", e);
-        }
+        writeComma();
+        writeString("null");
         return this;
     }
 
-    private void writeValue(String value) throws IOException {
+    private void writeValue(String value) {
         writeComma();
         writeString(value);
     }
 
-    private void writeValue(String name, String value) throws IOException {
+    private void writeValue(String name, String value) {
         writeComma();
         writeEscapedString(name);
         writeChar(':');
@@ -550,16 +462,12 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope == Scope.IN_NONE) {
             throw new JsonGenerationException("writeEnd() cannot be called 
in no context");
         }
-        try {
-            writeChar(currentContext.scope == Scope.IN_ARRAY ? ']' : '}');
-        } catch (IOException e) {
-            throw new JsonException("I/O error while writing end of JSON 
structure", e);
-        }
+        writeChar(currentContext.scope == Scope.IN_ARRAY ? ']' : '}');
         currentContext = stack.pop();
         return this;
     }
 
-    protected void writeComma() throws IOException {
+    protected void writeComma() {
         if (!currentContext.first) {
             writeChar(',');
         }
@@ -580,11 +488,11 @@ class JsonGeneratorImpl implements JsonGenerator {
         if (currentContext.scope != Scope.IN_NONE || currentContext.first) {
             throw new JsonGenerationException("Generating incomplete JSON");
         }
+        flushBuffer();
         try {
-            flushBuffer();
             writer.close();
         } catch (IOException ioe) {
-            throw new JsonException("I/O error while closing JsonGenerator", 
ioe);
+            throw new JsonException(JsonMessages.GENERATOR_CLOSE_IO_ERR(), 
ioe);
         }
         bufferPool.recycle(buf);
     }
@@ -596,7 +504,7 @@ class JsonGeneratorImpl implements JsonGenerator {
     //    ^           ^                     ^             ^
     //    |           |                     |             |
     //   begin       end                   begin         end
-    void writeEscapedString(String string) throws IOException {
+    void writeEscapedString(String string) {
         writeChar('"');
         int len = string.length();
         for(int i = 0; i < len; i++) {
@@ -648,7 +556,7 @@ class JsonGeneratorImpl implements JsonGenerator {
         writeChar('"');
     }
 
-    void writeString(String str, int begin, int end) throws IOException {
+    void writeString(String str, int begin, int end) {
         while (begin < end) {       // source begin and end indexes
             int no = Math.min(buf.length - len, end - begin);
             str.getChars(begin, begin + no, buf, len);
@@ -660,11 +568,11 @@ class JsonGeneratorImpl implements JsonGenerator {
         }
     }
 
-    void writeString(String str) throws IOException {
+    void writeString(String str) {
         writeString(str, 0, str.length());
     }
 
-    void writeChar(char c) throws IOException {
+    void writeChar(char c) {
         if (len >= buf.length) {
             flushBuffer();
         }
@@ -673,7 +581,7 @@ class JsonGeneratorImpl implements JsonGenerator {
 
     // Not using Integer.toString() since it creates intermediary String
     // Also, we want the chars to be copied to our buffer directly
-    void writeInt(int num) throws IOException {
+    void writeInt(int num) {
         int size;
         if (num == Integer.MIN_VALUE) {
             size = INT_MIN_VALUE_CHARS.length;
@@ -702,7 +610,7 @@ class JsonGeneratorImpl implements JsonGenerator {
                 len = 0;
             }
         } catch (IOException ioe) {
-            throw new JsonException("I/O error while closing JsonGenerator", 
ioe);
+            throw new JsonException(JsonMessages.GENERATOR_WRITE_IO_ERR(), 
ioe);
         }
     }
 --- /dev/null
+++ b/impl/src/main/java/org/glassfish/json/JsonMessages.java
@@ -0,0 +1,125 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the 
License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or 
GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
+/**
+ * Defines string formatting method for each constant in the resource file
+ *
+ * @author Jitendra Kotamraju
+ */
+final class JsonMessages {
+    private static final ResourceBundle BUNDLE =
+            ResourceBundle.getBundle("org.glassfish.json.messages");
+
+    static String PARSER_GETSTRING_ERR(Object arg0) {
+        return localize("parser.getString.err", arg0);
+    }
+
+    static String PARSER_ISINTEGRALNUMBER_ERR(Object arg0) {
+        return localize("parser.isIntegralNumber.err", arg0);
+    }
+
+    static String PARSER_GETINT_ERR(Object arg0) {
+        return localize("parser.getInt.err", arg0);
+    }
+
+    static String PARSER_GETLONG_ERR(Object arg0) {
+        return localize("parser.getLong.err", arg0);
+    }
+
+    static String PARSER_GETBIGDECIMAL_ERR(Object arg0) {
+        return localize("parser.getBigDecimal.err", arg0);
+    }
+
+    static String PARSER_EXPECTED_EOF(Object arg0) {
+        return localize("parser.expected.eof", arg0);
+    }
+
+    static String PARSER_TOKENIZER_CLOSE_IO() {
+        return localize("parser.tokenizer.close.io");
+    }
+
+    static String PARSER_INVALID_TOKEN(Object token, Object location, Object 
expectedTokens) {
+        return localize("parser.invalid.token", token, location, 
expectedTokens);
+    }
+
+    static String GENERATOR_FLUSH_IO_ERR() {
+        return localize("generator.flush.io.err");
+    }
+
+    static String GENERATOR_CLOSE_IO_ERR() {
+        return localize("generator.close.io.err");
+    }
+
+    static String GENERATOR_WRITE_IO_ERR() {
+        return localize("generator.write.io.err");
+    }
+
+    private static String localize(String key, Object ... args) {
+        try {
+            String msg = BUNDLE.getString(key);
+            return MessageFormat.format(msg, args);
+        } catch (Exception e) {
+            return getDefaultMessage(key, args);
+        }
+    }
+
+    private static String getDefaultMessage(String key, Object ... args) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("[failed to localize] ");
+        sb.append(key);
+        if (args != null) {
+            sb.append('(');
+            for (int i = 0; i < args.length; ++i) {
+                if (i != 0)
+                    sb.append(", ");
+                sb.append(String.valueOf(args[i]));
+            }
+            sb.append(')');
+        }
+        return sb.toString();
+    }
+
+}--- a/impl/src/main/java/org/glassfish/json/JsonParserImpl.java
+++ b/impl/src/main/java/org/glassfish/json/JsonParserImpl.java
@@ -88,17 +88,15 @@ public class JsonParserImpl implements JsonParser {
                 || currentEvent == Event.VALUE_NUMBER) {
             return tokenizer.getValue();
         }
-        throw new IllegalStateException("JsonParser#getString() is valid 
only "+
-                "KEY_NAME, VALUE_STRING, VALUE_NUMBER parser states. "+
-                "But current parser state is "+currentEvent);
+        throw new IllegalStateException(
+                JsonMessages.PARSER_GETSTRING_ERR(currentEvent));
     }
 
     @Override
     public boolean isIntegralNumber() {
         if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException("JsonParser#isIntegralNumber() 
is valid only "+
-                    "VALUE_NUMBER parser state. "+
-                    "But current parser state is "+currentEvent);
+            throw new IllegalStateException(
+                    JsonMessages.PARSER_ISINTEGRALNUMBER_ERR(currentEvent));
         }
         return tokenizer.isIntegral();
     }
@@ -106,9 +104,8 @@ public class JsonParserImpl implements JsonParser {
     @Override
     public int getInt() {
         if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException("JsonParser#getNumberType() is 
valid only "+
-                    "VALUE_NUMBER parser state. "+
-                    "But current parser state is "+currentEvent);
+            throw new IllegalStateException(
+                    JsonMessages.PARSER_GETINT_ERR(currentEvent));
         }
         return tokenizer.getInt();
     }
@@ -116,9 +113,8 @@ public class JsonParserImpl implements JsonParser {
     @Override
     public long getLong() {
         if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException("JsonParser#getNumberType() is 
valid only "+
-                    "VALUE_NUMBER parser state. "+
-                    "But current parser state is "+currentEvent);
+            throw new IllegalStateException(
+                    JsonMessages.PARSER_GETLONG_ERR(currentEvent));
         }
         return tokenizer.getBigDecimal().longValue();
     }
@@ -126,9 +122,8 @@ public class JsonParserImpl implements JsonParser {
     @Override
     public BigDecimal getBigDecimal() {
         if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException("JsonParser#getNumberType() is 
valid only "+
-                    "VALUE_NUMBER parser state. "+
-                    "But current parser state is "+currentEvent);
+            throw new IllegalStateException(
+                    JsonMessages.PARSER_GETBIGDECIMAL_ERR(currentEvent));
         }
         return tokenizer.getBigDecimal();
     }
@@ -157,7 +152,7 @@ public class JsonParserImpl implements JsonParser {
             if (stack.isEmpty() && (currentEvent == Event.END_ARRAY || 
currentEvent == Event.END_OBJECT)) {
                 JsonToken token = tokenizer.nextToken();
                 if (token != JsonToken.EOF) {
-                    throw new JsonParsingException("Expected EOF, but 
got="+token,
+                    throw new 
JsonParsingException(JsonMessages.PARSER_EXPECTED_EOF(token),
                             getLastCharLocation());
                 }
                 return false;
@@ -183,7 +178,7 @@ public class JsonParserImpl implements JsonParser {
         try {
             tokenizer.close();
         } catch (IOException e) {
-            throw new JsonException("I/O error while closing JSON 
tokenizer", e);
+            throw new 
JsonException(JsonMessages.PARSER_TOKENIZER_CLOSE_IO(), e);
         }
     }
 
@@ -231,8 +226,8 @@ public class JsonParserImpl implements JsonParser {
                 return Event.START_ARRAY;
             }
             JsonLocation location = getLastCharLocation();
-            throw new JsonParsingException("Invalid token="+token+" at 
"+location+
-                    " Expected tokens are: [CURLYOPEN, SQUAREOPEN]", 
location);
+            throw new JsonParsingException(
+                    JsonMessages.PARSER_INVALID_TOKEN(token, location, 
"[CURLYOPEN, SQUAREOPEN]"), location);
         }
     }
 
@@ -254,8 +249,8 @@ public class JsonParserImpl implements JsonParser {
                 // Handle 1. :value
                 if (token != JsonToken.COLON) {
                     JsonLocation location = getLastCharLocation();
-                    throw new JsonParsingException("Invalid token="+token+" 
at "
-                            +location+" Expected tokens are: [COLON]", 
location);
+                    throw new JsonParsingException(
+                            JsonMessages.PARSER_INVALID_TOKEN(token, 
location, "[COLON]"), location);
                 }
                 token = tokenizer.nextToken();
                 if (token.isValue()) {
@@ -270,8 +265,8 @@ public class JsonParserImpl implements JsonParser {
                     return Event.START_ARRAY;
                 }
                 JsonLocation location = getLastCharLocation();
-                throw new JsonParsingException("Invalid token="+token
-                        +" at "+location, location);
+                throw new 
JsonParsingException(JsonMessages.PARSER_INVALID_TOKEN(token, location,
+                        "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, 
FALSE, NULL]"), location);
             } else {
                 // Handle 1. }   2. name   3. ,name
                 if (token == JsonToken.CURLYCLOSE) {
@@ -283,8 +278,8 @@ public class JsonParserImpl implements JsonParser {
                 } else {
                     if (token != JsonToken.COMMA) {
                         JsonLocation location = getLastCharLocation();
-                        throw new JsonParsingException("Invalid 
token="+token+" at "
-                                +location+" Expected tokens are: [COMMA]", 
location);
+                        throw new JsonParsingException(
+                                JsonMessages.PARSER_INVALID_TOKEN(token, 
location, "[COMMA]"), location);
                     }
                     token = tokenizer.nextToken();
                 }
@@ -292,8 +287,8 @@ public class JsonParserImpl implements JsonParser {
                     return Event.KEY_NAME;
                 }
                 JsonLocation location = getLastCharLocation();
-                throw new JsonParsingException("Invalid token="+token+" at 
"+location+
-                        " Expected tokens are: [STRING]", location);
+                throw new JsonParsingException(
+                        JsonMessages.PARSER_INVALID_TOKEN(token, location, 
"[STRING]"), location);
             }
         }
 
@@ -315,8 +310,8 @@ public class JsonParserImpl implements JsonParser {
             } else {
                 if (token != JsonToken.COMMA) {
                     JsonLocation location = getLastCharLocation();
-                    throw new JsonParsingException("Invalid token="+token+" 
at "
-                            +location+" Expected tokens are: [COMMA]", 
location);
+                    throw new JsonParsingException(
+                            JsonMessages.PARSER_INVALID_TOKEN(token, 
location, "[COMMA]"), location);
                 }
                 token = tokenizer.nextToken();
             }
@@ -332,8 +327,8 @@ public class JsonParserImpl implements JsonParser {
                 return Event.START_ARRAY;
             }
             JsonLocation location = getLastCharLocation();
-            throw new JsonParsingException("Invalid token="+token
-                    +" at "+location, location);
+            throw new 
JsonParsingException(JsonMessages.PARSER_INVALID_TOKEN(token, location,
+                    "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, 
NULL]"), location);
         }
 
     }--- a/impl/src/main/java/org/glassfish/json/JsonPrettyGeneratorImpl.java
+++ b/impl/src/main/java/org/glassfish/json/JsonPrettyGeneratorImpl.java
@@ -42,9 +42,7 @@ package org.glassfish.json;
 
 import org.glassfish.json.api.BufferPool;
 
-import javax.json.*;
 import javax.json.stream.JsonGenerator;
-import java.io.IOException;
 import java.io.OutputStream;
 import java.io.Writer;
 import java.nio.charset.Charset;
@@ -107,26 +105,18 @@ public class JsonPrettyGeneratorImpl extends 
JsonGeneratorImpl {
 
     private void writeIndent() {
         for(int i=0; i < indentLevel; i++) {
-            try {
-                writeString(INDENT);
-            } catch (IOException e) {
-                throw new JsonException("I/O error while writing 
indentation", e);
-            }
+            writeString(INDENT);
         }
     }
 
     @Override
-    protected void writeComma() throws IOException {
+    protected void writeComma() {
         super.writeComma();
         writeChar('\n');
         writeIndent();
     }
 
     private void writeNewLine() {
-        try {
-            writeChar('\n');
-        } catch (IOException e) {
-            throw new JsonException("I/O error while writing newline", e);
-        }
+        writeChar('\n');
     }
 }
\ No newline at end of file--- /dev/null
+++ b/impl/src/main/resources/org/glassfish/json/messages.properties
@@ -0,0 +1,17 @@
+parser.getString.err=JsonParser#getString() is valid only KEY_NAME, 
VALUE_STRING, VALUE_NUMBER parser states. \
+  But current parser state is {0}
+parser.isIntegralNumber.err=JsonParser#isIntegralNumber() is valid only 
VALUE_NUMBER parser state. \
+  But current parser state is {0}
+parser.getInt.err=JsonParser#getInt() is valid only VALUE_NUMBER parser 
state. \
+  But current parser state is {0}
+parser.getLong.err=JsonParser#getLong() is valid only VALUE_NUMBER parser 
state. \
+  But current parser state is {0}
+parser.getBigDecimal.err=JsonParser#getBigDecimal() is valid only 
VALUE_NUMBER parser state. \
+  But current parser state is {0}
+parser.expected.eof=Expected EOF token, but got {0}
+parser.tokenizer.close.io=I/O error while closing JSON tokenizer
+parser.invalid.token=Invalid token={0} at {1}. Expected tokens are: {2}
+
+generator.flush.io.err=I/O error while flushing generated JSON
+generator.close.io.err=I/O error while closing JsonGenerator
+generator.write.io.err=I/O error while writing in JsonGenerator
\ No newline at end of file





[jsonp~git:9096e37a] [JSONP-20] Localizing parser and generator exception messages.

jitu 10/07/2013
 
 
Close
loading
Please Confirm
Close