我有一个非常好的Web服务客户端,其中有一行定义了WSDL的位置:
@WebServiceClient(name = "CReceiveMOMessageService",
targetNamespace = "http://...",
wsdlLocation = "CReceiveMOMessageService.wsdl")
代码段应该作为可运行的JAR导出,并且可以在远程位置工作。
当我如上所述定义WSDL的位置时,它会在我运行JAR文件的目录中查找WSDL文件。相反,我想要做的是将WSDL文件添加到项目文件夹并在此之后导出为JAR,并以指向JAR文件中的WSDL的方式配置wsdlLocation
参数。
如何实现这一目标?
答案 0 :(得分:3)
可以将WSDL添加到JAR。似乎惯例是将WSDL放在META-INF/wsdl
位置的JAR中(尽管Oracle工具似乎偏好META-INF/wsdls
(例如,参见point 9 of this Oracle tutorial)。
我没有使用Eclipse的Oracle Enterprise Pack,我猜想当你指定在JAR中打包WSDL时,OEPE ClientGen任务会正确生成客户端类,但我不认为它与传递相同运行wsimport.exe
时的-wsdllocation META-INF/wsdls/YourService.wsdl
参数:
wsimport.exe
将输出@WebServiceClient(... wsdlLocation = "META-INF/wsdls/YourService.wsdl")
,但通常也会在类的静态初始值设定项中生成如下代码:
baseUrl = YourService.class.getResource(".");
url = new URL(baseUrl, "META-INF/wsdls/YourService.wsdl");
仍将指向一个根文件夹,然后将其添加到提供的WSDL路径以最终获得不存在的路径。
您必须在生成类之后更改类以包含类似的内容:
url = YourService.class.getClassLoader().getResource("META-INF/wsdls/YourService.wsdl");
现在将指向JAR。当然,在构建客户端JAR时,您必须在该位置打包WSDL。