/* * Copyright (c) 2004 Your Corporation. All Rights Reserved. */ package com.jetmaven.oa; import org.apache.xmlrpc.XmlRpcServer; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.util.Iterator; import java.util.Map; /** * @author chenlibing * Date: 2004-6-16 */ public class XmlRpcController implements Controller { private XmlRpcServer xmlrpc = new XmlRpcServer(); /** * 设置服务的实现 * * @param handlers key为名称(客户端调用时方法名称前应加上的此索引),value为值 */ public void setHandlers(Map handlers) { Iterator allEntry = handlers.entrySet().iterator(); while (allEntry.hasNext()) { Map.Entry entry = (Map.Entry) allEntry.next(); xmlrpc.addHandler((String) entry.getKey(), entry.getValue()); } } /** * 处理xml-rpc服务 * @param request * @param response * @return * @throws Exception */ public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { if (request.getMethod().equalsIgnoreCase("GET")) { return handleGetRequest(request, response); } byte[] result = xmlrpc.execute(request.getInputStream()); //此处charset=gb2312一定要加上,不然在浏览器端会出现乱码问题 response.setContentType("text/xml;charset=gb2312"); response.setContentLength(result.length); OutputStream out = response.getOutputStream(); out.write(result); out.flush(); return null; } public ModelAndView handleGetRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //此处charset=gb2312一定要加上,不然在浏览器端会出现乱码问题 response.setContentType("text/html;charset=gb2312"); String message = "如果你要调用xmlrpc服务,请使用POST方法"; OutputStream out = response.getOutputStream(); out.write(message.getBytes()); out.flush(); return null; } }