码迷,mamicode.com
首页 > Web开发 > 详细

WebService使用介绍

时间:2017-10-30 15:00:26      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:tar   arraylist   bpa   min   代码   opera   技术   细节   sse   

webservice是什么?

webservice即web服务,是一种跨平台远程调用技术,基于http的soap协议进行传输数据。

Webservice工作原理:(对比了Socket开发的原理)

技术分享

 

wsdl是什么?

wsdl即网络服务描述语言,是webservice使用说明书,描述了service(服务视图)、binding、porttype、message、type(消息传输的数据类型。)

wsdl 说明书结构

<service>     整个webservice的服务视图,它包括了所有的服务端点

<binding>     为每个端口定义消息格式和协议细节

<portType>  描述 web service可被执行的操作,以及相关的消息,通过binding指向portType

<message>   定义一个操作(方法)的数据参数(可有多个参数)

<types>        定义 web service 使用的全部数据类型

wsdl 说明书阅读方式

 

从下往上读

先找到服务视图,通过binging找到protType,找到了protType就找到了我们要调用的webservice方法。

Wsimport介绍

wsimportjdk自带的webservice客户端工具,可以根据wsdl文档生成客户端调用代码(java代码).当然,无论服务器端的WebService是用什么语言写的,都可以生成调用webservice的客户端代码,服务端通过客户端代码调用webservice

wsimport.exe位于JAVA_HOME\bin目录下.

常用参数为:

-d<目录>  - 将生成.class文件。默认参数。

-s<目录> - 将生成.java文件。

-p<生成的新包名> -将生成的类,放于指定的包下。

(wsdlurl) - http://server:port/service?wsdl,必须的参数。

示例:

C:/> wsimport –s . http://127.0.0.1:1234/weather?wsdl

注意:-s不能分开,-s后面有个小点

使用方法:技术分享

 

如果wsdl文件在本地,可以这样使用:Wsimport –s . file:///d:\WeatherWebService.wsdl

注意:这里可能会遇到类似这样的错误:

技术分享

我们可以把wsdl文件下载到本地,删除掉文件中所有的<s:element ref="s:schema"/>即可解决

客户端的编写方法:

第一种客户端编写方法; 全部使用的是wsimport生成的代码调用webservice。 问题:将webservice的地址固定写死在代码中了(硬编码),不利于系统维护。如果将要修改服务地址,客户端代码只能重新使用wsimport生成。不推荐使用

第二种客户端编写方法: 手动可以指定webservice 地址,使用service类来完成。  此处点!!!!!

public class WeatherClient2 {
    public static void main(String[] args) throws MalformedURLException {
        //定义url,参数为wsdl地址
        URL url = new URL("http://192.168.1.100:1234/weather?wsdl");
        //定义qname,第一个参数是命名空间,第二个参数名称是wsdl里边的服务名
        QName qName = new QName("http://impl.sei.jaxws.ws.itcast.cn/", "WeatherInterfaceImplService");
        //创建服务视图
        Service service = Service.create(url, qName);
        //通过服务视图得到服务端点
        WeatherInterfaceImpl weatherInterfaceImpl =service.getPort(WeatherInterfaceImpl.class);
        //调用webservice
        System.out.println(weatherInterfaceImpl.queryWeather("郑州"));
    }
}

soap:

soap即简单对象访问协议,基于http传输xml数据。

JAX-WS注解

WebService的注解都位于javax.jws包下:

@WebService-定义服务,在public class上边

targetNamespace:指定命名空间

nameportType的名称

portNameport的名称

serviceName:服务名称

@WebMethod-定义方法,在公开方法上边

operationName:方法名

exclude:设置为true表示此方法不是webservice方法,反之则表示webservice方法

@WebResult-定义返回值,在方法返回值前边

name:返回结果值的名称

@WebParam-定义参数,在方法参数前边

name:指定参数的名称

作用:

通过注解,可以更加形像的描述Web服务。对自动生成的wsdl文档进行修改,为使用者提供一个更加清晰的wsdl文档。

当修改了WebService注解之后,会影响客户端生成的代码。调用的方法名和参数名也发生了变化

服务端代码演示:

 

@WebService(targetNamespace="http:// webservice.itcast.cn",
serviceName="weatherService",
portName="weatherServicePort",
name="weatherServiceInterface"
)
public class WeatherInterfaceImpl implements WeatherInterface {

