我想创建一个动态客户端来调用我创建的Web服务。我尝试使用其官方site中提到的JaxWsDynamicClientFactory
,但我没有获得任何输出。相反,我得到了NullPointerException
。
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client c = dcf.createClient("http://localhost:8080/service/SearchingSEI?wsdl");
第二行是抛出异常。
堆栈追踪:
Exception in thread "main" java.lang.NullPointerException
at org.apache.cxf.common.util.Compiler.useJava6Compiler(Compiler.java:189)
at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:143)
at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:138)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.compileJavaSrc(DynamicClientFactory.java:599)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:367)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:235)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:228)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:183)
at com.client.dynamic.DynamicClientFactory.main(DynamicClientFactory.java:24)
我不知道问题是什么。任何建议都会有很大的帮助。感谢。
答案 0 :(得分:3)
您需要使用JDK而不是JRE运行代码。 NPE发生在CXF的Compiler
类
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
如果你在JRE中运行, compiler
为空。
答案 1 :(得分:1)
这是因为CXF使用JRE7而不是JDK7。在Windows中安装JDK时,默认情况下也会安装JRE,并且所有首选项都指向JRE。