[英]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.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任务)。
赞同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.