使用Netbeans 7和Axis2从属性文件配置客户端的Web服务URL

时间:2012-03-06 20:30:11

标签: java web-services tomcat netbeans axis2

我是网络服务开发的新手。我正在使用带有Axis2插件和Tomcat 7的Netbeans 7.0。

我为服务器组件创建了一个项目,我在其中定义了Web方法,然后为客户端组件创建了另一个项目。通过选择New - >在Netbeans中创建客户端。 Web服务客户端。

选择新建 - > Netbeans中的Webservice Client,它会立即向您询问WSDL URL。所以当然我从本地Tomcat安装中给它了WSDL URL。但是当我将它作为一个真正的应用程序分发时呢?用户不会将客户指向http://localhost:8080/axis2/services/?wsdl。我的意思是,当从IDE运行客户端时,它一切正常,但是当我分发它时(它是一个劳动管理应用程序,通过你在一个或多个客户端进出时钟的方式,时间卡被写入中央数据库),每个客户端都需要能够指向它应该连接到的任何生产服务器的Web服务URL。

我想将webservice URL存储在属性文件中,但是不知道在客户端以编程方式执行什么操作来调用从属性文件加载的URL。

在我的客户端的dist文件夹中,如果我打开使用WinZip创建的netbeans的JAR,我会看到一个文件名jax-ws-catalog.xml,其中包含URL(指向localhost)。我假设这是运行时使用的URL来自。

那么正确的方法是什么?我一直在搜索,但我发现谷歌搜索的内容倾向于显示网络服务调用的方式与Netbeans放在一起的自动生成的代码完全不同,我想了解一些特定于Netbeans创建了一个Web服务客户端,这样我就不会为了让IDE覆盖它们而进行更改。

谢谢!很抱歉有很长的解释。

-Jim

3 个答案:

答案 0 :(得分:4)

我实际上是以不同的方式解决这个问题,而且它可能与Netbeans的工作方式有关。 Shott85提供的答案也很好,但我认为这更像是Netbeans自动生成代码的方式。

所以我有一个项目,其中所有Web方法都名为SimplyLaborServer,以及一个项目,其中包含名为SimplyLaborClient的Web服务客户端。

在Netbeans中,在“Generated Sources(jax-ws)”节点中的SimplyLaborClient项目下,他们有一个SimplyLaborServer.java文件,该文件具有扩展Service的类。它有一个私有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是一个使用正确的URL定义endpointUrl的Properties对象。

simplylaborclient.SimplyLaborServer service = new simplylaborclient.SimplyLaborServer(new URL(props.getProperty("endpointUrl")));

我唯一担心的是,当您从“Web服务引用”节点拖放它们时,这些方法会自动生成。如果我在服务器端进行其他更改,我不希望它们被覆盖。

所以如果这是正确的做法,我仍然愿意接受反馈。

由于

答案 1 :(得分:2)

之前已经回答过: How to change webservice url endpoint?

NetBeans使用普通的JAX-WS生成客户端代码,因此上面的答案对您有用。您只需添加一些代码即可从属性文件中获取端点URL。

答案 2 :(得分:1)

您正在使用本地(http://localhost:8080/axis2/services)WSDL来创建所需的Web服务类。

完成开发后,您可以在Web或本地网络中的任何位置托管您的Web服务应用程序。

完成Web服务的开发后,您可以在本地部署它并使用该服务来创建客户端所需的类。创建客户端时,您只需创建一个URL对象并传递您的Web服务URL(托管一个),如下所示。

PropertyResourceBundle resoureceBundle = (PropertyResourceBundle) PropertyResourceBundle.getBundle(‘Property file name and path’);
URL serviceURL = resoureceBundle. getString("Hosted_URL_Name");
ServiceClass service = new ServiceClass(serviceURL);
ServicePort servicePort = new ServicePort(service);
servicePort.getItems();

Netbeans IDE将在您自动创建Web服务客户端时创建许多类。

在上面的示例代码中,ServiceClass是您最初使用本地URL创建的Web服务主类。名称和构造函数参数将随Web服务而变化,但您必须将Web服务URL(新托管的URL)作为字符串传递。

然后使用服务类,您可以创建一个端口对象并访问所需的所有可用Web方法。