用idea可以非常方便的生成客户端代码。
如果你用的是jdk1.8,请在lib目录(我的是在C:\jdk\lib)新建一个jaxp.properties,里面写上一句话
javax.xml.accessExternalSchema=all
暂时别管啥意思了,反正你要是不加的话,就会报错。
在项目上右键,new - WebService - Generate Java Code from WSDL
在确保webservice服务开启的情况下(即SpringBoot项目启动),填写一个包的名称
image
Finish
image
可以看到生成了一堆文件。
image
生成的文件中,这个是调用远程接口的类,先new出来。
LoginService_Service loginService = new LoginService_Service();
然后获取可执行的实现类:
LoginService loginServiceImpl = loginService.getLoginServiceImplPort();
调用方法获取返回值
UserLoginResponse.Return user = loginServiceImpl.userLogin();
解析返回值,封装为Map
Map<String,Object> result = new HashMap<>();
List<UserLoginResponse.Return.Entry> entry = user.getEntry();
for (Iterator<UserLoginResponse.Return.Entry> iterator = entry.iterator(); iterator.hasNext(); ) {
UserLoginResponse.Return.Entry next = iterator.next();
result.put(next.getKey(),next.getValue());
}
System.out.println(result);
image
userLogin方法返回的是Map类型,这还真的是有点秀。所以,我们写的客户端代码还真的是废了好一番功夫的。
其实,真的不推荐用Map做webservice服务的返回参,真的是和自己过不去啊。
网上找了半天,看到一篇有牛逼的博客,贴出来:https://www.cnblogs.com/qlqwjy/p/9649615.html
有兴趣的自己研究下吧。