繁体   English   中英

javac找不到符号构造函数Service

[英]javac cannot find symbol constructor Service

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

有问题的代码是第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已经解决了我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM