javac找不到符号构造函数Service

Ete*_*ner 8 java ant cxf jax-ws endorsed

我正在借助这本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);
^
Run Code Online (Sandbox Code Playgroud)

在OrderProcessService.java文件中.

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

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

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

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

Wit*_*eld 15

从你的描述,这听起来类似描述的问题在这个岗位.

为了解决这个问题,你可以简单地复制jaxb-api.jar,jaxws-api.jar到JDK的JRE的 /lib/endorsed

请注意,"endorsing"表示放置相关的JAR文件(在这种情况下为jaxb-api.jar,jaxws-api.jar)%JAVA_HOME%\jre\lib\endorsed(注意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
Run Code Online (Sandbox Code Playgroud)

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

幸得拉玛Pulavarthi.