| LocalServletHandler.java |
/*
* $Id: LocalServletHandler.java,v 1.27 2010/09/29 17:21:48 agoubard Exp $
*
* See the COPYRIGHT file for redistribution and use restrictions.
*/
package org.xins.common.servlet.container;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.xins.common.Log;
/**
* This class allows to invoke a XINS API without using HTTP.
*
* Example:
* <code>
* LocalServletHandler handler = LocalServletHandler.getInstance("c:\\test\\myproject.war");
* String xmlResult = handler.query("http://127.0.0.1:8080/myproject/?_function=MyFunction&gender=f&personLastName=Lee");
* </code>
*
* @version $Revision: 1.27 $ $Date: 2010/09/29 17:21:48 $
* @author <a href="mailto:anthony.goubard@japplis.com">Anthony Goubard</a>
*/
public class LocalServletHandler {
/**
* The Servlet started by this Servlet handler.
*/
private HttpServlet _apiServlet;
/**
* Creates a Servlet handler that allow to invoke a Servlet without starting
* a HTTP server.
*
* @param warFile
* the location of the war file containing the Servlet, cannot be
* <code>null</code>.
*
* @throws ServletException
* if the Servlet cannot be created.
*/
public LocalServletHandler(File warFile) throws ServletException {
initServlet(warFile);
}
/**
* Creates a Servlet handler that allow to invoke a Servlet without starting
* a HTTP server.
*
* @param servletClassName
* The name of the servlet's class to load, cannot be <code>null</code>.
*
* @throws ServletException
* if the Servlet cannot be created.
*/
public LocalServletHandler(String servletClassName) throws ServletException {
initServlet(servletClassName);
}
/**
* Initializes the Servlet.
*
* @param warFile
* the location of the war file, cannot be <code>null</code>.
*
* @throws ServletException
* if the Servlet cannot be loaded.
*/
public void initServlet(File warFile) throws ServletException {
// create and initiliaze the Servlet
Log.log_1503(warFile.getPath());
try {
LocalServletConfig servletConfig = new LocalServletConfig(warFile);
_apiServlet = (HttpServlet) Class.forName(servletConfig.getServletClass()).newInstance();
_apiServlet.init(servletConfig);
} catch (ServletException exception) {
Log.log_1508(exception);
throw exception;
} catch (Exception exception) {
Log.log_1509(exception);
throw new ServletException(exception);
}
}
/**
* Initializes the Servlet.
*
* @param servletClassName
* The name of the servlet's class to load, cannot be <code>null</code>.
*
* @throws ServletException
* if the Servlet cannot be loaded.
*/
public void initServlet(String servletClassName) throws ServletException {
// create and initiliaze the Servlet
//Log.log_1503(warFile.getPath());
try {
_apiServlet = (HttpServlet) Class.forName(servletClassName).newInstance();
_apiServlet.init();
} catch (ServletException exception) {
Log.log_1508(exception);
throw exception;
} catch (Exception exception) {
Log.log_1509(exception);
throw new ServletException(exception);
}
}
/**
* Gets the Servlet.
*
* @return
* the created Servlet or <code>null</code> if no Servlet was created.
*/
public Object getServlet() {
return _apiServlet;
}
/**
* Queries the Servlet with the specified URL.
*
* @param url
* the url query for the request.
*
* @return
* the servlet response.
*
* @throws IOException
* If the query is not handled correctly by the servlet.
*/
public XINSServletResponse query(String url) throws IOException {
return query("GET", url, null, new HashMap());
}
/**
* Queries the servlet with the specified method, URL, content and HTTP
* headers.
*
* @param method
* the request method, cannot be <code>null</code>.
*
* @param url
* the url query for the request, if <code>null</code> then the /
* path is used as default with no parameters.
*
* @param data
* the data post for the request. <code>null</code> for HTTP GET queries.
*
* @param headers
* the HTTP headers passed with the query, cannot be <code>null</code>.
* The key and the value of the Map is String. The keys are all in
* uppercase.
*
* @return
* the servlet response.
*
* @throws IOException
* If the query is not handled correctly by the servlet.
*
* @since XINS 1.5.0
*/
public XINSServletResponse query(String method,
String url,
String data,
Map headers)
throws IOException {
Log.log_1504(url);
XINSServletRequest request = new XINSServletRequest(method, url, data, headers);
XINSServletResponse response = new XINSServletResponse();
try {
_apiServlet.service(request, response);
} catch (ServletException ex) {
Log.log_1505(ex);
throw new IOException(ex.getMessage());
}
Log.log_1506(response.getResult(), response.getStatus());
return response;
}
/**
* Disposes the Servlet and closes this Servlet handler.
*/
public void close() {
Log.log_1507();
_apiServlet.destroy();
}
}