All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.jstuff.integration.spring.SpringHttpServicesServlet Maven / Gradle / Ivy

/*
 * Copyright 2010-2022 by Sebastian Thomschke and contributors.
 * SPDX-License-Identifier: EPL-2.0
 */
package net.sf.jstuff.integration.spring;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeansException;
import org.springframework.web.HttpRequestHandler;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import net.sf.jstuff.core.logging.Logger;

/**
 * applicationContext.xml:
 *
 * 
 *   <bean name="/UserService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter" lazy-init="false">
 *     <property name="service" ref="userService" />
 *     <property name="serviceInterface" value="com.acme.services.UserService" />
 *   </bean>
 *   <bean name="/GroupService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter" lazy-init="false">
 *     <property name="service" ref="groupService" />
 *     <property name="serviceInterface" value="com.acme.services.GroupService" />
 *   </bean>
 * 
* * web.xml: * *
 * <servlet>
 *    <servlet-name>httpServicesServlet</servlet-name>
 *    <servlet-class>net.sf.jstuff.integration.spring.SpringHttpServicesServlet</servlet-class>
 * </servlet>
 * <servlet-mapping>
 *    <servlet-name>httpServicesServlet</servlet-name>
 *    <url-pattern>/remoting/*</url-pattern>
 * </servlet-mapping>
 * 
* * @author Sebastian Thomschke */ public class SpringHttpServicesServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final Logger LOG = Logger.create(); private boolean showIndex = true; public SpringHttpServicesServlet() { LOG.infoNew(this); } @Override protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { final String relativePath = request.getPathInfo(); final WebApplicationContext springContext = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); if (relativePath == null || "/".equals(relativePath)) { if (showIndex) { final Map beans = springContext.getBeansOfType(HttpRequestHandler.class); final PrintWriter pw = response.getWriter(); pw.write(""); pw.write("

Available services:

"); pw.write("
    "); String contextRoot = request.getRequestURI(); if (!contextRoot.endsWith("/")) { contextRoot += "/"; } for (final Entry entry : beans.entrySet()) { if (!entry.getKey().startsWith("/")) { continue; } final String serviceID = entry.getKey().substring(1); pw.write("
  • "); pw.write("" + serviceID + ""); pw.write("
  • "); } pw.write("
"); pw.flush(); pw.close(); } else { response.sendError(HttpServletResponse.SC_FORBIDDEN); } return; } try { // going backwards to the relativePath to find the best matching bean String beanName = relativePath; while (beanName.contains("/")) { if (springContext.containsBean(beanName)) { request.setAttribute("beanName", beanName); springContext.getBean(beanName, HttpRequestHandler.class).handleRequest(request, response); return; } beanName = StringUtils.substringBeforeLast(beanName, "/"); } } catch (final BeansException ex) { LOG.error(ex, "Unexpected exception occured while retrieving bean [%s].", relativePath); } response.sendError(HttpServletResponse.SC_NOT_FOUND); } public void setShowIndex(final boolean showIndex) { this.showIndex = showIndex; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy