博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web Service__CXF__两种开发的两种方式
阅读量:4138 次
发布时间:2019-05-25

本文共 6170 字,大约阅读时间需要 20 分钟。

Web Service__CXF__两种开发的两种方式 步骤: 1、环境搭建 2、编写服务 3、发布服务 4、客户端访问服务 =========================================================================================================wsdl优先 方式 1、环境搭建:引入相应的jar包等 2、编写服务:编写服务接口和实现服务接口的类 package com.yaha.ws; import javax.jws.WebService; @WebService public interface WeatherForecast { public String getWeatherTomorrow(String city); public int gettTemperature(String city); public boolean hasTomorrowWeather(); } ------------------------------------------------------------------------------------------- package com.yaha.ws.impl; import javax.jws.WebParam; import javax.jws.WebService; import com.yaha.ws.WeatherForecast; @WebService(endpointInterface="com.yaha.ws.WeatherForecast" , name="WeatherForecast") public class WeatherForecastImpl implements WeatherForecast { public String getWeatherTomorrow(@WebParam(name="city") String city) { if("beijing".equalsIgnoreCase(city)) { return "snow"; }else if("shanghai".equalsIgnoreCase(city)) { return "sun"; }else if("nanchang".equalsIgnoreCase(city)) { return "wind soft and sun beautiful"; }else if("chongqing".equalsIgnoreCase(city)) { return "wind soft and sun beautiful too"; } return "sorry, no message for the city:" + city; } public int gettTemperature(String city) { if("beijing".equalsIgnoreCase(city)) { return -3; }else if("shanghai".equalsIgnoreCase(city)) { return 17; }else if("nanchang".equalsIgnoreCase(city)) { return 15; }else if("chongqing".equalsIgnoreCase(city)) { return 15; } return -227; } public boolean hasTomorrowWeather() { return true; } } -------------------------------------------------------------------------------------------------- 3、发布服务 还可以用其他方式发布服务,有些方式更为细腻,你可以添加一些interceptor以在开始或结束时做一些处理 package com.yaha.ws.service; import javax.xml.ws.Endpoint; import com.yaha.ws.WeatherForecast; import com.yaha.ws.impl.WeatherForecastImpl; public class WSDeploy { /** * @param args */ public static void main(String[] args) { System.out.println("service start....."); WeatherForecast weatherForecast = new WeatherForecastImpl(); String address = "http://localhost:9000/WeatherForecast"; Endpoint.publish(address, weatherForecast); } } -------------------------------------------------------------------------------------------------- 4、客户端访问服务 先把服务端的接口类打成jar包(此测试中,jar包只需包含WeatherForecast接口就行),然后在客户端的ClassPath引入该jar包 package com.yaha.ws.client; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.junit.Test; import com.yaha.ws.WeatherForecast; public class Test01 { public static WeatherForecast weatherForecast; static { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(WeatherForecast.class); factory.setAddress("http://localhost:9000/WeatherForecast"); weatherForecast = (WeatherForecast)factory.create(); } @Test public void getWeatherTormorrow() { System.out.println(weatherForecast.getWeatherTomorrow("beijing")); System.out.println(weatherForecast.getWeatherTomorrow("shanghai")); System.out.println(weatherForecast.getWeatherTomorrow("nanchang")); System.out.println(weatherForecast.getWeatherTomorrow("chongqing")); System.out.println(weatherForecast.getWeatherTomorrow("huaihua")); } @Test public void getTemperatrue() { System.out.println(weatherForecast.gettTemperature("beijing")); System.out.println(weatherForecast.gettTemperature("shanghai")); System.out.println(weatherForecast.gettTemperature("nanchang")); System.out.println(weatherForecast.gettTemperature("chongqing")); System.out.println(weatherForecast.gettTemperature("huaihua")); } @Test public void hasWeatherTomorrow() { System.out.println(weatherForecast.hasTomorrowWeather()); } } -------------------------------------------------------------------------------------------------- 测试运行输出结果 output: snow sun wind soft and sun beautiful wind soft and sun beautiful too sorry, no message for the city:huaihua -3 17 15 15 -227 true ================================================================================================================代码优先方式 1、环境搭建(同wsdl优先) 2、编写服务(同wsdl优先) 3、发布服务(同wsdl优先) ---------------------------------------------------------------------------------------------------------------- 4、客户端访问服务 4.1、用cxf里面的wsdl2java工具把wsdl文件生成相应的java存根(stub)类 工具使用命令: wsdl2java -p clientstub.weatherforecast -d weatherforecast -client http://localhost:9000/WeatherForecast?wsdl 打开weatherforecast文件夹,可以看到生成的如下java文件: GettTemperature.java GettTemperatureResponse.java GetWeatherTomorrow.java GetWeatherTomorrowResponse.java HasTomorrowWeather.java HasTomorrowWeatherResponse.java ObjectFactory.java package-info.java WeatherForecast_WeatherForecastPort_Client.java WeatherForecast.java WeatherForecastImplService.java 4.2、把生存的java存根类复制到项目里面 4.3、编写调用服务的客户端代码。如下: package com.yaha.ws.client; import org.junit.Test; import clientstub.weatherforecast.WeatherForecast; import clientstub.weatherforecast.WeatherForecastImplService; public class StubTest01 { @Test public void test01() { WeatherForecast weatherForecast = new WeatherForecastImplService(). getWeatherForecastPort(); System.out.println(weatherForecast.hasTomorrowWeather()); System.out.println(weatherForecast.getWeatherTomorrow("shanghai")); System.out.println(weatherForecast.getWeatherTomorrow("beijing")); System.out.println(weatherForecast.getWeatherTomorrow("nanchang")); System.out.println(weatherForecast.getWeatherTomorrow("chongqing")); System.out.println(weatherForecast.getWeatherTomorrow("huaihua")); System.out.println(weatherForecast.gettTemperature("shanghai")); System.out.println(weatherForecast.gettTemperature("beijing")); System.out.println(weatherForecast.gettTemperature("nanchang")); System.out.println(weatherForecast.gettTemperature("chongqing")); System.out.println(weatherForecast.gettTemperature("huaihua")); } } --------------------------------------------------------------------------------------------------------- 输出结果: true sun snow wind soft and sun beautiful wind soft and sun beautiful too sorry, no message for the city:huaihua 17 -3 15 15 -227 ==============================================================================================================后话: 了解代码优先和wsdl优先(也有叫契约优先)的区别?在应用上面有什么不同?各的优缺点? 如:当服务端接口有改变时,我们就必须得重新生成新的客户端存根类。

