本文讨论用火狐浏览器调试RESTful Webservice
1、下载RESTClient插件
2、发布一个RESTful Webservice应用程序
CXF和Spring完美集合,
1)web.xml配置,配置拦截webservice请求映射
<servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>
<!--RESTful schema文件--> xmlns:jaxrs="http://cxf.apache.org/jaxrs" http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd <!-- 服务bean --> <bean id="mailService" class="com.deppon.uums.mail.server.service.impl.MailService" /> <!-- 使用restful方式服务 --> <jaxrs:server id="uumsMailService" address="/ws"> <jaxrs:serviceBeans> <ref bean="mailService" /> </jaxrs:serviceBeans> <jaxrs:extensionMappings> <entry key="json" value="application/json" /> <entry key="xml" value="application/xml" /> </jaxrs:extensionMappings> <jaxrs:providers> <!-- json解析器 --> <bean class="org.apache.cxf.jaxrs.provider.JSONProvider" /> </jaxrs:providers> </jaxrs:server>
3)webservice接口,用于被外界调用的接口
/** * * <p>邮件服务接口</p> * @author Stephen * @date Mar 30,2015 */ @Path("/mail") public interface IMailService extends IService { /** * * <p>发送邮件</p> * @author Stephen * @since 1.0 * @param mailInfo 邮件信息参数,
<span style="white-space:pre"> </span> * json格式:{"sender":"[email protected]","recievers":["[email protected]","[email protected]"]} * @return 返回处理后的结果,成功和失败的列表 * <li>sucess 邮件成功 * <li>Failed 邮件失败 */ @Consumes({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML}) @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML}) @POST //方法为POST @Path("/sendmail") public String sendMail(String mailInfo); }
5)webservice接口实现类,用于具体业务逻辑实现
package com.deppon.uums.mail.server.service.impl; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.springframework.transaction.annotation.Transactional; import com.deppon.uums.mail.server.dao.impl.MailDao; import com.deppon.uums.mail.server.service.IMailService; import com.deppon.uums.mail.shared.domain.DeptEntity; import com.deppon.uums.mail.shared.domain.MailRequestEntity; import com.deppon.uums.mail.shared.domain.SenderEntity; /** * <p>邮件服务实现类</p> * 记录日志信息,以后再做,若果有要求的话,例如提供页面查看发送邮件的信息,每天发邮件数量,峰值、失败原因、服务器压力等。 * @author Stephen * @date Mar 31,2015 * @since 1.0 */ @Transactional public class MailService implements IMailService { @Resource private MailDao mailDao; private static final String OFFICE_NAME = "办公室"; private static final String NOT_PERMITTED = "不能跨系统发邮件,例如人力资源本部人员不能群发给企业发展办公室任一部门!"; private static final String NOT_MATCHED = "邮箱不符合规则,邮箱应该是[email protected]等!"; private static final String NOT_FOUND = "在UUMS系统里查不到其邮件,可能历史原因,请联系IT热线手动给其加上邮件信息!"; @Override public String sendMail(String mailInfo) { /** * 处理后的邮件信息 */ String mailMessage = ""; String sender = ""; //发件人 List<String> recievers = new ArrayList<String>(); //收件人列表 List<String> empMail = new ArrayList<String>(); //个人邮件 List<String> deptMail = new ArrayList<String>(); //部门邮件 Map<String,List<String>> message = new HashMap<String,List<String>>(); List<String> success = new ArrayList<String>(); List<String> Failed = new ArrayList<String>(); if (StringUtils.isNotBlank(mailInfo)) { //将json数据解析成对象 JSONObject object = JSONObject.fromObject(mailInfo); MailRequestEntity mailEntity = (MailRequestEntity) JSONObject.toBean(object,MailRequestEntity.class); sender = mailEntity.getSender(); recievers = mailEntity.getRecievers(); //对收件人列表进行过滤,把个人过滤掉 for(String mail : recievers){ if (!mail.contains("@deppon.com")) { //不是德邦内部邮箱不允许发邮件 Failed.add(mail + ":" + NOT_MATCHED); } else { if (mail.startsWith("W")) { deptMail.add(mail); } else { empMail.add(mail); } } } //从数据库查找发件人信息 SenderEntity senderDept = mailDao.queryBySender(sender); //从数据库查找部门收件人列表 List<DeptEntity> deptList = mailDao.queryByRecivers(deptMail); //发件人邮件在UUMS系统里可能查不到,历史原因 if(senderDept == null){ Failed.add(sender + ":" + NOT_FOUND); message.put("Failed",Failed); } if (senderDept != null && deptList != null) { String empDeptName = senderDept.getDeptName(); String empDeptId = senderDept.getDeptId(); //发送人的部门是办公室,则发送人的权限和办公室部门的上级部门拥有相同的权限 if (empDeptName.contains(OFFICE_NAME)) { empDeptId = senderDept.getParentId(); } for(DeptEntity dept : deptList) { String deptSeq = dept.getDeptSeq(); deptSeq = deptSeq.substring(1,deptSeq.length()-1); List<String> recDepts = Arrays.asList(deptSeq.split("\\.")); //部门收件人部门id列表 if (recDepts.contains(empDeptId)) { //如果收件人的序列包含发件人,则可以发送 success.add(dept.getDeptEmail() + ":" + dept.getDeptName()); } else { Failed.add(dept.getDeptEmail() + ":" + dept.getDeptName() + ":" + NOT_PERMITTED); } } success.addAll(empMail); //把个人邮箱列表添加到成功集合里 message.put("success",success); message.put("Failed",Failed); } //将处理结果返回给调用者 mailMessage = JSONObject.fromObject(message).toString(); } return mailMessage; } }
6)webservice测试,使用代码测试,启动tomcat服务器
@Test public void testMail() throws Exception { String mailInfo = "{'sender':'[email protected]'," + "'recievers':['[email protected]','[email protected]'," + "'[email protected]','[email protected]']}"; WebClient client = WebClient.create("http://localhost:8088/uums-mail/rest/ws/"); String result = client.path("mail/sendmail"). accept(MediaType.APPLICATION_JSON).post(mailInfo,String.class); if (StringUtils.isNotBlank(result)) { System.out.println(result); } }
{"Failed":["[email protected]:宁波鄞州区姜山营业部:不能跨系统发邮件,例如人力资源本部人员不能群发给企业发展办公室任一部门!"],
"success":["[email protected]:郑州转运中心","[email protected]:郑州大区","[email protected]:安徽北部大区"]}
7)使用RESTClient插件测试,得到的结果如下:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。