我通过使用wsimport从服务的WSDL创建客户机存根来生成SOAP客户机。
我是这样开始我的客户端口的。
URL urlwsdl = new URL ("http://myservice?wsdl");
MyService port = new MyService_Service (urlwsdl).getTimeSeriesServicePort ();
port.foo ();一切都很好。
但是我对对象端口的构造函数很好奇。
为什么我需要给它WSDL呢?存根是在此基础上生成的。为什么有必要这么做?
我没有尝试将另一个WSDL放入用于生成它的构造函数中。
发布于 2018-08-09 05:54:52
没有必要在代码行下面编写代码。
URL urlwsdl = new URL ("http://myservice?wsdl");
你可以避免,它也应该工作的很好。
下面的代码行通常是必需的,比如已经从测试系统或开发系统(其中URL可能是http://myservice.test/yourservice?wsdl )接收到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");
希望它能回答你的问题,如果不让我知道,我可以再试着回答。
https://stackoverflow.com/questions/51754819
复制相似问题