转载地址:http://nblvi.baihongyu.com/

你可能感兴趣的文章
(转载)正确理解cookie和session机制原理
查看>>
jQuery ajax - ajax() 方法
查看>>
将有序数组转换为平衡二叉搜索树
查看>>
最长递增子序列
查看>>
从一列数中筛除尽可能少的数,使得从左往右看这些数是从小到大再从大到小...
查看>>
判断一个整数是否是回文数
查看>>
经典shell面试题整理
查看>>
腾讯的一道面试题—不用除法求数字乘积
查看>>
素数算法
查看>>
java多线程环境单例模式实现详解
查看>>
将一个数插入到有序的数列中,插入后的数列仍然有序
查看>>
在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found
查看>>
万年历
查看>>
作为码农你希望面试官当场指出你错误么?有面试官这样遭到投诉!
查看>>
好多程序员都认为写ppt是很虚的技能,可事实真的是这样么?
查看>>
如果按照代码行数发薪水会怎样?码农:我能刷到公司破产!
查看>>
程序员失误造成服务停用3小时,只得到半月辞退补偿,发帖喊冤
查看>>
码农:很多人称我“技术”,感觉这是不尊重!纠正无果后果断辞职
查看>>
php程序员看过来,这老外是在吐糟你吗?看看你中了几点!
查看>>
为什么说程序员是“培训班出来的”就是鄙视呢?
查看>>