这个文章已经想写很长时间了,今天没事就写下!
关于CXF之前接触不是很多,所以不是很懂,这段时间项目需要所以就研究下
首先是理解Restful 接口也可以发布wsdl接口,以往我的印象中Rest接口,只是发布一个服务,他的接口服务方式给使用文档说明的,但是接下来发布的Rest接口就是一个wsdl形式的接口。
工程需要Spring core 、Spring AOP、CXF等相关包支持。
Demo工程目标, 做一个用户添加(POST)和查询(GET)功能。
共三个文件:
- Users.java
- beans.xml
- web.xml
-----------------源码分割线-----------------------------------
java Users类:
package com.ly.cxf.demo;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
// @WebService(targetNamespace="http://com.ly.cxf.demo")
@Path("/getInfo")
public class Users {
static List<String> users = null;
{
if (users == null) {
users=new ArrayList<String>();
users.add("yinlei");
}
}
@GET
@Produces( { MediaType.APPLICATION_XML })
// http://localhost:8080/sprcxf/api/getInfo
public String getUserInfo() {
String ret = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><users>";
for (String u : users)
{
ret = ret + "<user><name>" + u + "</name></user>";
}
ret =ret+"</users>";
return ret;
}
@POST
@Produces( { MediaType.APPLICATION_XML })
@Path("/{user}")
//http://localhost:8080/sprcxf/api/getInfo/testAnyUserName
public String postUserInfo(@PathParam("user") String user) {
users.add(user);
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?><retMsg>OK</retMsg>";
}
}
beans.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
>
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<!--jetty <import resource="classpath:META-INF/cxf/cxf-extension-http-binding.xml"/> -->
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<bean id="restSample" class="com.ly.cxf.demo.Users"/>
<jaxrs:server id="restServiceContainer" address="/api">
<jaxrs:serviceBeans>
<ref bean="restSample" />
</jaxrs:serviceBeans>
</jaxrs:server>
</beans>
web.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
依赖的包:
- com.springsource.net.sf.cglib-2.2.0.jar
- com.springsource.org.aopalliance-1.0.0.jar
- com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
- commons-logging-1.1.1.jar
- cxf-2.6.0.jar
- geronimo-activation_1.1_spec-1.1.jar
- geronimo-annotation_1.0_spec-1.1.1.jar
- geronimo-servlet_3.0_spec-1.0.jar
- geronimo-stax-api_1.0_spec-1.0.1.jar
- geronimo-ws-metadata_2.0_spec-1.1.3.jar
- jaxb-api-2.2.6.jar
- jaxb-impl-2.2.5.jar
- jsr311-api-1.1.1.jar
- neethi-3.0.2.jar
- org.springframework.aop-3.0.1.RELEASE-A.jar
- org.springframework.asm.jar
- org.springframework.aspects-3.0.1.RELEASE-A.jar
- org.springframework.beans.jar
- org.springframework.context.jar
- org.springframework.core.jar
- org.springframework.expression.jar
- org.springframework.instrument-3.0.1.RELEASE-A.jar
- org.springframework.instrument.tomcat-3.0.1.RELEASE-A.jar
- org.springframework.web.jar
- org.springframework.webmvc.jar
- stax2-api-3.1.1.jar
- woodstox-core-asl-4.1.2.jar
- wsdl4j-1.6.2.jar
- xmlschema-core-2.0.2.jar
------------------------源码结束分割线----------------------------
输入:http://localhost:8080/sprcxf/
点击图中的连接就进入wsdl接口描述界面:
使用:
GET http://localhost:8080/sprcxf/api/getInfo
POST http://localhost:8080/sprcxf/api/getInfo/anyUserName
结论:采用该种REST接口的好处就是他自动提供了wsdl接口描述文件。非常容易理解。
源码下载:
http://yunpan.cn/lk/5643d5xzvu
码:5618