/** * Copyright 2008 biaoping.yin * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.frameworkset.spi.remote.hession; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * <p> AbstractHessionHandler.java</p> * <p> Description: </p> * <p> bboss workgroup </p> * <p> Copyright (c) 2009 </p> * * @Date 2013-2-21 下午4:41:23 * @author biaoping.yin * @version 1.0 */ public abstract class AbstractHessionHandler { private Object service; private Class serviceInterface; public AbstractHessionHandler() { // TODO Auto-generated constructor stub } /** * Check whether the service reference has been set. * @see #setService */ protected void checkService() throws IllegalArgumentException { if (getService() == null) { throw new IllegalArgumentException("Property 'service' is required"); } } /** * Check whether a service reference has been set, * and whether it matches the specified service. * @see #setServiceInterface * @see #setService */ protected void checkServiceInterface() throws IllegalArgumentException { Class serviceInterface = getServiceInterface(); Object service = getService(); if (serviceInterface == null) { throw new IllegalArgumentException("Property 'serviceInterface' is required"); } if (service instanceof String) { throw new IllegalArgumentException("Service [" + service + "] is a String " + "rather than an actual service reference: Have you accidentally specified " + "the service bean name as value instead of as reference?"); } if (!serviceInterface.isInstance(service)) { throw new IllegalArgumentException("Service interface [" + serviceInterface.getName() + "] needs to be implemented by service [" + service + "] of class [" + service.getClass().getName() + "]"); } } public Object getService() { return service; } public void setService(Object service) { this.service = service; } public Class getServiceInterface() { return serviceInterface; } public void setServiceInterface(Class serviceInterface) { this.serviceInterface = serviceInterface; } public void invoke(HttpServletRequest req,HttpServletResponse response) throws Throwable { // String serviceId = req.getPathInfo(); // String objectId = req.getParameter("id"); // if (objectId == null) // objectId = req.getParameter("ejbid"); // ServiceContext.begin(req, serviceId, objectId); try { InputStream is = req.getInputStream(); OutputStream os = response.getOutputStream(); invoke(is, os); } catch (RuntimeException e) { throw e; } catch (Throwable e) { throw new ServletException(e); } finally { // ServiceContext.end(); } } protected abstract void invoke(InputStream inputStream, OutputStream outputStream) throws Throwable; protected abstract void afterPropertiesSet(); }