Restful CXF Spring 几种整合一(发布wsdl形式接口)

这个文章已经想写很长时间了,今天没事就写下!


关于CXF之前接触不是很多,所以不是很懂,这段时间项目需要所以就研究下


首先是理解Restful 接口也可以发布wsdl接口,以往我的印象中Rest接口,只是发布一个服务,他的接口服务方式给使用文档说明的,但是接下来发布的Rest接口就是一个wsdl形式的接口。


工程需要Spring  core 、Spring AOP、CXF等相关包支持。


Demo工程目标,  做一个用户添加(POST)和查询(GET)功能。

共三个文件:

  1. Users.java
  2. beans.xml
  3. 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

spring + cxf + restful + soap 方便初学者很快上手。 注解描述 @Path注解的值是一个相对的URI路径,这个路径指定了该Java类的位置,例如/helloworld。在这个URI中可以包含变量,例如可以获取用户的姓名然后作为参数传入URI中:/helloworld/{username}。 @GET注解是请求方法指示符,这个指示符注解的Java方法会处理HTTPGET请求。资源的行为由资源回应的HTTP方法决定。 @POST注解是请求方法指示符,这个指示符注解的Java方法会处理HTTPPOST请求。资源的行为由资源回应的HTTP方法决定。 @PUT注解是请求方法指示符,这个指示符注解的Java方法会处理HTTPPUT请求。资源的行为由资源回应的HTTP方法决定。 @DELETE注解是请求方法指示符,这个指示符注解的Java方法会处理HTTPDELETE请求。资源的行为由资源回应的HTTP方法决定。 @HEAD注解是请求方法指示符,这个指示符注解的Java方法会处理HTTPHEAD请求。资源的行为由资源回应的HTTP方法决定。 @PathParam注解是可以抽取并用在资源类中的一类参数。URIpath参数是从请求的URI中抽取的,而且参数的名称和@Path注解中定义的变量名对应。 @QueryParam注解是可以抽取并在资源类中使用的一类参数。Query参数是从请求URI的查询参数中抽取的。 @Consumes注解是用来指定资源能够接受的客户发送的MIME媒体类型。 @Produces注解用来指定资源能够生成并发送给客户端的MIME媒体类型,例如“text/plain”. @Provider注解用在任何对JAX-RS运行时(如MessageBodyReader和MessageBodyWriter)有意义的事物上。对HTTP请求,MessageBodyReader用来将HTTP请求实体段映射为方法参数。在响应的时候,返回的值使用MessageBodyWriter来映射成HTTP响应实体段。如果应用程序需要提供其他的元数据,如HTTP头或不同的状态代码,方法可以返回一个打包了实体的Response,该Response可以使用Response.ResponseBuilder创建。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值