异常信息如下:
二月 , :: 上午 org.apache.cxf.common.jaxb.JAXBUtils logGeneratedClassNames 信息: Created classes: com.demo.ObjectFactory, com.demo.SayHi, com.demo.SayHiResponse, com.demo.SayHiToUser, com.demo.SayHiToUserList, com.demo.SayHiToUserListResponse, com.demo.SayHiToUserResponse, com.demo.User Exception in thread "main" java.lang.NullPointerException at org.apache.cxf.common.util.Compiler.useJava6Compiler(Compiler.java:) at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:) at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:) at org.apache.cxf.endpoint.) at org.apache.cxf.endpoint.) at org.apache.cxf.endpoint.) at org.apache.cxf.endpoint.) at org.apache.cxf.endpoint.) at com.demo.HelloWordClient.main(HelloWordClient.java:)
上述是在网上摘抄了一个cxf的实例,运行,然后报了上述错误,查看源码,发现是org.apache.cxf.common.util.Compiler的useJava6Compiler方法中有这样一行代码:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
运行上述代码,发现返回结果compiler为null,所以会出现上述的空指针,然后网上搜索到一篇文章
http://www.cnblogs.com/fangwenyu/archive/2011/10/12/2209051.html
不过该文章中作者的java_home是jre安装目录,我的是jdk的安装目录,但是用文中同样的方式,将tools.jar放入到我的和jdk同一级的jre中,问题依然得到了解决。
PS:安装版的tomcat在安装的时候,虽然没有设置jre的环境变量 ,但是也会找到jre的安装目录,这两种情况都不会使用jdk安装目录中的jre