diff options
-rw-r--r-- | src/org/apache/fop/fo/FOTreeBuilder.java | 60 | ||||
-rw-r--r-- | src/org/apache/fop/fo/UnknownXMLObj.java | 6 |
2 files changed, 59 insertions, 7 deletions
diff --git a/src/org/apache/fop/fo/FOTreeBuilder.java b/src/org/apache/fop/fo/FOTreeBuilder.java index c4d021f9a..109d08705 100644 --- a/src/org/apache/fop/fo/FOTreeBuilder.java +++ b/src/org/apache/fop/fo/FOTreeBuilder.java @@ -120,6 +120,8 @@ public class FOTreeBuilder extends DefaultHandler implements TreeBuilder { private Logger log; private Locator locator; + + private int errorCount = 0; public FOTreeBuilder() {} @@ -247,6 +249,28 @@ public class FOTreeBuilder extends DefaultHandler implements TreeBuilder { public void setDocumentLocator(Locator locator) { this.locator = locator; } + + private String formatLocator(Locator locator) { + if (locator == null) { + return ""; + } else { + StringBuffer sb = new StringBuffer(); + if (locator.getSystemId() != null) { + sb.append(locator.getSystemId()); + } else if (locator.getPublicId() != null) { + sb.append(locator.getPublicId()); + } else { + sb.append("Unknown source"); + } + sb.append(" (line: "); + sb.append(locator.getLineNumber()); + sb.append(", col: "); + sb.append(locator.getColumnNumber()); + sb.append(")"); + return sb.toString(); + } + } + /** * SAX Handler for the start of an element */ @@ -280,8 +304,25 @@ public class FOTreeBuilder extends DefaultHandler implements TreeBuilder { String fullName = uri + "^" + localName; if (!this.unknownFOs.containsKey(fullName)) { this.unknownFOs.put(fullName, ""); - log.error("Unknown formatting object " - + fullName); + StringBuffer sb = new StringBuffer(128); + sb.append("Unsupported element encountered: "); + sb.append(localName); + sb.append(" (Namespace: "); + sb.append("".equals(uri) ? "default" : uri); + sb.append("). "); + sb.append("Source context: "); + if (locator != null) { + sb.append(formatLocator(locator)); + } else { + sb.append("unavailable"); + } + log.error(sb.toString()); + if (this.errorCount == 0) { + log.error("Expected XSL-FO (root, page-sequence, etc.), " + + "SVG (svg, rect, etc.) or elements from another " + + "supported language."); + } + this.errorCount++; } if(namespaces.contains(uri.intern())) { // fall back @@ -317,10 +358,16 @@ public class FOTreeBuilder extends DefaultHandler implements TreeBuilder { if (rootFObj == null) { rootFObj = fobj; if (!fobj.getName().equals("fo:root")) { - throw new SAXException(new FOPException("Root element must" - + " be root, not " - + fobj.getName(), - systemId, line, column)); + if (fobj.getName().equals("root")) { + throw new SAXException(new FOPException( + "Root element is missing the namespace declaration: " + + "http://www.w3.org/1999/XSL/Format", + systemId, line, column)); + } else { + throw new SAXException(new FOPException( + "Root element must be root, not " + + fobj.getName(), systemId, line, column)); + } } } else if(!(fobj instanceof org.apache.fop.fo.pagination.PageSequence)) { currentFObj.addChild(fobj); @@ -333,6 +380,7 @@ public class FOTreeBuilder extends DefaultHandler implements TreeBuilder { currentFObj = null; rootFObj = null; streamRenderer = null; + this.errorCount = 0; } public boolean hasData() { diff --git a/src/org/apache/fop/fo/UnknownXMLObj.java b/src/org/apache/fop/fo/UnknownXMLObj.java index 6d2414f55..e26a734c6 100644 --- a/src/org/apache/fop/fo/UnknownXMLObj.java +++ b/src/org/apache/fop/fo/UnknownXMLObj.java @@ -136,7 +136,11 @@ public class UnknownXMLObj extends XMLObj { } public String getName() { - return ""+namespace+":"+tagName; + if (namespace == null || namespace.length() == 0) { + return tagName; + } else { + return namespace + ":" + tagName; + } } } |