浏览 5660 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (16) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-08
最后修改:2012-01-17
步骤: 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优先(也有叫契约优先)的区别?在应用上面有什么不同?各的优缺点? 如:当服务端接口有改变时,我们就必须得重新生成新的客户端存根类。 [size=large][/size] 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-01-12
请问 代码优先和wsdl优先(也有叫契约优先)这是专业术语吗?在实际项目中用哪一种?
|
|
返回顶楼 | |
发表时间:2012-01-17
whoshaofeng 写道 请问 代码优先和wsdl优先(也有叫契约优先)这是专业术语吗?在实际项目中用哪一种?
两种方法各有优缺点,具体的你可参考网上资料。 我公司项目用的是代码优先,就是用wdsl2java工具把wsdl生成相应的java类(存根),然后调用这些存根接口来对服务进行调用。 不过这样的话,当调用的远程服务接口改变时,我们就要用新的wsdl重新生存新的存根。 |
|
返回顶楼 | |
发表时间:2012-05-18
好像讲的不对吧,代码优先还是契约优先是指服务端开发而言。
|
|
返回顶楼 | |
发表时间:2012-05-22
jngxx 写道 好像讲的不对吧,代码优先还是契约优先是指服务端开发而言。
不是你说的这样子 你可以查资料验证 |
|
返回顶楼 | |
发表时间:2012-05-22
最后修改:2012-05-22
LZ的理解似乎是有偏差
wsdl优先是指手工编写wsdl文件,然后生成服务端的接口,在后去补实现 代码优先指的是手写服务端的接口及实现,然后生成wsdl,如JAX-WS的wsgen --------------- 对客户端来说就不存在什么代码优先了 肯定得先有wsdl再有客户端,无论是wsdl2java,wsimport,xjc还是手工编写客户端 |
|
返回顶楼 | |