Author: andrey
Date: Mon Sep 21 12:35:50 2009
New Revision: 817228

URL: http://svn.apache.org/viewvc?rev=817228&view=rev
Log:
better error message

Modified:
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/MapLoader.java

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/MapLoader.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/MapLoader.java?rev=817228&r1=817227&r2=817228&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/MapLoader.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/MapLoader.java
 Mon Sep 21 12:35:50 2009
@@ -158,6 +158,7 @@
     private Map<String, StartClosure> startTagOpMap;
     private Map<String, EndClosure> endTagOpMap;
     private String currentTag;
+    private Attributes currentAttributes;
     private StringBuilder charactersBuffer;
     private Map<String, Object> mapProperties;
 
@@ -680,17 +681,35 @@
         catch (SAXException e) {
             dataMap = null;
             throw new CayenneRuntimeException(
-                    "Wrong DataMap format, last processed tag: <" + currentTag,
+                    "Wrong DataMap format, last processed tag: " + 
constructCurrentStateString(),
                     Util.unwindException(e));
         }
         catch (Exception e) {
             dataMap = null;
             throw new CayenneRuntimeException(
-                    "Error loading DataMap, last processed tag: <" + 
currentTag,
+                    "Error loading DataMap, last processed tag: " + 
constructCurrentStateString(),
                     Util.unwindException(e));
         }
         return dataMap;
     }
+    
+    /**
+     * Constructs error message for displaying as exception message
+     */
+    private Appendable constructCurrentStateString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("<").append(currentTag);
+        
+        if (currentAttributes != null) {
+            for (int i = 0; i < currentAttributes.getLength(); i++) {
+                sb.append(" 
").append(currentAttributes.getLocalName(i)).append("=").
+                    
append("\"").append(currentAttributes.getValue(i)).append("\"");
+            }
+        }
+        sb.append(">");
+        
+        return sb;
+    }
 
     /**
      * Loads DataMap from file specified by <code>uri</code> parameter.
@@ -788,7 +807,7 @@
             String qName,
             Attributes attributes) throws SAXException {
 
-        rememberCurrentTag(localName);
+        rememberCurrentState(localName, attributes);
 
         StartClosure op = startTagOpMap.get(localName);
         if (op != null) {
@@ -805,7 +824,7 @@
             op.execute();
         }
 
-        resetCurrentTag();
+        resetCurrentState();
         charactersBuffer = null;
     }
 
@@ -1352,12 +1371,14 @@
         }
     }
 
-    private void rememberCurrentTag(String tag) {
+    private void rememberCurrentState(String tag, Attributes attrs) {
         currentTag = tag;
+        currentAttributes = attrs;
     }
 
-    private void resetCurrentTag() {
+    private void resetCurrentState() {
         currentTag = null;
+        currentAttributes = null;
     }
 
     /**


Reply via email to