Web Service__CXF__两种开发的两种方式

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优先(也有叫契约优先)的区别?在应用上面有什么不同?各的优缺点? 如:当服务端接口有改变时,我们就必须得重新生成新的客户端存根类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache CXF是一个开源的WebService框架,可以帮助用户快速、简便地开发和部署WebService应用程序。它提供了多种方式来调用WebService接口,下面介绍几种常用的方式: 1. 使用JAX-WS API:CXF实现了JAX-WS API,可以直接使用JAX-WS提供的API来调用WebService。示例代码如下: ```java HelloWorldService service = new HelloWorldService(); HelloWorld port = service.getHelloWorldPort(); String result = port.sayHello("CXF"); ``` 2. 使用代理方式CXF可以根据WebService WSDL文件自动生成代理类,然后通过调用代理类的方法来调用WebService接口。示例代码如下: ```java JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(HelloWorld.class); factory.setAddress("http://localhost:8080/HelloWorld"); HelloWorld client = (HelloWorld) factory.create(); String result = client.sayHello("CXF"); ``` 3. 使用Spring配置文件:CXF提供了Spring配置文件方式来实现WebService接口的调用。用户可以在Spring配置文件中配置WebService客户端,然后通过Spring容器来获取WebService客户端实例。示例代码如下: ```xml <jaxws:client id="helloClient" serviceClass="com.example.HelloWorld" address="http://localhost:8080/HelloWorld"/> ``` ```java ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); HelloWorld client = (HelloWorld) context.getBean("helloClient"); String result = client.sayHello("CXF"); ``` 以上是几种常用的调用WebService接口的方式,可以根据具体情况选择适合自己的方式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值