improve error message when a global tag is invalid
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 7fb8cbd..48ea848 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,7 +7,7 @@
 	</properties>

 	<body>

           <release version="1.7" date="in Mercurial" description="development">

-            <action dev="maslovalex" type="update">

+            <action dev="py4fun" type="update">

                 URLDecoder.decode() does not fail when UTF-8 is invalid. Use 

                 CodingErrorAction.REPORT to implement the failure (2010-05-21)

             </action>

diff --git a/src/main/java/org/yaml/snakeyaml/nodes/Tag.java b/src/main/java/org/yaml/snakeyaml/nodes/Tag.java
index d924339..330dd59 100644
--- a/src/main/java/org/yaml/snakeyaml/nodes/Tag.java
+++ b/src/main/java/org/yaml/snakeyaml/nodes/Tag.java
@@ -17,7 +17,6 @@
 

 import java.math.BigDecimal;

 import java.math.BigInteger;

-import java.net.URLDecoder;

 import java.sql.Timestamp;

 import java.util.Date;

 import java.util.HashMap;

@@ -97,13 +96,9 @@
 

     public String getClassName() {

         if (!value.startsWith(Tag.PREFIX)) {

-            throw new YAMLException("Unknown tag: " + value);

+            throw new YAMLException("Invalid tag: " + value);

         }

-        try {

-            return URLDecoder.decode(value.substring(Tag.PREFIX.length()), "UTF-8");

-        } catch (java.io.UnsupportedEncodingException except) {

-            throw new RuntimeException(except);

-        }

+        return UriEncoder.decode(value.substring(Tag.PREFIX.length()));

     }

 

     public int getLength() {

diff --git a/src/main/java/org/yaml/snakeyaml/util/UriEncoder.java b/src/main/java/org/yaml/snakeyaml/util/UriEncoder.java
index 87a21ee..f0022ae 100644
--- a/src/main/java/org/yaml/snakeyaml/util/UriEncoder.java
+++ b/src/main/java/org/yaml/snakeyaml/util/UriEncoder.java
@@ -16,6 +16,8 @@
 

 package org.yaml.snakeyaml.util;

 

+import java.io.UnsupportedEncodingException;

+import java.net.URLDecoder;

 import java.nio.ByteBuffer;

 import java.nio.CharBuffer;

 import java.nio.charset.CharacterCodingException;

@@ -23,6 +25,8 @@
 import java.nio.charset.CharsetDecoder;

 import java.nio.charset.CodingErrorAction;

 

+import org.yaml.snakeyaml.error.YAMLException;

+

 import com.google.gdata.util.common.base.Escaper;

 import com.google.gdata.util.common.base.PercentEscaper;

 

@@ -32,12 +36,26 @@
     private static final Escaper escaper = new PercentEscaper(

             PercentEscaper.SAFEPATHCHARS_URLENCODER, false);

 

+    /**

+     * Escape special characters with '%'

+     */

     public static String encode(String uri) {

         return escaper.escape(uri);

     }

 

+    /**

+     * Decode '%'-escaped characters. Decoding fails in case of invalid UTF-8

+     */

     public static String decode(ByteBuffer buff) throws CharacterCodingException {

         CharBuffer chars = UTF8Decoder.decode(buff);

         return chars.toString();

     }

+

+    public static String decode(String buff) {

+        try {

+            return URLDecoder.decode(buff, "UTF-8");

+        } catch (UnsupportedEncodingException e) {

+            throw new YAMLException(e);

+        }

+    }

 }

diff --git a/src/test/java/org/yaml/snakeyaml/constructor/ClassTagsTest.java b/src/test/java/org/yaml/snakeyaml/constructor/ClassTagsTest.java
index c3e981c..3df711d 100644
--- a/src/test/java/org/yaml/snakeyaml/constructor/ClassTagsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/constructor/ClassTagsTest.java
@@ -71,7 +71,7 @@
             yaml.load(Util.getLocalResource("constructor/car-without-tags.yaml"));

             fail("Must fail because of unknown tag: !car");

         } catch (YAMLException e) {

-            assertTrue(e.getMessage().contains("Unknown tag: !car"));

+            assertTrue(e.getMessage().contains("Invalid tag: !car"));

         }

 

     }

diff --git a/src/test/java/org/yaml/snakeyaml/nodes/TagTest.java b/src/test/java/org/yaml/snakeyaml/nodes/TagTest.java
index d65ba2f..89a5e8c 100644
--- a/src/test/java/org/yaml/snakeyaml/nodes/TagTest.java
+++ b/src/test/java/org/yaml/snakeyaml/nodes/TagTest.java
@@ -63,7 +63,7 @@
             tag.getClassName();

             fail("Class name is only available for global tag");

         } catch (Exception e) {

-            assertEquals("Unknown tag: !TagTest", e.getMessage());

+            assertEquals("Invalid tag: !TagTest", e.getMessage());

         }

     }