use of org.pentaho.platform.plugin.services.webservices.AxisServletHooks in project pentaho-platform by pentaho.
the class AxisServiceExecutor method createServiceContent.
@Override
public void createServiceContent(AxisService axisService, String operationName, AxisConfiguration axisConfiguration, ConfigurationContext context, OutputStream out) throws Exception {
// $NON-NLS-1$
IParameterProvider pathParams = parameterProviders.get("path");
// get the HTTP objects from the 'path' parameter provider
// $NON-NLS-1$
HttpServletRequest request = (HttpServletRequest) pathParams.getParameter("httprequest");
@SuppressWarnings("unchecked") Enumeration names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
if (name.equalsIgnoreCase("wsdl")) {
// $NON-NLS-1$
axisService.printWSDL(out, AxisUtil.getWebServiceExecuteUrl());
return;
}
}
// $NON-NLS-1$
HttpServletResponse response = (HttpServletResponse) pathParams.getParameter("httpresponse");
// $NON-NLS-1$
ServletConfig servletConfig = (ServletConfig) pathParams.getParameter("servletconfig");
// create a service group and group context for this service
AxisServiceGroup axisServiceGroup = new AxisServiceGroup(context.getAxisConfiguration());
axisServiceGroup.addService(axisService);
ServiceGroupContext serviceGroupContext = new ServiceGroupContext(context, axisServiceGroup);
// create a service context
ServiceContext serviceContext = serviceGroupContext.getServiceContext(axisService);
// get an operation by name, if possible
AxisOperation axisOperation = axisService.getOperationByAction(operationName);
OperationContext operationContext = serviceContext.createOperationContext(axisOperation);
// create an object to hook into Axis and give it everything we have
AxisServletHooks hooks = new AxisServletHooks();
hooks.setContext(context);
hooks.setServletConfig(servletConfig);
hooks.setConfiguration(axisConfiguration);
hooks.initContextRoot(request);
hooks.setAxisService(axisService);
hooks.setAxisOperation(axisOperation);
hooks.setOperationContext(operationContext);
hooks.setServiceContext(serviceContext);
hooks.setAxisOperation(axisOperation);
hooks.setOperationContext(operationContext);
// now execute the operation
if (request != null && response != null) {
try {
PentahoSessionHolder.setSession(userSession);
String method = request.getMethod();
if ("GET".equalsIgnoreCase(method)) {
// $NON-NLS-1$
hooks.handleGet(method, request, response);
} else if ("POST".equalsIgnoreCase(request.getMethod())) {
// $NON-NLS-1$
hooks.handlePost(method, request, response);
} else if ("PUT".equalsIgnoreCase(request.getMethod())) {
// $NON-NLS-1$
hooks.handlePut(method, request, response);
}
} catch (Exception e) {
processAxisFault(hooks.getMessageContext(), out, e);
// $NON-NLS-1$
error(Messages.getInstance().getErrorString("RunService.ERROR_0001_ERROR_DURING_EXECUTION"), e);
}
}
}
Aggregations