[
https://issues.apache.org/jira/browse/FOP-2490?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Hussein Shafie updated FOP-2490:
--------------------------------
Description:
How to reproduce the problem (see attached files)
fop -fo __doc.fo -pdf __doc.pdf
Running this command fails with:
{noformat}
org.w3c.dom.DOMException: The current document is unable to create an element
of the requested type (namespace: http://www.w3.org/2000/svg, name:
svg:flowRoot).
at org.apache.batik.dom.AbstractNode.createDOMException(Unknown Source)
at
org.apache.batik.anim.dom.SVGDOMImplementation.createElementNS(Unknown Source)
at org.apache.batik.anim.dom.SVGOMDocument.createElementNS(Unknown
Source)
at org.apache.xml.utils.DOMBuilder.startElement(DOMBuilder.java:324)
at
org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1072)
at
org.apache.fop.util.DelegatingContentHandler.startElement(DelegatingContentHandler.java:185)
at
org.apache.fop.fo.extensions.svg.SVGDOMContentHandlerFactory$Handler.startElement(SVGDOMContentHandlerFactory.java:137)
at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:179)
at
org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1072)
{noformat}
The expected result is EXPECTED__doc.pdf
My workaround:
In org/apache/fop/fo/extensions/svg/SVGDOMContentHandlerFactory.java,
I've replaced:
{noformat}
private DOMImplementation getDOMImplementation(String ver) {
//TODO It would be great if Batik provided this method as static
helper method.
if (ver == null || ver.length() == 0
|| ver.equals("1.0") || ver.equals("1.1")) {
return SVGDOMImplementation.getDOMImplementation();
} else if (ver.equals("1.2")) {
try {
Class clazz = Class.forName(
"org.apache.batik.dom.svg12.SVG12DOMImplementation");
return (DOMImplementation)clazz.getMethod(
"getDOMImplementation", (Class[])null).invoke(null,
(Object[])null);
} catch (Exception e) {
return SVGDOMImplementation.getDOMImplementation();
}
}
throw new RuntimeException("Unsupport SVG version '" + ver + "'");
}
{noformat}
by:
{noformat}
import org.apache.batik.anim.dom.SVG12DOMImplementation;
private DOMImplementation getDOMImplementation(String ver) {
//TODO It would be great if Batik provided this method as static
helper method.
if (ver == null || ver.length() == 0
|| ver.equals("1.0") || ver.equals("1.1")) {
return SVGDOMImplementation.getDOMImplementation();
} else if (ver.equals("1.2")) {
return SVG12DOMImplementation.getDOMImplementation();
}
throw new RuntimeException("Unsupport SVG version '" + ver + "'");
}
{noformat}
org.apache.batik.anim.dom.SVG12DOMImplementation is always
included in Batik-1.8-all.jar. Even if you prefer to keep Class.forName(),
please note that org.apache.batik.dom.svg12.SVG12DOMImplementation
no longer exists in Batik 1.8.
was:
How to reproduce the problem (see attached files)
fop -fo __doc.fo -pdf __doc.pdf
Running this command fails with:
---
org.w3c.dom.DOMException: The current document is unable to create an element
of the requested type (namespace: http://www.w3.org/2000/svg, name:
svg:flowRoot).
at org.apache.batik.dom.AbstractNode.createDOMException(Unknown Source)
at
org.apache.batik.anim.dom.SVGDOMImplementation.createElementNS(Unknown Source)
at org.apache.batik.anim.dom.SVGOMDocument.createElementNS(Unknown
Source)
at org.apache.xml.utils.DOMBuilder.startElement(DOMBuilder.java:324)
at
org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1072)
at
org.apache.fop.util.DelegatingContentHandler.startElement(DelegatingContentHandler.java:185)
at
org.apache.fop.fo.extensions.svg.SVGDOMContentHandlerFactory$Handler.startElement(SVGDOMContentHandlerFactory.java:137)
at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:179)
at
org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1072)
---
The expected result is EXPECTED__doc.pdf
My workaround:
In org/apache/fop/fo/extensions/svg/SVGDOMContentHandlerFactory.java,
I've replaced:
---
private DOMImplementation getDOMImplementation(String ver) {
//TODO It would be great if Batik provided this method as static
helper method.
if (ver == null || ver.length() == 0
|| ver.equals("1.0") || ver.equals("1.1")) {
return SVGDOMImplementation.getDOMImplementation();
} else if (ver.equals("1.2")) {
try {
Class clazz = Class.forName(
"org.apache.batik.dom.svg12.SVG12DOMImplementation");
return (DOMImplementation)clazz.getMethod(
"getDOMImplementation", (Class[])null).invoke(null,
(Object[])null);
} catch (Exception e) {
return SVGDOMImplementation.getDOMImplementation();
}
}
throw new RuntimeException("Unsupport SVG version '" + ver + "'");
}
---
by:
---
import org.apache.batik.anim.dom.SVG12DOMImplementation;
private DOMImplementation getDOMImplementation(String ver) {
//TODO It would be great if Batik provided this method as static
helper method.
if (ver == null || ver.length() == 0
|| ver.equals("1.0") || ver.equals("1.1")) {
return SVGDOMImplementation.getDOMImplementation();
} else if (ver.equals("1.2")) {
return SVG12DOMImplementation.getDOMImplementation();
}
throw new RuntimeException("Unsupport SVG version '" + ver + "'");
}
---
org.apache.batik.anim.dom.SVG12DOMImplementation is always
included in Batik-1.8-all.jar. Even if you prefer to keep Class.forName(),
please note that org.apache.batik.dom.svg12.SVG12DOMImplementation
no longer exists in Batik 1.8.
> Embedded SVG 1.2 not supported by FOP 2.0
> -----------------------------------------
>
> Key: FOP-2490
> URL: https://issues.apache.org/jira/browse/FOP-2490
> Project: FOP
> Issue Type: Bug
> Affects Versions: 2.0
> Environment: Linux, Java 1.6 64-bit (not relevant)
> Reporter: Hussein Shafie
> Attachments: EXPECTED__doc.pdf, __doc.fo
>
>
> How to reproduce the problem (see attached files)
> fop -fo __doc.fo -pdf __doc.pdf
> Running this command fails with:
> {noformat}
> org.w3c.dom.DOMException: The current document is unable to create an element
> of the requested type (namespace: http://www.w3.org/2000/svg, name:
> svg:flowRoot).
> at org.apache.batik.dom.AbstractNode.createDOMException(Unknown
> Source)
> at
> org.apache.batik.anim.dom.SVGDOMImplementation.createElementNS(Unknown Source)
> at org.apache.batik.anim.dom.SVGOMDocument.createElementNS(Unknown
> Source)
> at org.apache.xml.utils.DOMBuilder.startElement(DOMBuilder.java:324)
> at
> org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1072)
> at
> org.apache.fop.util.DelegatingContentHandler.startElement(DelegatingContentHandler.java:185)
> at
> org.apache.fop.fo.extensions.svg.SVGDOMContentHandlerFactory$Handler.startElement(SVGDOMContentHandlerFactory.java:137)
> at
> org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:179)
> at
> org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1072)
> {noformat}
> The expected result is EXPECTED__doc.pdf
> My workaround:
> In org/apache/fop/fo/extensions/svg/SVGDOMContentHandlerFactory.java,
> I've replaced:
> {noformat}
> private DOMImplementation getDOMImplementation(String ver) {
> //TODO It would be great if Batik provided this method as static
> helper method.
> if (ver == null || ver.length() == 0
> || ver.equals("1.0") || ver.equals("1.1")) {
> return SVGDOMImplementation.getDOMImplementation();
> } else if (ver.equals("1.2")) {
> try {
> Class clazz = Class.forName(
>
> "org.apache.batik.dom.svg12.SVG12DOMImplementation");
> return (DOMImplementation)clazz.getMethod(
> "getDOMImplementation",
> (Class[])null).invoke(null, (Object[])null);
> } catch (Exception e) {
> return SVGDOMImplementation.getDOMImplementation();
> }
> }
> throw new RuntimeException("Unsupport SVG version '" + ver + "'");
> }
> {noformat}
> by:
> {noformat}
> import org.apache.batik.anim.dom.SVG12DOMImplementation;
> private DOMImplementation getDOMImplementation(String ver) {
> //TODO It would be great if Batik provided this method as static
> helper method.
> if (ver == null || ver.length() == 0
> || ver.equals("1.0") || ver.equals("1.1")) {
> return SVGDOMImplementation.getDOMImplementation();
> } else if (ver.equals("1.2")) {
> return SVG12DOMImplementation.getDOMImplementation();
> }
> throw new RuntimeException("Unsupport SVG version '" + ver + "'");
> }
> {noformat}
> org.apache.batik.anim.dom.SVG12DOMImplementation is always
> included in Batik-1.8-all.jar. Even if you prefer to keep Class.forName(),
> please note that org.apache.batik.dom.svg12.SVG12DOMImplementation
> no longer exists in Batik 1.8.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)