javac找不到符号构造函数Service

我正在借助这本Apache CXF Web服务开发书学习CXF,但是,本书中的一个示例项目甚至无法编译!

有问题的代码是第3章的contractfirst ,它不是拼写错误的问题,因为我使用从书籍支持网站下载的源代码逐字。

3个编译错误实际上指向一个问题:

 Chapter3\contractfirst\src\demo\order\OrderProcessService.java:52: cannot find symbol symbol: constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[]) location: class javax.xml.ws.Service super(WSDL_LOCATION, SERVICE, features); ^ 

在OrderProcessService.java文件中。

初步重新搜索表明这可能是JAX-WS 2.2与2.1的问题,但我不知道如何使这个基于ANT的编译环境“支持”JAX-WS 2.2。

我尝试在%JAVA_HOME%\lib\endorsed放置一个jaxws-api.jar ,我尝试将该jar添加到项目的库列表中但似乎没有任何帮助。

我没有使用Maven ,因此我甚至无法将其列为依赖项,并希望这将被神奇地解决。

知道怎么解决这个问题吗? 这样我可以构建这个非常简单的项目吗?

根据您的描述,这听起来类似于本文中描述的问题。

要解决此问题,您只需将jaxb-api.jarjaxws-api.jar复制到JDK的JRE /lib/endorsed

请注意 ,“endorsing”表示将相关的JAR文件(在本例中为jaxb-api.jar,jaxws-api.jar)放在%JAVA_HOME%\jre\lib\endorsed (注意路径中的jre )。 不要直接在JDK的lib目录下创建endorsed目录。

或者…如果您不想触摸JDK安装,请使用这些env vars使用wsimport和wsgen(其中JAXWS_HOME指向JAX-WS 2.1安装):

 WSIMPORT_OPTS=-Djava.endorsed.dirs=%JAXWS_HOME%/lib WSGEN_OPTS=-Djava.endorsed.dirs=%JAXWS_HOME%/lib 

或者……如果你使用ant任务,你可以在调用wsimport和wsgen ant任务时将-Djava.endorsed.dirs=%JAXWS_HOME%/lib作为jvmarg传递(为此,你需要设置fork =“true”属性) wsimport和wsgen ant任务)。

归功于Rama Pulavarthi 。

赞同2.2版本的jaxws-api jar应该可行。 您还可以将“-fe jaxws21”标志传递给CXF wsdl2java命令,以使其生成2.1兼容代码。

%JAVA_HOME%\ jre \ lib \ endorsed中单独添加webservices-api-2.2.jar已经解决了我的问题。