summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremias Maerki <jeremias@apache.org>2003-05-14 15:28:39 +0000
committerJeremias Maerki <jeremias@apache.org>2003-05-14 15:28:39 +0000
commitdf03268518c22b2394854d7265ab8705a561ab43 (patch)
tree332e8ba1f7a7396a7c48c2271961f8473bca9491
parent8bb3c026460193a0b89d41b8cff2fe732e0c2cca (diff)
downloadxmlgraphics-fop-df03268518c22b2394854d7265ab8705a561ab43.tar.gz
xmlgraphics-fop-df03268518c22b2394854d7265ab8705a561ab43.zip
Improve error messages when unsupported elements are encountered
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/fop-0_20_2-maintain@196424 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/org/apache/fop/fo/FOTreeBuilder.java60
-rw-r--r--src/org/apache/fop/fo/UnknownXMLObj.java6
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;
+ }
}
}