javac找不到符号构造函数Service

时间:2013-01-03 00:40:35

标签: java ant jax-ws cxf endorsed

我正在借助这本Apache CXF Web Service Development书来学习CXF,但是,唉,这本书中的一个样本项目甚至都不会编译!

有问题的代码是第3章的contractfirst,这不是拼写错误的问题,因为我使用从the book's support site下载的逐字源代码。

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文件中。

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

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

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

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

3 个答案:

答案 0 :(得分:15)

根据您的描述,这听起来类似于in this post所描述的问题。

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

注意“认可”是指在%JAVA_HOME%\jre\lib\endorsed中放置相关的JAR文件(本例中为jaxb-api.jar,jaxws-api.jar)(注意jre在路径中)。 直接在JDK的 lib 目录下创建认可的目录。

或...如果您不想触摸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传递(为此,你需要设置wsimport和wsgen的fork =“true”属性)蚂蚁任务)。

信用转到Rama Pulavarthi

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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