标签:tar arraylist bpa min 代码 opera 技术 细节 sse
webservice即web服务,是一种跨平台远程调用技术,基于http的soap协议进行传输数据。
wsdl即网络服务描述语言,是webservice使用说明书,描述了service(服务视图)、binding、porttype、message、type(消息传输的数据类型。)
<service> 整个webservice的服务视图,它包括了所有的服务端点
<binding> 为每个端口定义消息格式和协议细节
<portType> 描述 web service可被执行的操作,以及相关的消息,通过binding指向portType
<message> 定义一个操作(方法)的数据参数(可有多个参数)
<types> 定义 web service 使用的全部数据类型
从下往上读
先找到服务视图,通过binging找到protType,找到了protType就找到了我们要调用的webservice方法。
wsimport是jdk自带的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即简单对象访问协议,基于http传输xml数据。
WebService的注解都位于javax.jws包下:
@WebService-定义服务,在public class上边
targetNamespace:指定命名空间
name:portType的名称
portName:port的名称
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-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>
标签:tar arraylist bpa min 代码 opera 技术 细节 sse
原文地址:http://www.cnblogs.com/lm970585581/p/7710878.html