如何访问来自JAX-WS生成代码的Web服务时,我指定的主机和端口?
-
19-08-2019 - |
题
我有一个web服务的WSDL文件。我使用的JAX-WS /的wsimport生成客户端界面的Web服务。我不知道提前web服务将在主机上的,我几乎可以保证它不会被 HTTP ://本地主机:8080 。如何我在运行时指定的主机URL,例如从命令行参数?
在生成的构造MyService(URL wsdlLocation, QName serviceName)
似乎并不像我想要什么,但也许它是什么?也许Service.getPort(...)
的变体之一?
谢谢!
解决方案
在构造函数应该能正常运行您的需要,当你创建的MyService,通过它你想即的 HTTP:// someurl:?someport /服务WSDL
其他提示
如果您在靠近生成的构造函数生成的源一看,你应该能够找出它要放什么东西从默认的构造函数,应该是这个样子:
public OrdersService() {
super(WSDL_LOCATION, new QName("http://namespace.org/order/v1", "OrdersService"));
}
您应该能够找到在静态字段WSDL_LOCATION的Def进一步在类的。
在生成的代码(例如:说“HelloWorldWebServiceImplService”)。在看到顶部的静块,这将具有参照WSDL URL或WSDL文件是下META-INF
/*
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不用说intialize静态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);
}
<强>调用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);
所以在这里,你可以动态地指向Web服务的URL。
不隶属于 StackOverflow