700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 开发基于CXF的 RESTful WebService web 项目 webservice发布

开发基于CXF的 RESTful WebService web 项目 webservice发布

时间:2024-07-17 10:06:18

相关推荐

开发基于CXF的 RESTful WebService  web 项目 webservice发布

配置步骤

开发基于CXF的 RESTful WebService1.创建Web项目并导入CXF的jar2.在Web.xml中配置 CXFServlet<servlet><servlet-name>cxf</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class></servlet><servlet-mapping><servlet-name>cxf</servlet-name><url-pattern>/ws/*</url-pattern></servlet-mapping>3.创建实体类 Person@XmlRootElement(name = "person")public class Person implements Serializable {private String id;private String name;private String description;@XmlElement(name = "id")public String getId() {return id;}public void setId(String id) {this.id = id;}@XmlElement(name = "name")public String getName() {return name;}public void setName(String name) {this.name = name;}@XmlElement(name = "description")public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}}4.定义 PersonService 接口//@Produces( { MediaType.APPLICATION_XML })@Produces( { MediaType.APPLICATION_JSON }) public interface PersonService extends Serializable {@GET@Path("/persons")public List<Person> getPersons();@GET@Path("/persons/{id}")public Person getPerson(@PathParam("id") String id);}5.提供实现类 PersonServiceImplpublic class PersonServiceImpl implements PersonService {private static final long serialVersionUID = 1L;private static Map<String, Person> ps = new HashMap<String, Person>();static {Person info = new Person();p1.setId("1");p1.setName("zhangsan");p1.setDescription("hello");Person p1 = new Person();p2.setId("2");p2.setName("lisi");p2.setDescription("lisi hehe");ps.put(p1.getId(), p1);ps.put(p2.getId(), p2);}@Overridepublic Person getPerson(String id) {return ps.get(id);}@Overridepublic List<Person> getPersons() {return new ArrayList(ps.values());}}6.提供CXF 的配置文件 cxf-servlet.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:jaxrs="/jaxrs"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd/jaxrs /schemas/jaxrs.xsd"><import resource="classpath:META-INF/cxf/cxf.xml" /><import resource="classpath:META-INF/cxf/cxf-servlet.xml" /><bean id="personService" class="cn.itcast.cxf.PersonServiceImpl" /><jaxrs:server id="RestService" address="/v1"><jaxrs:serviceBeans><ref bean="personService" /></jaxrs:serviceBeans><jaxrs:inInterceptors><bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean></jaxrs:inInterceptors><jaxrs:outInterceptors><bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean></jaxrs:outInterceptors></jaxrs:server></beans>7.访问CXFServlet:http://localhost/CXF_01/ws8.通过 URLConnection 访问WebService服务:URLConnection conn = new URL("http://localhost/CXF_01/ws/v1/persons").openConnection();HttpURLConnection con = (HttpURLConnection) conn;con.setRequestMethod("GET");int code = con.getResponseCode();System.out.println(code);InputStream is = con.getInputStream();int len = 0;byte[] b = new byte[1024];StringBuffer sb = new StringBuffer();while((len = is.read(b)) != -1){String s = new String(b,0,len,"UTF-8");sb.append(s);}System.out.println(sb.toString());con.disconnect();

示例配置了

/EditPosts.aspx?postid=3806298 之后

配置RESTful services服务,注意 概念和 soap wsdl完全不一样的

但也是开服务 webservice

Person.java

1 package cn.itcast.domain; 2 3 import java.io.Serializable; 4 5 import javax.xml.bind.annotation.XmlElement; 6 import javax.xml.bind.annotation.XmlRootElement;

//通过注解,在网上序列号成xml或者json方式 7 @XmlRootElement(name = "Person") 8 public class Person implements Serializable { 9private String id;10private String name;11private String desc;12@XmlElement(name="id")13public String getId() {14 return id;15}16public void setId(String id) {17 this.id = id;18}19@XmlElement(name="name")20public String getName() {21 return name;22}23public void setName(String name) {24 this.name = name;25}26@XmlElement(name="desc")27public String getDesc() {28 return desc;29}30public void setDesc(String desc) {31 this.desc = desc;32}33@Override34public String toString() {35 return "Person [desc=" + desc + ", id=" + id + ", name=" + name + "]";36}373839 }

IPersonService.java

1 package cn.itcast.restful; 2 3 import java.io.Serializable; 4 import java.util.List; 5 6 import javax.ws.rs.GET; 7 import javax.ws.rs.Path; 8 import javax.ws.rs.PathParam; 9 import javax.ws.rs.Produces;10 import javax.ws.rs.core.MediaType;11 12 import cn.itcast.domain.Person;13 //@Produces( { MediaType.APPLICATION_XML }) xml格式,以下是json格式 传14 @Produces( { MediaType.APPLICATION_JSON })15 public interface IPersonService extends Serializable {1617@GET18@Path(value="/persons/{id}")19public Person findPersonById(20 @PathParam("id")21 String id);2223@GET24@Path(value="/persons")25public List<Person> findAllPerson();26 }

PersonServiceImpl.java

1 package cn.itcast.restful; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import cn.itcast.domain.Person; 9 10 public class PersonServiceImpl implements IPersonService {11private static Map<String, Person> ps = new HashMap<String, Person>();12static {13 for(int i=0;i<5;i++){14 Person p = new Person();15 p.setId("id" + i);16 p.setName("person" + i);17 p.setDesc("desc" + i);18 ps.put(p.getId(), p);19 }20}21@Override22public List<Person> findAllPerson() {23 24 return new ArrayList<Person>(ps.values());25}26 27@Override28public Person findPersonById(String id) {29 return ps.get(id);30}31 32 }

多加入了 60-71 配置restful方式的webservice

cxf-servlet.xml

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="/schema/beans" 3xmlns:xsi="/2001/XMLSchema-instance" xmlns:jaxws="/jaxws" 4xmlns:soap="/bindings/soap" xmlns:jaxrs="/jaxrs" 5xsi:schemaLocation="/schema/beans 6/schema/beans/spring-beans.xsd 7/bindings/soap 8/schemas/configuration/soap.xsd 9/jaxws 10/schemas/jaxws.xsd11/jaxrs 12/schemas/jaxrs.xsd13">14<!-- 引入CXF Bean定义如下,早期的版本中使用 -->15<import resource="classpath:META-INF/cxf/cxf.xml" />16<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />17<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />18 19<!-- 通过spring配置文件发布CXF的服务 -->20 21<!-- 第一种发布方式:没有接口的发布(简单发布) -->22<!-- 23 id:唯一标识24 address:访问url25 implementor:提供服务的类型 26-->27<jaxws:endpoint id="helloService" address="/hello"28 implementor="cn.itcast.cxf.HelloService">29 <!-- 加入消息拦截器 -->30 <jaxws:inInterceptors>31 <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>32 </jaxws:inInterceptors>33 <jaxws:outInterceptors>34 <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>35 </jaxws:outInterceptors>36</jaxws:endpoint>37 38<!-- 第二种发布方式:带有接口的发布 -->39<!-- 40 id:唯一标识41 address:访问url42 serviceClass:接口类型43-->44<jaxws:server id="hiService" address="/hi"45 serviceClass="cn.itcast.cxf.IHiService">46 <jaxws:serviceBean>47 <!-- 提供服务的实现类 -->48 <bean class="cn.itcast.cxf.HiServiceImpl"></bean>49 </jaxws:serviceBean>50 51 <!-- 加入消息拦截器 -->52 <jaxws:inInterceptors>53 <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>54 </jaxws:inInterceptors>55 <jaxws:outInterceptors>56 <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>57 </jaxws:outInterceptors>58</jaxws:server>59 60<!-- 配置restful方式的web服务 -->61<bean id="ps" class="cn.itcast.restful.PersonServiceImpl"></bean>62<jaxrs:server id="personService" address="/p">63 <jaxrs:serviceBeans>64 <ref bean="ps"/>65 </jaxrs:serviceBeans>66 <jaxrs:inInterceptors>67 <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>68 </jaxrs:inInterceptors>69 <jaxrs:outInterceptors>70 <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>71 </jaxrs:outInterceptors>72</jaxrs:server>73 </beans>

web.xml

1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3xmlns="/xml/ns/javaee" 4xmlns:xsi="/2001/XMLSchema-instance" 5xsi:schemaLocation="/xml/ns/javaee 6/xml/ns/javaee/web-app_2_5.xsd"> 78<!-- 通过上下文参数指定spring配置文件的位置 --> 9<context-param>10 <param-name>contextConfigLocation</param-name>11 <param-value>classpath:cxf-servlet.xml</param-value>12</context-param>13<listener>14 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>15</listener>1617<!-- 配置CXF框架的核心Servlet -->18<servlet>19 <servlet-name>cxf</servlet-name>20 <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>21 <!-- 通过初始化参数指定配置文件的位置 -->22 <!-- 23 <init-param>24 <param-name>config-location</param-name>25 <param-value>classpath:cxf-servlet.xml</param-value>26 </init-param>27-->28</servlet>29 30<servlet-mapping>31 <servlet-name>cxf</servlet-name>32 <url-pattern>/cxf/*</url-pattern>33</servlet-mapping>3435 <welcome-file-list>36<welcome-file>index.jsp</welcome-file>37 </welcome-file-list>38 </web-app>

发布了之后 ,cxf在上面web.xml中 被过滤处理

通过localhost:8080/项目/cxf +/persons(接口中的path路径) 访问到 服务器

通过 接口中 path的路径 直接访问提供服务的方法

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。