import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.xmlrpc.XmlRpcServer; public class XmlRpcServlet extends HttpServlet { public class EchoHandler { public String echo(String input) { return input; } } private XmlRpcServer server = new XmlRpcServer(); private static Log log = LogFactory.getLog(XmlRpcServlet.class); @Override public void init(ServletConfig config) throws ServletException { server.addHandler("echo", new EchoHandler()); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { byte[] result = server.execute(request.getInputStream()); response.setContentType("text/xml"); response.setContentLength(result.length); OutputStream output = response.getOutputStream(); output.write(result); output.flush(); } }
// The following needs to be added to your web.xml file to
// expose the servlet so it may be called remotely.
<servlet> <servlet-name>XmlRpcServlet</servlet-name> <servlet-class>XmlRpcServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>XmlRpcServlet</servlet-name> <url-pattern>/remoteapi</url-pattern> </servlet-mapping>