8

我正在借助这本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。

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

我没有使用Maven,所以我什至不能将它列为依赖项,并希望这能神奇地解决。

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

4

3 回答 3

15

根据您的描述,这听起来与本文中描述的问题相似

要解决此问题,您可以简单地将jaxb-api.jar,复制jaxws-api.jar到 JDK 的 JRE /lib/endorsed

请注意,“背书”意味着将相关的 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 任务,您可以-Djava.endorsed.dirs=%JAXWS_HOME%/lib在调用 wsimport 和 wsgen ant 任务时作为 jvmarg 传递(为此,您需要设置 wsimport 和 wsgen ant 任务的 fork="true" 属性)。

归功于 Rama Pulavarthi 。

于 2013-01-03T18:23:40.437 回答
0

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

于 2013-01-03T01:28:11.047 回答
0

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

于 2014-05-22T10:52:38.313 回答