一般的工作原理
WebService就是一个应用程序,它提供一种通过web方式访问的api。
解决两个系统或者(应用程序)之间的远程调用…
WebService最基本的组成部分就是客户端,服务端.
参考文档:
https://www.meiwen.com.cn/subject/knfjlftx.html
https://blog.csdn.net/btt2013/article/details/50727846(这个更加详细)
- 编写服务端
`1.1先编写接口``
package service;
public interface WeatherInterface {
public String queryWeather(String cityName);
}
1.2接口实现类
package service;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.Action;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
@WebService
public class WeatherInterfaceImpl implements WeatherInterface {
public String queryWeather(String cityName) {
System.out.println("服务端:"+cityName);
String weather = "晴";
return weather;
}
}
1.3服务启动类
package service;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
public class WeatherService {
public static void main(String[] args) {
Endpoint.publish("http://localhost:8899/esb/server", new WeatherInterfaceImpl());
System.out.println("web service success");
}
}
2、运行服务启动类,检查wsdl文件
在游览器中输入http://localhost:8899/esb/server?wsdl服务启动正常后开始编写客户端,客户端要为他单独放在一个包里边,不然用jaw自动生成客户端代码时会与服务端的接口实现类有一个重名,然后会覆盖掉它,引起错误
wsimport -s . +服务说明书(wsdl)的地址,生成本地的class文件与java文件
例如:wsimport -s . http://localhost:8899/esb/server?wsdl
在cmd中,你可以先cd至你想要的目录下使用这个命令,然后就会在这个目录下生成一个service的目录。里面有class和Java文件,你把他拷贝至你的客户端包目录下就好
编写客户端
package client.service;
import client.service.WeatherInterfaceImpl;
import client.service.WeatherInterfaceImplService;
public class WeatherClient {
public static void main(String[] args) {
//创建服务视图
WeatherInterfaceImplService weatherInterfaceImplService = new WeatherInterfaceImplService();
//获取服务实现类
WeatherInterfaceImpl weatherInterfaceImpl = weatherInterfaceImplService.getPort(WeatherInterfaceImpl.class);
//调用查询方法
String weather = weatherInterfaceImpl.queryWeather("上海");
System.out.println(weather);
}
}
`
出现的问题;
运行客户端的时候出现了Two classes have the same XML type name
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200527110253122.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjk4NzEzMQ==,size_16,color_FFFFFF,t_70)
找到报错图片里面的那两个类,在类上的注解加上namespace = "http://namespace.thats.not.the.same.as.the.generated",如下所示:
第一个类:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200527110420301.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjk4NzEzMQ==,size_16,color_FFFFFF,t_70)
第二个类:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020052711043465.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjk4NzEzMQ==,size_16,color_FFFFFF,t_70)