Webservice手机号查询接口的调用
如何使用wsdl2命令生成客户端代码
wsdl2java -p com.itmck.api.phone -d .http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
注意使用以上命令需要配置环境变量
两种方式调用均可以.其中cxf整合spring boot相关依赖如下:
第一种使用cxf来调用,需要引入cxf相关依赖
<!--spring boot整合CXF发布webService服务 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
</dependency>
代码如下
@RestController
public class WsActionController {
// wsdl说明书地址
private static final String WSDL_ADDRESS = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
/**
* 方式一;需要引入cxf相关依赖
* @param str
* @return
*/
@RequestMapping(value = "ws/{str}")
public String xmlToObjs2(@PathVariable("str") String str) {
// 1:创建代理工厂
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
// 2:设置代理地址
jaxWsProxyFactoryBean.setAddress(WSDL_ADDRESS);
// 3:创建一个接口代理实现
MobileCodeWSSoap create = jaxWsProxyFactoryBean.create(MobileCodeWSSoap.class);
// 4:调用方法获取相关信息
String mobileCodeInfo = create.getMobileCodeInfo(str, null);
return mobileCodeInfo;
}
/**
*
* 方式二:直接调用不需要引入cxf相关依赖
* @param str
* @return
*/
@RequestMapping(value = "gs/{str}")
public String getPinfo(@PathVariable("str") String str) {
// 1:创建服务视图
MobileCodeWS mobileCodeWS = new MobileCodeWS();
// 2:获取服务实现类
MobileCodeWSSoap port = mobileCodeWS.getPort(MobileCodeWSSoap.class);
// 3:通过查询方法获取信息
String mobileCodeInfo = port.getMobileCodeInfo(str, null);
return mobileCodeInfo;
}
}
测试如下:
关于调用天气接口如下
同样使用以上命令生成时会报错:
这时候需要将wsdl说明书保存到本地中,然后打开xml,删除s:schama节点.再次生成即可
此时再使用上述其中一种调用方法即可,代码如下:在这里,我使用其中一种
@RequestMapping("gw/{address}")
public Object getWeather(@PathVariable("address") String address) {
// 创建服务视图,视图是从service标签的name属性获取
WeatherWS weatherWS = new WeatherWS();
// 根据 服务视图 获取 服务实现类,实现类从portType的name属性获取
WeatherWSSoap port = weatherWS.getPort(WeatherWSSoap.class);
// 获取查询方法,从portType的operation标签获取
ArrayOfString weather = port.getWeather(address, null);// 返回所有数据
// 获取list集合遍历可以获取相应的内容
// List<String> string = weather.getString();// 特定数据
// String string2 = string.get(4);
return weather;
}
注意:
说到这里,讲述一下,会出现的几种坑
1:我们在本地生成客户端代码后,不能删除我们本地保存的wsdl使用说明书,否则报错找不到root
这是因为代码:
此时我们应该将上面标记的两处内容 修改成服务器端wsdl说明书的路径
2:只有修改成上面的样子才能删除本地wsdl说明书,不报错.
3:使用 cxf对应的调用方式可能报错.比较步骤1修改即可
3:上述调用要连接网络,有些人说报错,什么的,可能是因为你电脑没连接网络.
测试如下: