使用JaxWsDynamicClientFactory的动态客户端(Apache CXF)

时间:2013-03-22 06:47:55

标签: java web-services

我想创建一个动态客户端来调用我创建的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)

我不知道问题是什么。任何建议都会有很大的帮助。感谢。

2 个答案:

答案 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。

  1. 检查您的路径。确保它指向$ {JDK_LOCATION} / bin
  2. 检查你的JAVA_HOME。确保它指向$ {JDK_LOCATION}
  3. 转到控制面板/ java。在上面添加JDK。
  4. 你还需要在Window-> Preference-> Java-> Installed JREs中检查eclipse