我通过从服务的WSDL中创建带有wsimport的客户端存根来生成一个SOAP客户端。
我以这种方式启动我的客户端端口。
URL urlwsdl = new URL ("http://myservice?wsdl");
MyService port = new MyService_Service (urlwsdl).getTimeSeriesServicePort ();
port.foo ();
一切正常。
但我对对象端口的构造函数很好奇。
为什么我需要给它 WSDL?存根是在此基础上生成的。 为什么有必要这样做?
我没有尝试将另一个 WSDL 放入用于生成它的构造函数中。
没有必要在代码行下面编写代码。
URL urlwsdl = new URL ("http://myservice?wsdl");
你可以避免这种情况,它也应该工作正常。
下面的代码行通常是必需的,比如说已经从测试系统或开发系统收到了wsdl,其中URL
可能是http://myservice.test/yourservice?wsdl
,但后来当你提升代码或运送到某个第三方时,它们使用相同的服务,但URL
可能不同,比如http://myservice.test/yourservice?wsdl
。这就是为什么这个条款被创建wsimport
.您可以从任何属性文件或数据库或 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 = new URL ("http://myservice?wsdl");
传递,它应该是类似URL urlwsdl = new URL ("http://myservice");
希望它能回答你的问题,如果没有让我知道,我可以重新尝试回答。