java 运行 servlet 时出现“蜡染不在类路径中”错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7891250/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
'Batik not in classpath' error when running servlet
提问by AndrewQ
I'm writing an extension of the FopServlet.java included in Apache FOP.
我正在编写包含在 Apache FOP 中的 FopServlet.java 的扩展。
My platform is Linux CentOS 5.7-64bit, with Tomcat 5.5.
我的平台是 Linux CentOS 5.7-64 位,Tomcat 5.5。
The servlet
'works', but I'm unable to process SVG files.
该servlet
“作品”,但我无法处理SVG文件。
The error I get when Tomcat runs the servlet
is
我在 Tomcat 运行时得到的错误servlet
是
'Batik not in classpath'.
'蜡染不在类路径中'。
But in 'webapps/fop/WEB-INF/lib'
there is 'batik-all-1.7.jar'
and all the other jars.
但在'webapps/fop/WEB-INF/lib'
那里'batik-all-1.7.jar'
和所有其他罐子。
I'm not a java expert, so I'm unable to focus on the problem; googling around, maybe there is a missing jar, but which one?
我不是Java专家,所以我无法专注于这个问题;谷歌搜索,也许有一个丢失的罐子,但哪个?
AVVERTENZA: Batik not in class path
java.lang.NoClassDefFoundError: org/w3c/dom/svg/SVGDocument
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1862)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:888)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1341)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1220)
at org.apache.batik.dom.svg.SVGDOMImplementation.createDocument(Unknown Source)
at org.apache.batik.dom.util.SAXDocumentFactory.startElement(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.batik.dom.util.SAXDocumentFactory.createDocument(Unknown Source)
at org.apache.batik.dom.util.SAXDocumentFactory.createDocument(Unknown Source)
at org.apache.batik.dom.svg.SAXSVGDocumentFactory.createDocument(Unknown Source)
at org.apache.batik.dom.svg.SAXSVGDocumentFactory.createSVGDocument(Unknown Source)
at org.apache.fop.image.loader.batik.PreloaderSVG$Loader.getImage(PreloaderSVG.java:122)
at org.apache.fop.image.loader.batik.PreloaderSVG$Loader.access0(PreloaderSVG.java:105)
at org.apache.fop.image.loader.batik.PreloaderSVG.preloadImage(PreloaderSVG.java:73)
at org.apache.xmlgraphics.image.loader.ImageManager.preloadImage(ImageManager.java:175)
at org.apache.xmlgraphics.image.loader.cache.ImageCache.needImageInfo(ImageCache.java:128)
at org.apache.xmlgraphics.image.loader.ImageManager.getImageInfo(ImageManager.java:122)
at org.apache.fop.fo.flow.ExternalGraphic.bind(ExternalGraphic.java:81)
at org.apache.fop.fo.FObj.processNode(FObj.java:123)
at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuilder.java:282)
at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:171)
at org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1072)
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:484)
at org.apache.fop.servlet.FopServlet.render(FopServlet.java:260)
at org.apache.fop.servlet.FopServlet.renderFO(FopServlet.java:199)
at org.apache.fop.servlet.FopServlet.doGet(FopServlet.java:136)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:636)
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.svg.SVGDocument
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1374)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1220)
... 64 more
回答by Nate
It appears to be a bug in Fopwhere they forgot to include a dependency.
The missing class is in the JAR file - xml-apis-ext.jar
Which is also available from the Apache xml-commons project.
缺少的类在 JAR 文件中 -xml-apis-ext.jar
也可以从Apache xml-commons 项目中获得。
回答by Edwin Buck
The error message is misleading, this is really a lack of xml commons external.
错误信息有误导性,这确实是缺乏xml commons external。
回答by Adolfo
If you are executing Batik from fedora using the .jar file it is quite painful due to the java ignoring the -classpath flag. I assume batik in /usr/share/java Select the location according to your system One solution could be the following: create a scratch directory (I assume you are superuser, anyway you always can sudo commands)
如果您使用 .jar 文件从 Fedora 执行 Batik,由于 java 忽略 -classpath 标志,这非常痛苦。我假设蜡染在 /usr/share/java 根据您的系统选择位置一种解决方案可能如下:创建一个临时目录(我假设您是超级用户,无论如何您总是可以使用sudo命令)
# mkdir scratch
# cd scratch
# jar -xf /usr/share/java/batik-rasterizer.jar
This output the content of the jar file into scratch, then create a MANIFEST.MF file or take the output one from the dump
这会将 jar 文件的内容输出到草稿中,然后创建一个 MANIFEST.MF 文件或从转储中获取输出
#cp META-INF/MANIFEST.MF .
Now edit the MANIFEST.MF file (I like to use vi, anyone use their preferred one)
现在编辑 MANIFEST.MF 文件(我喜欢使用 vi,任何人都可以使用他们喜欢的)
#vi MANIFEST.MF
Add a Class-Path: line into the MANIFEST.MF as for example:
将 Class-Path: 行添加到 MANIFEST.MF 中,例如:
Class-Path: batik-all.jar xmlgraphics-commons.jar xml-commons-apis-ext.jar pdf-transcoder.jar avalon-framework.jar avalon-framework-api.jar apache-commons-logging.jar apache-commons-io.jar
Then close the file and recreate the jar file
然后关闭文件并重新创建jar文件
#jar cmf MANIFEST.MF /usr/share/java/batik-rasterizer.jar org/*
Include all jar that batik has nested classes
包括蜡染嵌套类的所有 jar
Then you can use it!
然后就可以使用了!
$java -jar /usr/share/java/batik-rasterizer.jar -scriptSecurittyOff -m image/png -d image.png image.svg
for example
例如
And that is!!!
那就是!!!