2013-02-18 31 views
2

我的Ant 1.8.2構建開始因W3C網站響應SVG DTD請求的HTTP 303響應而失敗。所以我試圖引入一個XML目錄來在本地解決它們。Ant無法找到XML目錄解析器

如果我不做任何更改到classpath中,我得到:

警告:XML解析器找不到;外部目錄將被忽略

如果我從Apache的XML共享1.2到類路徑(例如,通過使用-lib上的螞蟻調用)添加resolver.jar,我得到

/用戶/麥克風/ .... /build.xml:123:java.lang.reflect.InvocationTargetException 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl .invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.tools.ant.types.XMLCatalog $ ExternalResolver.processExternalCatalo gs(XMLCatalog.java:1115) at org.apache.tools.ant.types.XMLCatalog $ ExternalResolver.resolveEntity(XMLCatalog.java:960) at org.apache.tools.ant.types.XMLCatalog.resolveEntity(XMLCatalog。 java:391)

它向我建議我使用的resolver.jar已經定位,但沒有Ant期望的接口。

我應該在哪裏得到正確的resolver.jar與Ant一起使用?

回答

2

我發現溶液(井,一個解決辦法...)

的的InvocationTargetException原來是一個紅色的鯡魚 - 仲錯誤。主要錯誤如下:我的目錄文件catalog.xml包含對DTD catalog.dtd的相對引用,Ant(或解析器)無法解析對catalog.dtd的引用。它正在查看包含我的構建文件的目錄,而不是包含目錄的目錄。這顯然是某個地方的錯誤;如果我進一步調查,我的懷疑是Ant將目錄文件傳遞給沒有基本URI的目錄解析器,或者帶有不正確的基本URI,因此XML解析器必須猜測在哪裏找到DTD,並且猜測錯誤。

我的解決方案是刪除對DTD的引用。在此之後,目錄中列出的URI已正確解析爲本地副本。有趣的是,對本地副本的引用也與目錄有關,因此似乎目錄解析程序知道目錄是在哪裏,但有人在解析時沒有告訴Xerces。

0

我有同樣的問題,但對我來說,從Ant 1.8.1升級到1.9.4解決了這個問題。

我的猜測是根本原因是bug 52754

編輯:同樣的問題在一個稍微不同的形式復出,使用JDK 1.6.0_18,堆棧跟蹤是這樣的:

java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.tools.ant.types.XMLCatalog$ExternalResolver.processExternalCatalogs(XMLCatalog.java:1116) 
    at org.apache.tools.ant.types.XMLCatalog$ExternalResolver.resolve(XMLCatalog.java:1007) 
    at org.apache.tools.ant.types.XMLCatalog.resolve(XMLCatalog.java:420) 
    at net.sf.saxon.style.XSLGeneralIncorporate.getIncludedStylesheet(XSLGeneralIncorporate.java:104) 
    at net.sf.saxon.style.XSLStylesheet.spliceIncludes(XSLStylesheet.java:754) 
    at net.sf.saxon.style.XSLStylesheet.preprocess(XSLStylesheet.java:676) 
    at net.sf.saxon.PreparedStylesheet.setStylesheetDocument(PreparedStylesheet.java:331) 
    at net.sf.saxon.PreparedStylesheet.prepare(PreparedStylesheet.java:163) 
    at net.sf.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:139) 
    at org.apache.tools.ant.taskdefs.optional.TraXLiaison.readTemplates(TraXLiaison.java:300) 
    at org.apache.tools.ant.taskdefs.optional.TraXLiaison.createTransformer(TraXLiaison.java:317) 
    at org.apache.tools.ant.taskdefs.optional.TraXLiaison.transform(TraXLiaison.java:178) 
    at org.apache.tools.ant.taskdefs.XSLTProcess.process(XSLTProcess.java:842) 
    at org.apache.tools.ant.taskdefs.XSLTProcess.execute(XSLTProcess.java:432) 
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
    at org.apache.tools.ant.Task.perform(Task.java:348) 
    at org.apache.tools.ant.Target.execute(Target.java:435) 
    at org.apache.tools.ant.Target.performTasks(Target.java:456) 
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 
    at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38) 
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248) 
    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:441) 
    at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105) 
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
    at org.apache.tools.ant.Task.perform(Task.java:348) 
    at org.apache.tools.ant.Target.execute(Target.java:435) 
    at org.apache.tools.ant.Target.performTasks(Target.java:456) 
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 
    at org.apache.tools.ant.Project.executeTarget(Project.java:1364) 
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248) 
    at org.apache.tools.ant.Main.runBuild(Main.java:851) 
    at org.apache.tools.ant.Main.startAnt(Main.java:235) 
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1 
    at java.lang.String.substring(String.java:1937) 
    at java.lang.String.substring(String.java:1904) 
    at org.apache.xml.resolver.helpers.PublicId.normalize(Unknown Source) 
    at org.apache.xml.resolver.Catalog.addEntry(Unknown Source) 
    at org.apache.tools.ant.types.resolver.ApacheCatalog.addEntry(ApacheCatalog.java:118) 
    at org.apache.xml.resolver.readers.OASISXMLCatalogReader.startElement(Unknown Source) 
    at org.apache.xml.resolver.readers.SAXCatalogReader.startElement(Unknown Source) 
    at org.apache.xml.resolver.readers.SAXParserHandler.startElement(Unknown Source) 
    at org.apache.xerces.parsers.AbstractSAXParser.startElement(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.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) 
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) 
    at org.apache.xml.resolver.readers.SAXCatalogReader.readCatalog(Unknown Source) 
    at org.apache.xml.resolver.Catalog.parseCatalogFile(Unknown Source) 
    at org.apache.xml.resolver.Catalog.parsePendingCatalogs(Unknown Source) 
    at org.apache.xml.resolver.Catalog.parseCatalog(Unknown Source) 
    at org.apache.tools.ant.types.resolver.ApacheCatalogResolver.parseCatalog(ApacheCatalogResolver.java:118) 
... 47 more 

有趣的是,該錯誤只發生在Windows和只是偶爾,也許是七次左右的一次。

該錯誤源自Apache Resolver庫中PublicId類的normalize function

normal.indexOf(" ")有時會返回錯誤的值。例如,如果輸入字符串是-//OASIS//ELEMENTS DITA 1.x Programming Domain//EN,則pos變量將獲得50作爲其值,即使公共ID字符串沒有任何額外的空格。

這使我認爲根本原因可能與JDK bug #6967156有某種關係,但我無法確定,因爲在我們的例子中,錯誤是間歇性的,但是錯誤報告中沒有任何跡象表明這一點。