从JAX-WS生成的代码访问Web服务时如何指定主机和端口?

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

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

谢谢!

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

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

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

您应该能够在类中的静态字段中找到WSDL_LOCATION的def。

在生成的代码中(例如:说“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; } */ 

一旦你评论这个你还需要注释掉默认的construtor,不用说初始化静态WSDL_LOCATION = null; (为null)所以你不会有两个构造函数,如下所示。

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

调用Webservice:现在在您实例化此对象的客户端调用中将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。