我是网络服务开发的新手。我正在使用带有 Axis2 插件和 Tomcat 7 的 Netbeans 7.0。
我为定义 Web 方法的服务器组件创建了一个项目,然后为客户端组件创建了另一个项目。客户端是通过选择新建 -> Web 服务客户端在 Netbeans 中创建的。
当您在 Netbeans 中选择新建 -> Web 服务客户端时,它会立即要求您提供 WSDL URL。所以我当然给了它本地 Tomcat 安装的 WSDL URL。但是当我将它作为一个真正的应用程序分发时呢?用户不会将他们的客户指向 http://localhost:8080/axis2/services/ ?wsdl。我的意思是,当从 IDE 运行客户端时,一切正常,但是当我分发它时(这是一个劳动力管理应用程序,您可以在一个或多个客户端上打卡/下类,并将时间卡写入中央数据库),每个客户端都需要能够指向它应该连接到的任何生产服务器的 Web 服务 URL。
我想将 web 服务 URL 存储在属性文件中,但真的不知道在客户端以编程方式执行哪些操作才能调用从属性文件加载的 URL。
在我客户的 dist 文件夹中,如果我打开 netbeans 使用 WinZip 创建的 JAR,我会看到一个名为 jax-ws-catalog.xml 的文件,其中包含 URL(指向本地主机)。我假设这是在运行时使用的 URL 的来源。
那么正确的做法是什么?我四处搜索,但我在谷歌搜索中发现的东西往往显示网络服务调用的方式与 Netbeans 放在一起的自动生成的代码完全不同,我想要一些具体的信息Netbeans 创建了一个 Web 服务客户端,这样我就不会为了让 IDE 覆盖它们而做出更改。
谢谢!抱歉,解释很长。
-吉姆
最佳答案
我实际上以不同的方式解决了这个问题,它可能是特定于 Netbeans 做事的方式。 Shott85 提供的答案也很好,但我认为这更具体地针对 Netbeans 自动生成代码的方式。
所以我有一个名为 SimplyLaborServer 的所有 Web 方法所在的项目,以及一个名为 SimplyLaborClient 的具有 Web 服务客户端的项目。
在 Netbeans 中,在“Generated Sources (jax-ws)”节点中的 SimplyLaborClient 项目下,它们有一个 SimplyLaborServer.java 文件,其中有一个扩展服务的类。它有一个私有(private) URL,该 URL 硬编码到我的本地服务器的 URL,如下所示...
url = new URL("http://localhost:8080/axis2/services/SimplyLaborServer?wsdl");
并且在默认构造函数中,它使用此 URL。但它还提供了一个构造函数,如下所示,我可以在其中指定 URL...
public SimplyLaborServer(URL wsdlLocation) {
super(wsdlLocation, SIMPLYLABORSERVER_QNAME);
}
所以当我在我的客户端中有一个看起来像这样的自动生成方法时......
private static String testConnection() {
simplylaborclient.SimplyLaborServer service = new simplylaborclient.SimplyLaborServer();
simplylaborclient.SimplyLaborServerPortType port = service.getSimplyLaborServerHttpSoap12Endpoint();
return port.testConnection();
}
我可以简单地加载一个具有端点 URL 的 Properties 对象,并将这一行更改为如下所示,其中 props 是一个 Properties 对象,它具有使用正确 URL 定义的 endpointUrl。
simplylaborclient.SimplyLaborServer service = new simplylaborclient.SimplyLaborServer(new URL(props.getProperty("endpointUrl")));
我唯一担心的是,当您从“Web 服务引用”节点拖放这些方法时,它们会自动生成。如果我在服务器端进行其他更改,我不希望它们被覆盖。
所以我仍然愿意听取反馈,无论这是否是正确的做法。
谢谢
关于java - 使用 Netbeans 7 和 Axis2 从属性文件为客户端配置 Web 服务 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591354/