2

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

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

代码段应导出为可运行的 JAR,并用于在远程位置上工作。

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

如何做到这一点?

4

1 回答 1

3

可以将 WSDL 添加到 JAR。似乎约定是将 WSDL 放在 JAR 中的META-INF/wsdl位置(尽管 Oracle 工具似乎更喜欢META-INF/wsdls(例如,请参阅本 Oracle 教程的第 9 点)。

我没有使用 Oracle Enterprise Pack for Eclipse,我猜当您指定将 WSDL 打包到 JAR 中时,OEPE ClientGen 任务会正确生成客户端类,但我认为这与传递-wsdllocation META-INF/wsdls/YourService.wsdl参数不同运行wsimport.exe

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。

于 2012-07-13T20:00:25.107 回答