package org.jboss.webservice.server;
import org.jboss.axis.AxisEngine;
import org.jboss.axis.AxisFault;
import org.jboss.axis.MessageContext;
import org.jboss.axis.handlers.soap.SOAPService;
import org.jboss.logging.Logger;
import org.jboss.webservice.ServiceDeployer;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ServiceEndpointServlet extends AbstractServlet
{
static final long serialVersionUID = 3806847653370058302L;
protected final Logger log = Logger.getLogger(getClass());
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
String url = req.getRequestURL().toString();
String queryString = req.getQueryString();
log.debug("doGet: " + url + (queryString != null ? "?" + queryString : ""));
PrintWriter writer = res.getWriter();
try
{
AxisEngine engine = getEngine();
String serviceName = getServiceName(req);
SOAPService service = (serviceName != null ? engine.getService(serviceName) : null);
boolean wsdlRequested = req.getParameter("wsdl") != null || req.getParameter("WSDL") != null;
if (!wsdlRequested)
{
log.debug("Report available services");
reportAvailableServices(res, writer, req);
return;
}
if (service == null)
{
log.error("Cannot get axis service: " + serviceName);
reportCantGetAxisService(req, res, writer);
return;
}
MessageContext msgContext = createMessageContext(engine, req, res);
if (service != null)
msgContext.setTargetService(serviceName);
String transportURL = getTransportURL(req, serviceName);
if (transportURL != null)
{
msgContext.setProperty(MessageContext.TRANS_URL, transportURL);
log.debug("Set transport.url=" + transportURL);
}
if (wsdlRequested)
{
String wsdlResource = req.getParameter("resource");
if (wsdlResource != null)
{
log.debug("Process wsdl import request: " + wsdlResource);
msgContext.setProperty(MessageContext.WSDLGEN_RESOURCE, wsdlResource);
}
else
{
log.debug("Process wsdl request");
}
processWsdlRequest(msgContext, res, writer);
return;
}
log.debug("Report service info");
reportServiceInfo(res, writer, service, serviceName);
}
catch (AxisFault fault)
{
reportTrouble(fault, res, writer);
}
catch (Exception e)
{
reportTrouble(e, res, writer);
}
finally
{
AxisEngine.setCurrentMessageContext(null);
writer.close();
}
}
protected String getServiceName(HttpServletRequest req)
{
String serviceName = getServletConfig().getInitParameter(ServiceDeployer.INIT_PARAM_WEBSERVICE_ID);
return serviceName;
}
}