gpt4 book ai didi

java - 针对 .jar 文件中的内部目录——java

转载 作者:行者123 更新时间:2023-12-04 05:40:34 25 4
gpt4 key购买 nike

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

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

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

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

如何做到这一点?

最佳答案

可以将 WSDL 添加到 JAR。似乎约定是将 WSDL 放在 JAR 中的 META-INF/wsdl 位置(尽管 Oracle 工具似乎倾向于 META-INF/wsdls(例如,参见 point 9 of this Oracle tutorial)。

我没有使用 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。

关于java - 针对 .jar 文件中的内部目录——java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11306203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com