Java 从JAX-WS生成的代码访问web服务时,如何指定主机和端口?
我有一个web服务的WSDL文件。我正在使用JAX-WS/wsimport生成web服务的客户机接口。我无法提前知道web服务将在哪个主机上运行,我几乎可以保证它不会运行。如何在运行时(例如从命令行参数)指定主机URL 生成的构造函数Java 从JAX-WS生成的代码访问web服务时,如何指定主机和端口?,java,web-services,jax-ws,Java,Web Services,Jax Ws,我有一个web服务的WSDL文件。我正在使用JAX-WS/wsimport生成web服务的客户机接口。我无法提前知道web服务将在哪个主机上运行,我几乎可以保证它不会运行。如何在运行时(例如从命令行参数)指定主机URL 生成的构造函数MyService(URL-wsdlLocation,QName-serviceName)看起来不像我想要的,但可能是?可能是Service.getPort(…)的变体之一 谢谢 构造函数应该能够满足您的需要,当您创建MyService时,将您想要的WSDL的url
MyService(URL-wsdlLocation,QName-serviceName)
看起来不像我想要的,但可能是?可能是Service.getPort(…)
的变体之一
谢谢 构造函数应该能够满足您的需要,当您创建MyService时,将您想要的WSDL的url传递给它,即..如果您查看生成的源代码,靠近生成的构造函数,您应该能够从默认构造函数中找出要放入的内容,应该类似于:
public OrdersService() {
super(WSDL_LOCATION, new QName("http://namespace.org/order/v1", "OrdersService"));
}
您应该能够在类的更上层的静态字段中找到WSDL_LOCATION的定义。在生成的代码(例如:“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);
}
调用Webservice:现在在实例化此对象的客户端调用中,将Webservice 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。Ok。只是让我明白。。。MyService将请求WSDL,然后使用标记中的任何内容来确定服务的实际位置?我认为这是正确的,我已经尝试查找它,但我找不到任何明确的答案。是的。JAX-WS将在wsdlLocation加载WSDL,然后分别为serviceName和portName指定的服务和端口解析WSDL。JAX-WS在调用Web服务时将使用WSDL端口中指定的URL。因此,您需要知道WSDL URL、服务QName和端口QName,以便使用上面列出的代码与远程服务交互。