2

我有一个用于 Web 服务的 WSDL 文件。我正在使用 JAX-WS/wsimport 生成 Web 服务的客户端接口。我不提前知道 Web 服务将在哪个主机上运行,​​我几乎可以保证它不会是http://localhost:8080。如何在运行时指定主机 URL,例如从命令行参数?

生成的构造函数MyService(URL wsdlLocation, QName serviceName)似乎不是我想要的,但也许是?也许是的变体之一Service.getPort(...)

谢谢!

4

3 回答 3

1

构造函数应该可以满足您的需要,当您创建 MyService 时,将您想要的 WSDL 的 url 传递给它,即http://someurl:someport/service?wsdl

于 2009-03-16T07:12:02.670 回答
1

如果您在生成的构造函数附近查看生成的源代码,您应该能够从默认构造函数中找出要放入其中的内容,应该类似于:

public OrdersService() {
    super(WSDL_LOCATION, new QName("http://namespace.org/order/v1", "OrdersService"));
}

您应该能够在类中更靠前的静态字段中找到 WSDL_LOCATION 的定义。

于 2010-08-19T09:50:49.443 回答
1

在您生成的代码中(例如:说“HelloWorldWebServiceImplService”)查看顶部的静态块,该块将引用 META-INF 下的 WSDL url 或 wsdl 文件。

 /*
static {
    URL url = null;
    try {
        url = new URL("http://loclahost/HelloWorld/HelloWorldWebServiceImpl?wsdl");
    } catch (MalformedURLException e) {
        java.util.logging.Logger.getLogger(HelloWorldWebServiceImplService.class.getName())
            .log(java.util.logging.Level.INFO, 
                 "Can not initialize the default wsdl from {0}", "http://loclahost/HelloWorld/HelloWorldWebServiceImpl?wsdl");
    }
    WSDL_LOCATION = url;
}
*/

一旦您对此发表评论,您还需要注释掉默认构造函数,并且不用说初始化静态 WSDL_LOCATION = null; (为空)所以你不会有两个构造函数,如下所示。

public final static URL WSDL_LOCATION = null;
public HelloWorldWebServiceImplService(URL wsdlLocation) {
    super(wsdlLocation, SERVICE);
}

public HelloWorldWebServiceImplService(URL wsdlLocation, QName serviceName) {
    super(wsdlLocation, serviceName);
}

调用 Web 服务:现在在实例化此对象的客户端调用中,将 Web 服务 URL 作为参数传递,如图所示

   //You can read mywebserviceURL from property file as String.
    String mywebserviceURL = "http://myqamachine.com/HelloWorld/HelloWorldWebServiceImpl?wsdl"
    URL WsURL = new URL(mywebserviceURL);
    HelloWorldWebServiceImplService webService = new HelloWorldWebServiceImplService(WsURL);

所以在这里你可以动态地指向 webservice url。

于 2014-01-28T22:19:01.300 回答