定位.jar文件中的内部目录 - java

时间:2012-07-03 07:19:26

标签: java wsdl

我有一个非常好的Web服务客户端,其中有一行定义了WSDL的位置:

@WebServiceClient(name = "CReceiveMOMessageService", 
                  targetNamespace = "http://...", 
                  wsdlLocation = "CReceiveMOMessageService.wsdl")

代码段应该作为可运行的JAR导出,并且可以在远程位置工作。

当我如上所述定义WSDL的位置时,它会在我运行JAR文件的目录中查找WSDL文件。相反,我想要做的是将WSDL文件添加到项目文件夹并在此之后导出为JAR,并以指向JAR文件中的WSDL的方式配置wsdlLocation参数。

如何实现这一目标?

1 个答案:

答案 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。