1.一个简单的webservice 程序
服务器端
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class WeatherInterfaceImpl implements WeatherInterface {
@Override
public String searchWeather() {
// TODO Auto-generated method stub
return "qing";
}
public static void main(String args[]) {
Endpoint.publish("http://127.0.0.1:12345/www", new WeatherInterfaceImpl());
}
}
public interface WeatherInterface {
public String searchWeather();
}
客户端
public class Client {
public static void main(String[] args) throws IOException {
// WeatherInterfaceImplService service = new WeatherInterfaceImplService();
// WeatherInterfaceImpl impl =service.getWeatherInterfaceImplPort();
URL url = new URL("http://127.0.0.1:54321/www?wsdl");
QName qname = new QName("http://socketserver/","WeatherInterfaceImplService");
Service service = Service.create(url,qname);
WeatherInterfaceImpl weatherInterfaceImpl = service.getPort(WeatherInterfaceImpl.class);
String str = weatherInterfaceImpl.searchWeather();
System.out.println(str+"over");
}
}
1)服务端首先要编写接口,SEI(service endpoint interface),
SEI在webservice中也成为port,接口类型称为portType。
2)服务器端需要编写实现类,实现类要加上@webservice注解,
如果是soap1.2的话还要加上注解@BindingType(value=SOAPBinding.SOAP12HTTP_BINDING)
3)使用Endpoint发布服务
4)客户端调用服务端需根据wsdl生成调用类
可以使用jdk自带的wsimport生成客户端调用代码
E:\MYOSCGIT\v1\v1-maneger\src\>wsimport -s . http://127.0.0.1:12345/www?wsdl
-d<目录> - 将生成.class文件。默认参数。
-s<目录> - 将生成.java文件。
-p<生成的新包名> -将生成的类,放于指定的包下。
5)客户端调用
a.创建服务试图 b.通过视图找到服务端点 c.调用webservice服务方法
2.webservice的三要素
1)SOAP SOAP即简单对象访问协议(Simple Object Access Protocal) 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息,简单理解为soap=http+xml。
Soap协议版本主要使用soap1.1、soap1.2
2)wsdl 通俗理解Wsdl是webservice的使用说明书。
3)UDDI 是一种目录服务。
3.优点:
1)采用xml支持跨平台远程调用。
2)基于http的soap协议,可跨越防火墙。
3)支持面向对象开发。
4)有利于软件和数据重用,实现松耦合。
缺点:
1)由于soap是基于xml传输,本身使用xml传输会传输一些无关的东西从而效率不高,随着soap协议的完善,soap协议增加了许多内容,这样就导致了使用soap协议去完成简单的数据传输的效率更加不高。
2)webservice作为web跨平台访问的标准技术,很多公司都限定要求使用webservice,其实对于简单的接口如果直接用http传输自定义数据内容比webservice开发更快捷,例如第三方支付公司的支持接口。
4.soap1.1与1.2在使用上的差别
1)两种协议请求的方式也不一样。
1.1为content-Type:text/xm;charset=UTF-8
1.2为content-Type:application/soap+xml;charset=UTF-8
2)两者的命名空间不同。
Soap1.1的命名空间:
xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/ “
Soap1.2 命名空间:
xmlns:soap="http://www.w3.org/2003/05/soap-envelope“
5.wsdl说明书结构
<service> 整个webservice的服务视图,包括了所有的服务端点
<binding> 为每个端口定义消息格式和协议细节
<portType> 描述webservice可被执行的操作,以及相关的信息,通过bingding指向portType
<message>定义一个操作的数据参数
<types>定义webservice使用的全部数据类型。
6.soap消息基本结构
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:searchWeatherResponse xmlns:ns2="http://socketserver/">
<return>返回内容</return>
</ns2:searchWeatherResponse>
<S:Fault>可省</S:Fault>
</S:Body>
</S:Envelope>
1)Envelope和body是必须的结构 Header和Fault可省。
7.获取公网天气样例
//http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
//根据wsdl生成客户端代码
public static void main(String[] args) throws IOException, ServiceException {
WeatherWebService service = new WeatherWebServiceLocator();
WeatherWebServiceSoap WeatherWebServiceSoap = service.getWeatherWebServiceSoap();
String[] res = WeatherWebServiceSoap.getWeatherbyCityName("北京");
System.out.println(Arrays.toString(res));
}
---------------------------------------------------------
20多个常用的免费WebService接口
http://blog.csdn.net/SunMoonJP/article/details/62423282