您的位置:首页 > 编程语言 > Java开发

WebService系列博客{十一}[CXF整合spring实际案例]

2013-01-17 15:11 441 查看
1、概述

在上文blog中已经发布了如何简单的发布一个CXF web service案例。本篇blog将会实际结合项目中的应用开放出来说明.本篇是一个发送短信的服务,本文只提供了保存到数据库的操作,导入jar包等操作本篇不再叙述。如若忘记请看上一篇blog。

2、被web service调用的dao层hibernateTemplate的保存Method

//Interface
public interface SmsDao extends BaseDao {
	/**
	 * 保存短信
	 * 
	 * @param sms
	 * @return
	 */
	public Long saveSms(Sms sms);
}
//Impl
@Component("smsDao")
public class SmsDaoImpl extends BaseDaoImpl implements SmsDao {

	@Override
	public Long saveSms(Sms sms) {
		try {
			this.hibernateTemplate.save(sms);
		} catch (DataAccessException e) {
			e.printStackTrace();
			return (long) 1;
		}
		return null;
	}
}
//本篇采用的Spring Mvc和Spring框架。将实现类通过Java注解的方式注入到xml中


3、web service的接口和实现类编写

//Web Service Interface code
import java.util.Date;

import javax.jws.WebParam;
import javax.jws.WebService;

/***
 * 发送短信的webservice
 * @author zhanglei
 *
 */
@WebService(name = "SendMessage", targetNamespace = "http://webservice.sms.cn/")
public interface SendMessage {
	public void SendMsg(@WebParam(name="SendTo")String SendTo,
			@WebParam(name="Msg")String Msg,
			@WebParam(name="SendTime")String SendTime);
}

//web service Impl Code
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.annotation.Resource;
import javax.jws.WebService;

import cn.com.swansoft.sms.dao.SmsDao;
import cn.com.swansoft.sms.dao.pojo.Sms;
@WebService(endpointInterface="cn.sms.webservice.SendMessage")
public class SendMessageImpl implements SendMessage{

	private SmsDao smsDao;

	public SmsDao getSmsDao() {
		return smsDao;
	}
	@Resource(name = "smsDao")
	public void setSmsDao(SmsDao smsDao) {
		this.smsDao = smsDao;
	}
	
	
	
	@Override
	public void SendMsg(String SendTo, String Msg, String SendTime) {

		Date d;
		try {
			Sms sms = new Sms();
			sms.setAddTime(new Date());
			sms.setMessage(Msg);
			sms.setMobile(SendTo);
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			d = sdf.parse(SendTime);
			sms.setSendTime(d);
			sms.setSend(true);
			sms.setUsername("root");
			sms.setOrderedTime(new Date());
			smsDao.saveSms(sms);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

4、applicationContext配置web service服务

<?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:context="http://www.springframework.org/schema/context"
       xmlns:task="http://www.springframework.org/schema/task"
	   xmlns:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
          http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
">
    <context:annotation-config/>
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

<!-- 导入cxf.jar解压出来的文件 -->        
<import resource="../META-INF/cxf/cxf.xml"/>
<import resource="../META-INF/cxf/cxf-extension-soap.xml"/>
<import resource="../META-INF/cxf/cxf-servlet.xml"/>

<!-- 声明Endpoint, 
address 为访问地址的部分地址
implementor   为实现类
 -->
<jaxws:endpoint id="SendMessage" 
	address="/SendMessage" 
	implementor="cn.sms.webservice.SendMessageImpl"/>

<!-- 访问地址搭配web.xml中的CXFServlet的url-pattern使用本例url详解: http://localhost:8080/ROOT/CXFServlet/SendMessage?wsdl 
首先url-pattern映射的是/CXFServlet/*配合上文的/SendMessage即可访问该wsdl
-->

	
<!-- 指定客户端访问相关情况
class   服务端接口
factory-bean    引用下面声明的类
factory-method   客户端生成调用对象所用方法
-->
<bean id="client" 
		class="cn.sms.webservice.SendMessage"
			factory-bean="clientFactory"
				factory-method="create"></bean>
				

			
<!-- 配置CXF服务代理bean
serviceClass : 服务端接口
address : 访问地址jaxws:endpoint声明的address在项目名的后面,此处的路径和web.xml配置的urlpattern有联系
 -->				
<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
	<property name="serviceClass" value="cn.sms.webservice.SendMessage"></property>
	<property name="address" value="http://192.168.1.104:8080/ROOT/SendMessage"></property>
</bean>
	

</beans>


5、Web Service在xml中的配置CXFServlet

<!-- 以下是web service配置 -->

  <!-- 配置监听 -->
  <listener>
  	<listener-class>
  		org.springframework.web.context.ContextLoaderListener
  	</listener-class>
  </listener>
  
  <!-- 部署servlet -->
  <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>/CXFServlet/*</url-pattern>
  </servlet-mapping>
	
<!-- 以上是web service配置 -->

<!—-  容器加载xml监听 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
            /WEB-INF/applicationContext.xml
        </param-value>
	</context-param>


6、wsdl文件Url
http://localhost:8080/ROOT/CXFServlet/SendMessage?wsdl
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: