Web Service__CXF__两种开发的两种方式
步骤:
1、环境搭建
2、编写服务
3、发布服务
4、客户端访问服务
=========================================================================================================
wsdl优先 方式
1、环境搭建:引入相应的jar包等
2、编写服务:编写服务接口和实现服务接口的类
-------------------------------------------------------------------------------------------
3、发布服务
还可以用其他方式发布服务,有些方式更为细腻,你可以添加一些interceptor以在开始或结束时做一些处理
--------------------------------------------------------------------------------------------------
4、客户端访问服务
先把服务端的接口类打成jar包(此测试中,jar包只需包含WeatherForecast接口就行),然后在客户端的ClassPath引入该jar包
--------------------------------------------------------------------------------------------------
测试运行输出结果 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、编写调用服务的客户端代码。如下:
---------------------------------------------------------------------------------------------------------
输出结果:
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优先(也有叫契约优先)的区别?在应用上面有什么不同?各的优缺点?
如:当服务端接口有改变时,我们就必须得重新生成新的客户端存根类
步骤:
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;
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;
- }
- }
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);
- }
- }
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());
- }
- }
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"));
- }
- }
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优先(也有叫契约优先)的区别?在应用上面有什么不同?各的优缺点?
如:当服务端接口有改变时,我们就必须得重新生成新的客户端存根类