When running my app with ANT, no XPath implementation can be found
I wrote an app that uses XPath to query some XML config files. When I run it in eclipse, it works just fine. I also wrote an ant target that runs the application. However, The app gives me a runtime exception when running it from ant. The exception says:
XPathFactory#newInstance failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp.xpath/dom
I'm using JDK 1.6, which is supposed to have already an implementation for XPath. Is there something I'm missing?
Edit 1: Adding the complete stack trace gotten from ANT. I'm using 1.5 compliance.
Detected Java version: 1.5 in: C:\Java\jdk1.6.0_02\jre Detected OS: Windows XP parsing buildfile C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist\run_lora.xml with URI = file:///C:/Automation/LocalizationResourceAnalyzer-int/Tools/LocalizationResourceAnalyzer/dist/run_lora.xml Project base dir set to: C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist Build sequence for target(s) `run_all' is [run_all] Complete build sequence is [run_all, run, ] run_all: Project base dir set to: C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist [antcall] calling target(s) [run] in build file C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist\run_lora.xml parsing buildfile C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist\run_lora.xml with URI = file:///C:/Automation/LocalizationResourceAnalyzer-int/Tools/LocalizationResourceAnalyzer/dist/run_lora.xml Project base dir set to: C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist Override ignored for property config.dir Override ignored for property report.dir Build sequence for target(s) `run' is [run] Complete build sequence is [run, run_all, ] [antcall] Entering C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist\run_lora.xml... Build sequence for target(s) `run' is [run] Complete build sequence is [run, run_all, ] run: [echo] ant.java.version: 1.5 [echo] C:\apache-ant-1.6.5\lib\ant-launcher.jar;C:\Program Files\Common Files\Compuware\DLM40JNI.jar;C:\apache-ant-1.6.5\lib\ant-antlr.jar;C:\apache-ant-1.6.5\lib\ant-apache-bcel.jar;C:\apache-ant-1.6.5\lib\ant-apache-bsf.jar;C:\apache-ant-1.6.5\lib\ant-apache-log4j.jar;C:\apache-ant-1.6.5\lib\ant-apache-oro.jar;C:\apache-ant-1.6.5\lib\ant-apache-regexp.jar;C:\apache-ant-1.6.5\lib\ant-apache-resolver.jar;C:\apache-ant-1.6.5\lib\ant-commons-logging.jar;C:\apache-ant-1.6.5\lib\ant-commons-net.jar;C:\apache-ant-1.6.5\lib\ant-icontract.jar;C:\apache-ant-1.6.5\lib\ant-jai.jar;C:\apache-ant-1.6.5\lib\ant-javamail.jar;C:\apache-ant-1.6.5\lib\ant-jdepend.jar;C:\apache-ant-1.6.5\lib\ant-jmf.jar;C:\apache-ant-1.6.5\lib\ant-jsch.jar;C:\apache-ant-1.6.5\lib\ant-junit.jar;C:\apache-ant-1.6.5\lib\ant-launcher.jar;C:\apache-ant-1.6.5\lib\ant-netrexx.jar;C:\apache-ant-1.6.5\lib\ant-nodeps.jar;C:\apache-ant-1.6.5\lib\ant-starteam.jar;C:\apache-ant-1.6.5\lib\ant-stylebook.jar;C:\apache-ant-1.6.5\lib\ant-swing.jar;C:\apache-ant-1.6.5\lib\ant-trax.jar;C:\apache-ant-1.6.5\lib\ant-vaj.jar;C:\apache-ant-1.6.5\lib\ant-weblogic.jar;C:\apache-ant-1.6.5\lib\ant-xalan1.jar;C:\apache-ant-1.6.5\lib\ant-xslp.jar;C:\apache-ant-1.6.5\lib\ant.jar;C:\apache-ant-1.6.5\lib\bsf.jar;C:\apache-ant-1.6.5\lib\cruisecontrol-antlib.jar;C:\apache-ant-1.6.5\lib\js.jar;C:\apache-ant-1.6.5\lib\junit.jar;C:\apache-ant-1.6.5\lib\statcvs.jar;C:\apache-ant-1.6.5\lib\xercesImpl.jar;C:\apache-ant-1.6.5\lib\xml-apis.jar;C:\Java\jdk1.6.0_02\lib\tools.jar [java] Running in same VM Executing 'com.ti.et.swtest.l10n.lora.Lora' with arguments: [java] '-conf' [java] 'C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist\config\Nspire\product_bundles.xml' [java] '-locales' [java] 'C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist\config\Nspire\supported_locales.xml' [java] '-xrules' [java] 'C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist\config\Nspire\exclusion_rules.xml' [java] '-loc' [java] 'C:\LoRA_Reports\Nspire\localization_report.xml' [java] [java] The ' characters around the executable and arguments are [java] not part of the command. [java] Feb 2, 2010 6:28:07 PM com.ti.et.swtest.l10n.lora.Lora main [java] INFO: Localization Resource Analyzer (LoRA) started. [java] Feb 2, 2010 6:28:07 PM com.ti.et.swtest.l10n.lora.Lora loadLocales [java] INFO: Loading locales from: C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist\config\Nspire\supported_locales.xml [java] java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp/xpath/dom with the XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: No XPathFactory implementation found for the object model: http://java.sun.com/jaxp/xpath/dom [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:180) [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:710) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:178) [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:84) [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [java] at org.apache.tools.ant.Task.perform(Task.java:364) [java] at org.apache.tools.ant.Target.execute(Target.java:341) [java] at org.apache.tools.ant.Target.performTasks(Target.java:369) [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [java] at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:37) [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [java] at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:382) [java] at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:107) [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [java] at org.apache.tools.ant.Task.perform(Task.java:364) [java] at org.apache.tools.ant.Target.execute(Target.java:341) [java] at org.apache.tools.ant.Target.performTasks(Target.java:369) [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40) [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [java] at org.apache.tools.ant.Main.runBuild(Main.java:668) [java] at org.apache.tools.ant.Main.startAnt(Main.java:187) [java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246) [java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67) [java] Caused by: java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp/xpath/dom with the XPathFactoryConfigurationException: javax.xml.xpath.XPathFac开发者_开发问答toryConfigurationException: No XPathFactory implementation found for the object model: http://java.sun.com/jaxp/xpath/dom [java] at javax.xml.xpath.XPathFactory.newInstance(XPathFactory.java:101) [java] at com.ti.et.swtest.util.xml.XmlFile.(Unknown Source) [java] at com.ti.et.swtest.util.xml.XmlFile.(Unknown Source) [java] at com.ti.et.swtest.l10n.lora.Lora.loadLocales(Unknown Source) [java] at com.ti.et.swtest.l10n.lora.Lora.main(Unknown Source) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [java] at java.lang.reflect.Method.invoke(Method.java:597) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:202) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:134) [java] ... 24 more [java] --- Nested Exception --- [java] java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp/xpath/dom with the XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: No XPathFactory implementation found for the object model: http://java.sun.com/jaxp/xpath/dom [java] at javax.xml.xpath.XPathFactory.newInstance(XPathFactory.java:101) [java] at com.ti.et.swtest.util.xml.XmlFile.(Unknown Source) [java] at com.ti.et.swtest.util.xml.XmlFile.(Unknown Source) [java] at com.ti.et.swtest.l10n.lora.Lora.loadLocales(Unknown Source) [java] at com.ti.et.swtest.l10n.lora.Lora.main(Unknown Source) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [java] at java.lang.reflect.Method.invoke(Method.java:597) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:202) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:134) [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:710) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:178) [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:84) [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [java] at org.apache.tools.ant.Task.perform(Task.java:364) [java] at org.apache.tools.ant.Target.execute(Target.java:341) [java] at org.apache.tools.ant.Target.performTasks(Target.java:369) [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [java] at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:37) [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [java] at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:382) [java] at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:107) [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [java] at org.apache.tools.ant.Task.perform(Task.java:364) [java] at org.apache.tools.ant.Target.execute(Target.java:341) [java] at org.apache.tools.ant.Target.performTasks(Target.java:369) [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40) [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [java] at org.apache.tools.ant.Main.runBuild(Main.java:668) [java] at org.apache.tools.ant.Main.startAnt(Main.java:187) [java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246) [java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67) [antcall] Exiting C:\Automation\LocalizationResourceAnalyzer-int\Tools\LocalizationResourceAnalyzer\dist\run_lora.xml. BUILD SUCCESSFUL Total time: 0 seconds
Add the attribute fork="true"
to your java task in the ant script so that your class is run in a new java virtual machine. It's likely that something in ant is conflicting with the XML libraries built in to the JDK.
That exception looks like it is coming from the XPathFactory class, so java is finding the correct library. Rather it looks like XPathFactory is crashing. Perhaps this helps?
- If you have declared a System property or $JAVA_HOME/lib/jaxp.properties for the JAXP property "javax.xml.xpath.XPathFactory:uri" and assigned the value "http://java.sun.com/jaxp.xpath/dom", then I would suggest changing that value to "http://java.sun.com/jaxp/xpath/dom".
- If you do have the above property declared correctly, then try removing the property completely.
- If it still does not work correctly, then add some code before you instantiate the XPathFactory to detect which jar the class is being loaded from. "See ClassLoader.findResource(String name)". I see that Ant also packages an xml-apis.jar which has an implementation of XPathFactoryFinder and XPathFactory and maybe this interferes with the classes in JDK.
HTH
I know this is an older thread, but this post of mine might shed some light on the issue. It finds the XPathFactory you specify using a -D parameter that I've never seen documented.
精彩评论