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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 21:51:24  来源:igfitidea点击:

'Batik not in classpath' error when running servlet

javaservletsclasspath

提问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 servletis

我在 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.

这似乎是Fop中的一个错误,他们忘记包含依赖项。

The missing class is in the JAR file - xml-apis-ext.jarWhich 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!!!

那就是!!!