Ошибка «Batik not in classpath» при запуске сервлета - PullRequest
4 голосов
/ 25 октября 2011

Я пишу расширение файла FopServlet.java, включенного в Apache FOP.

Моя платформа - Linux CentOS 5.7-64bit с Tomcat 5.5.

servlet 'работает', но я не могу обработать файлы SVG.

Я получаю ошибку, когда Tomcat запускает servlet:

«Батик не в пути к классам».

Но в 'webapps/fop/WEB-INF/lib' есть 'batik-all-1.7.jar' и все остальные банки.

Я не эксперт по 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.access$100(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

Ответы [ 3 ]

19 голосов
/ 25 октября 2011

Кажется, это ошибка в Fop , где они забыли включить зависимость.

Отсутствующий класс находится в файле JAR - xml-apis-ext.jar, который также доступен из проекта Apache xml-commons .

5 голосов
/ 25 октября 2011

Сообщение об ошибке вводит в заблуждение, это действительно нехватка xml commons external.

0 голосов
/ 08 октября 2014

Если вы выполняете Batik из fedora, используя файл .jar, это довольно болезненно из-за того, что java игнорирует флаг -classpath. Я предполагаю батик в / usr / share / java Выберите местоположение в соответствии с вашей системой Одним из решений может быть следующее: создайте каталог с нулями (я полагаю, что вы суперпользователь, в любом случае вы всегда можете использовать команды sudo)

# mkdir scratch
# cd scratch
# jar -xf /usr/share/java/batik-rasterizer.jar

Выводит содержимое файла jar на пустую строку, затем создает файл MANIFEST.MF или извлекает выходной файл из дампа

#cp META-INF/MANIFEST.MF .

Теперь отредактируйте файл MANIFEST.MF (мне нравится использовать vi, любой предпочитает другой)

#vi MANIFEST.MF

Добавьте строку 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

Затем закройте файл и заново создайте файл jar

#jar cmf MANIFEST.MF /usr/share/java/batik-rasterizer.jar org/*

Включить все банки, в которые вложены классы батика

Тогда вы можете использовать его!

$java -jar /usr/share/java/batik-rasterizer.jar -scriptSecurittyOff -m image/png -d image.png image.svg

например

И это !!!

...