模拟三方webservice地址
第一步:定义接口
@javax.jws.WebService(name = "webService",// 定义Port名称
targetNamespace = "http://v/webs"// 定义命名空间,默认为倒置的包名
,serviceName ="myWebService"//修改WebService服务名称
)
public interface WebServiceInter { // 提供一个对外公开的服务
@WebMethod(operationName ="getNameById")
// 修改方法名
String getName(@WebParam(name="userId")String userId);
@WebMethod(operationName ="getUserInfo")
// 修改方法名
String userInfo(@WebParam(name = "userInfo") String userInfo);
}
第二步:定义实现类
@javax.jws.WebService(endpointInterface = "com.speed.test.WebServiceInter"
,name = "webServiceV"// 定义Port名称
,targetNamespace = "http://v/webs" // 定义命名空间,默认为倒置的包名
,serviceName ="myWebServiceV"// 修改WebService服务名称
//服务实现类和接口的注解要一样全
)
public class WebServiceInterimpl implements WebServiceInter {
@WebMethod(operationName = "getNameById")// 修改方法名
@Override
public String getName(String userId) {
if ("admin".equals(userId)) {
return "success";
}
return "error";
}
@WebMethod(operationName = "getUserInfo")// 修改方法名
@Override
public String userInfo( @WebParam(name = "userInfo")
String userInfo) {
if ("www".equals(userInfo)) {
return "my name is "+userInfo;
}
return "not this name";
}
}
1.serviceName是调用的工厂
2.targetNamespace 是cmd创建的包的名字
3.name 是这个webservice的名字
第三步:启动类:(每次更改需要重新启动)
public static void main(String[] args) {
//指定服务url
String url = "http://localhost:8889/web?wsdl";
//指定服务实现类
WebServiceInter server = new WebServiceInterimpl();
//采用命令行发布者Endpoint发布服务
Endpoint.publish(url, server);
}
第四步:找到所需要放代码文件的目录
执行:打开命令行窗口,切换到项目的src目录,执行"wsimport -keep http://localhost:8889/web?wsdl"生成客户端代码,如下图所示
所指定的目录下自动生成代码
调用webservice
第五步:调用webservice方法
public static void main(String[] args) {
//调用serviceName生成的属性名称方法
MyWebServiceV factory1 = new MyWebServiceV();
WebService webServicePort = factory1.getWebServiceVPort();
String userInfo = webServicePort.getUserInfo("www");
System.out.println(userInfo);
}
1.需先调用之前定义的serviceNama里面的属性名称方法获取工厂
2.根据工厂获取方法Port方法
3.调用自己定义的方法
参考:java调用第三方的webservice应用实例 - Mr_伍先生 - 博客园