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