    @Override
    public @WebResult(name="weatherResult")List<WeatherModel> queryWeather(
@WebParam(name="cityName")String cityName) throws Exception {
        
        //构造三天的天气结果
        Calendar calendar = Calendar.getInstance();
        int day = calendar.get(Calendar.DATE);
        //第一天的天气
        WeatherModel weatherModel_1 = new WeatherModel();
        weatherModel_1.setDate(new Date());
        weatherModel_1.setDetail("晴朗");
        weatherModel_1.setTemperature_max(30);
        weatherModel_1.setTemperature_min(23);
        //第二天的天气
        WeatherModel weatherModel_2 = new WeatherModel();
        calendar.set(Calendar.DATE, day+1);
        weatherModel_2.setDate(calendar.getTime());
        weatherModel_2.setDetail("晴转多云");
        weatherModel_2.setTemperature_max(28);
        weatherModel_2.setTemperature_min(21);
        //第三天的天气
        WeatherModel weatherModel_3 = new WeatherModel();
        calendar.set(Calendar.DATE, day+2);
        weatherModel_3.setDate(calendar.getTime());
        weatherModel_3.setDetail("多云转小雨");
        weatherModel_3.setTemperature_max(25);
        weatherModel_3.setTemperature_min(18);
        
        List<WeatherModel> list = new ArrayList<WeatherModel>();
        list.add(weatherModel_1);
        list.add(weatherModel_2);
        list.add(weatherModel_3);
        //返回三天的天气    
        return list;
    }

}

 

 

 

 

使用jaxws将webservice在tomcat中发布:

第一步:下载jaxws-ri-2.2.8的扩展包

第二步:创建web工程

第三步:将jaxws-ri-2.2.8的jar包加入工程

第四步:编写服务端代码,编写方法如上服务端代码演示

如果需要生成soap1.2在@WebServer下添加:

@BindingType(value="http://www.w3.org/2003/05/soap/bindings/HTTP/")

第五步:使用wsgen生成wsdl 

使用wsimport工具生成代码是客户端调用 wsgen工具生成的代码是服务端使用

使用wsgen生成wsdl,需要提前生成wsdl,根据service接口实现类来生成wsdl.

进入工程根目录:执行如下:

wsgen -wsdl:soap1.1 -cp WebRoot\WEB-INF\classes cn.itcast.ws.jaxws.service.WeatherServiceImplSoap -r WebRoot\WEB-INF\wsdl

如果生成soap12,命令:

wsgen -wsdl:Xsoap1.2 -extension -cp WebRoot\WEB-INF\classes cn.itcast.ws.jaxws.service.WeatherServiceImplSoap12 -r WebRoot\WEB-INF\wsdl

wsdl:soap1.1 :生成soap1.1的使用说明书

-cp:指定classpath

cn.itcast.weather.server.ServerJws :service接口实现类

-r:将生成wsdl输出到哪个位置

第六步:配置sun-jaxws.xml

文件中配置你的service发布的选项:

<endpoint name=‘ServerJws‘ implementation=‘cn.itcast.weather.server.ServerJws‘
        wsdl=‘WEB-INF/wsdl/WeatherServerService.wsdl‘
        url-pattern=‘/ webservice /weather‘ />


implementation:实现类全路径,
wsdl :使用说明书,提前生成
url-pattern:/ webservice /weather这个路径就是webservice地址

soap12:
  <!-- 发布soap12 -->
     <endpoint name=‘weatherServiceSoap12‘ implementation=‘cn.itcast.ws.jaxws.service.WeatherServiceImplSoap12‘
        wsdl=‘WEB-INF/wsdl/WeatherServiceSoap12.wsdl‘
        url-pattern=‘/webservice/weathersoap12‘ />

第七步:配置web.xml

//webservice的监听
<listener>
        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>  
 <servlet>
        <servlet-name>webservice</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
        <servlet-name>webservice</servlet-name>
        <url-pattern>/webservice/*</url-pattern>
</servlet-mapping>

 

WebService使用介绍

标签:tar   arraylist   bpa   min   代码   opera   技术   细节   sse   

原文地址:http://www.cnblogs.com/lm970585581/p/7710878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!