用CXF发布Web服务
Posted 写最少的代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用CXF发布Web服务相关的知识,希望对你有一定的参考价值。
1.下载apache-cxf-2.7.6jar包,并把lib目录下的所有jar包导入项目
2.编写测试的实体类,示例如下:
1 package cn.bd.weather.entity; 2 3 import java.util.Date; 4 5 import javax.xml.bind.annotation.XmlRootElement; 6 /** 7 * 8 * @author Administrator 9 * @XmlRootElement 表示根元素 10 */ 11 @XmlRootElement(name="Weather") //name属性默认是类名 12 public class Weather { 13 private String city; 14 private Date date; 15 private int min; 16 private int max; 17 private int average; 18 private String desc; 19 20 public Weather() { 21 super(); 22 } 23 public Weather(String city, Date date, int min, int max, int average, 24 String desc) { 25 super(); 26 this.city = city; 27 this.date = date; 28 this.min = min; 29 this.max = max; 30 this.average = average; 31 this.desc = desc; 32 } 33 public String getCity() { 34 return city; 35 } 36 public void setCity(String city) { 37 this.city = city; 38 } 39 public Date getDate() { 40 return date; 41 } 42 public void setDate(Date date) { 43 this.date = date; 44 } 45 public int getMin() { 46 return min; 47 } 48 public void setMin(int min) { 49 this.min = min; 50 } 51 public int getMax() { 52 return max; 53 } 54 public void setMax(int max) { 55 this.max = max; 56 } 57 public int getAverage() { 58 return average; 59 } 60 public void setAverage(int average) { 61 this.average = average; 62 } 63 public String getDesc() { 64 return desc; 65 } 66 public void setDesc(String desc) { 67 this.desc = desc; 68 } 69 70 }
3.编写服务接口,示例如下:
1 package cn.bd.weather.service; 2 3 import java.util.Date; 4 import java.util.List; 5 import javax.jws.WebParam; 6 import javax.jws.WebResult; 7 import javax.jws.WebService; 8 9 import cn.bd.weather.entity.Weather; 10 11 @WebService(serviceName="WeatherService") //@WebService里面的targetNamespace="默认是包名" 12 public interface WeatherService { 13 @WebResult(name="out") 14 List<Weather> getWeathers(@WebParam(name="city")String city,@WebParam(name="dates")List<Date> dates); 15 //@WebParam(name="city")表示city参数的别名 16 17 }
4.编写服务接口的实现,示例如下:
1 package cn.bd.weather.service.impl; 2 3 import java.util.ArrayList; 4 import java.util.Date; 5 6 import java.util.List; 7 8 import javax.jws.WebMethod; 9 import javax.jws.WebService; 10 11 import cn.bd.weather.entity.Weather; 12 import cn.bd.weather.service.WeatherService; 13 14 @WebService //@WebService里面的targetNamespace="" 15 public class WeatherServiceImpl implements WeatherService { 16 17 @WebMethod //注解为web服务方法 18 public List<Weather> getWeathers(String city, List<Date> dates) { 19 List<Weather> list=new ArrayList<Weather>(); 20 for(Date date : dates){ 21 list.add(getWeather(city,date)); 22 } 23 return list; 24 } 25 26 @WebMethod(exclude=true) //exclude=true 表示这个web方法不对外暴露 27 public Weather getWeather(String city,Date date){ 28 return new Weather(city,date,25,27,30,"晴"); 29 } 30 31 }
5.编写spring容器,示例如下:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans
3 xmlns="http://www.springframework.org/schema/beans"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xmlns:p="http://www.springframework.org/schema/p"
6 xmlns:jaxws="http://cxf.apache.org/jaxws"
7 xsi:schemaLocation="http://www.springframework.org/schema/beans
8 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
9 http://cxf.apache.org/jaxws
10 http://cxf.apache.org/schemas/jaxws.xsd
11 http://cxf.apache.org/bindings/soap
12 http://cxf.apache.org/schemas/configuration/soap.xsd">
13 <!-- 引入CXF的文件 -->
14 <import resource="classpath:META-INF/cxf/cxf.xml"/>
15 <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
16 <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
17
18 <!-- 定义发布web服务的类 -->
19 <bean id="weatherService" class="cn.bd.weather.service.impl.WeatherServiceImpl"></bean>
20
21 <!-- 配置Endpoint 端口 -->
22 <jaxws:endpoint id="wsServiceBean" implementor="#weatherService" address="getWeather" publish="true">
23 </jaxws:endpoint>
24
25 <!--
26 如何查看web服务是否了布成功
27 要在web.xml配置CXFServlet和装载spring容器
28 1.起动tomcat,在浏览器输入localhost:8090/CXFService/getWeather
29 其中getWeather 是配置Endpoint,属性address的值
30 -->
31 </beans>
6.web.xml的配置
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app version="3.0"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
6 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
7 <display-name></display-name>
8 <welcome-file-list>
9 <welcome-file>index.jsp</welcome-file>
10 </welcome-file-list>
11
12 <context-param>
13 <param-name>contextConfigLocation</param-name>
14 <param-value>classpath:applicationContext.xml</param-value> <!-- 加载spring容器 -->
15 </context-param>
16 <listener>
17 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class><!-- 监听spring容器 -->
18 </listener>
19
20 <!-- 配置CXFServlet -->
21 <servlet>
22 <servlet-name>CXFServlet</servlet-name>
23 <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
24 </servlet>
25 <servlet-mapping>
26 <servlet-name>CXFServlet</servlet-name>
27 <url-pattern>/*</url-pattern>
28 </servlet-mapping>
29
30 </web-app>
以上是关于用CXF发布Web服务的主要内容,如果未能解决你的问题,请参考以下文章
如何防止在 CXF Web 服务客户端中生成 JAXBElement<String>?