您的位置:首页 > 其它

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优先(也有叫契约优先)的区别?在应用上面有什么不同?各的优缺点?
如:当服务端接口有改变时,我们就必须得重新生成新的客户端存根类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息