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.jar
, jaxws-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已经解决了我的问题。