webservice使用

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值