Java JAX-WS:Soap客户端-为什么需要WSDL来初始化存根
我通过使用wsimport在服务的WSDL之外创建客户机存根,生成了一个SOAP客户机 我用这种方式启动我的客户端端口Java JAX-WS:Soap客户端-为什么需要WSDL来初始化存根,java,soap,wsdl,jax-ws,Java,Soap,Wsdl,Jax Ws,我通过使用wsimport在服务的WSDL之外创建客户机存根,生成了一个SOAP客户机 我用这种方式启动我的客户端端口 URL urlwsdl = new URL ("http://myservice?wsdl"); MyService port = new MyService_Service (urlwsdl).getTimeSeriesServicePort (); port.foo (); 一切正常 但我对对象端口的构造函数很好奇 为什么我需要给它WSDL?存根就是在这个基础上生成的。
URL urlwsdl = new URL ("http://myservice?wsdl");
MyService port = new MyService_Service (urlwsdl).getTimeSeriesServicePort ();
port.foo ();
一切正常
但我对对象端口的构造函数很好奇
为什么我需要给它WSDL?存根就是在这个基础上生成的。
为什么这是必要的
我没有尝试将另一个WSDL放入用于生成它的构造函数中。没有必要在代码行下面编写代码 URL urlwsdl=新URLhttp://myservice?wsdl; 你可以避免这种情况,它应该也能正常工作 下面的代码行通常是必需的,比如说您从测试系统或开发系统收到了wsdl,其中URL可能是http://myservice.test/yourservice?wsdl,但稍后,当您升级代码或将其发送给某个第三方时,这些第三方使用相同的服务,但URL可能不同,例如http://myservice.test/yourservice?wsdl. 这就是为什么要在导入时创建此条款。您可以从任何属性文件、数据库、yml或ObjectFactory等注入URL 您的服务代码必须如下所示:
public interface AddressBookService extends ...Service {
public String getAddressBookAddress();
public AddressBook getAddressBook() throws ...ServiceException;
public AddressBook getAddressBook(URL portAddress)
throws javax.xml.rpc.ServiceException;
}
而且,您可以使用替代代码,该代码也可以正常工作,而无需显式指定端口
MyService service = new MyService();
// Now use the service to get a stub which implements the SDI.
port.foo();
理想情况下,您不应该将URL作为URL urlwsdl=新URL传递http://myservice?wsdl;, 它应该类似于URL urlwsdl=新URLhttp://myservice;
希望它能回答你的问题,如果不让我知道,我可以再次尝试回答