java - JAX-WS: Soap-Client - 为什么需要 WSDL 来初始化存根
问题描述
我通过从服务的 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");
希望它能回答你的问题,如果不让我知道,我可以重新尝试回答。
推荐阅读
- reactjs - Invariant Violation when using react-redux connect with react-native
- python - 使用 lambda 创建过滤器会产生 bool 错误
- angular - 为什么我们需要在 Angular 中使用“$event”关键字进行事件绑定?(用于输出)
- php - 如何在 lumen 5.8.* 中使用 dingo 修复实现 jwt?目标 [Dingo\Api\Contract\Routing\Adapter] 不可实例化
- javascript - 如何让我的网站自动更新一些我需要在每年特定时间添加的内容?
- rest - 连接到 REST 服务的 Power BI 出现 SSL 错误
- jpa - 公共列上的多对多关系(不在主键上)
- php - 在按钮单击时将 .CSV 文件转换为 php 中的 JSON 文件(WP 插件)
- javascript - 有没有办法在我的 html 页面上执行 JavaScript/JQuery 函数一段指定的时间然后停止执行?
- npm - 如何修复 gulp-sass 中发现的漏洞。(tar 导致此问题)