Web Service__CXF__两种开发的两种方式
2011-12-30 16:00
225 查看
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优先(也有叫契约优先)的区别?在应用上面有什么不同?各的优缺点?
如:当服务端接口有改变时,我们就必须得重新生成新的客户端存根类。
@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优先(也有叫契约优先)的区别?在应用上面有什么不同?各的优缺点?
如:当服务端接口有改变时,我们就必须得重新生成新的客户端存根类。
相关文章推荐
- Web Service__CXF__两种开发的两种方式
- 用cxf生成的方式,开发web service应用
- 用cxf生成的方式,开发web service应用
- CXF 和Spring 集成开发两种发布方式
- CXF Webservice两种方式--soap+restful
- Android开发之两种方式实现连续点击两次返回键退出程序
- Android开发之使用sqlite3工具操作数据库的两种方式
- 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系
- 详解Go开发Struct转换成map两种方式比较
- Comparison--开发WebService两种开源工具CXF和Axis2的比较
- Golang开发环境搭建(Notepad++、LiteIDE两种方式以及martini框架使用)
- Web Service笔记(四):利用CXF结合Spring开发web service
- SpringBoot + CXF 开发Web Service 服务
- cxf构建webservice的两种方式
- 在.net 2.0环境下开发的web service ,支持http get方式的调用
- Android开发,获取手机IP地址的两种方式
- OpenCV4Android开发环境搭建两种方式加上图像二值化
- Web Service 那点事儿(2)—— 使用 CXF 开发 SOAP 服务
- hadoop上C++开发两种方式的例子
- php访问web service两种方式,亲测可用