ASN1. Refined dumping output and refactored some codes
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Converter.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Converter.java
index b1efd93..820d08b 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Converter.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Converter.java
@@ -47,7 +47,7 @@
             tmpValue.decode(parseResult);
             return tmpValue;
         } else {
-            throw new IOException("Unknow type of tag=" + parseResult.tag());
+            throw new IOException("Unexpected item: " + parseResult.typeStr());
         }
     }
 
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
index 3768ae7..d248802 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
@@ -140,6 +140,16 @@
         return String.format("0x%02X", tagByte());
     }
 
+    public String typeStr() {
+        if (isUniversal()) {
+            return universalTag().toStr();
+        } else if (isAppSpecific()) {
+            return "application [" + tagNo() + "]";
+        } else {
+            return "context [" + tagNo() + "]";
+        }
+    }
+
     public static Tag newAppTag(int tagNo) {
         return new Tag(TagClass.APPLICATION, tagNo);
     }
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Container.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Container.java
index 7cbd471..d423e76 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Container.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Container.java
@@ -66,19 +66,13 @@
 
     @Override
     public String toString() {
-        String typeStr;
-        if (tag().isUniversal()) {
-            typeStr = tag().universalTag().toStr();
-        } else if (tag().isAppSpecific()) {
-            typeStr = "application " + tagNo();
-        } else {
-            typeStr = "[" + tagNo() + "]";
-        }
-        return typeStr + " ["
+        String typeStr = tag().typeStr();
+        typeStr += " ["
             + "tag=" + tag()
             + ", off=" + getOffset()
             + ", len=" + getHeaderLength() + "+" + getBodyLength()
             + (isDefinitiveLength() ? "" : "(undefined)")
             + "]";
+        return typeStr;
     }
 }
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Item.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Item.java
index 1e4f6f6..d70af2f 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Item.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Item.java
@@ -37,13 +37,6 @@
     @Override
     public String toString() {
         String valueStr = "##undecoded##";
-        String typeStr = tag().isUniversal() ? tag().universalTag().toStr()
-            : tag().tagClass().name().toLowerCase();
-        return typeStr + " ["
-            + "tag=" + tag()
-            + ", off=" + getOffset()
-            + ", len=" + getHeaderLength() + "+" + getBodyLength()
-            + "] "
-            + valueStr;
+        return typeStr() + valueStr;
     }
 }
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java
index bf80ced..78b7865 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java
@@ -105,4 +105,12 @@
     public boolean checkBodyFinished(int pos) {
         return getBodyEnd() != -1 && pos >= getBodyEnd();
     }
+
+    public String typeStr() {
+        return tag().typeStr() + " ["
+            + "tag=" + tag()
+            + ", off=" + getOffset()
+            + ", len=" + getHeaderLength() + "+" + getBodyLength()
+            + "] ";
+    }
 }
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
index 97221ce..97b2883 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
@@ -110,9 +110,7 @@
                 }
             }
             if (foundPos == -1) {
-                String error = String.format("Unexpected item tag=%s, off=%d",
-                    parseItem.tag(), parseItem.getOffset());
-                throw new IOException(error);
+                throw new IOException("Unexpected item: " + parseItem.typeStr());
             }
             lastPos = foundPos;