001    /*
002      GRANITE DATA SERVICES
003      Copyright (C) 2011 GRANITE DATA SERVICES S.A.S.
004    
005      This file is part of Granite Data Services.
006    
007      Granite Data Services is free software; you can redistribute it and/or modify
008      it under the terms of the GNU Library General Public License as published by
009      the Free Software Foundation; either version 2 of the License, or (at your
010      option) any later version.
011    
012      Granite Data Services is distributed in the hope that it will be useful, but
013      WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
014      FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
015      for more details.
016    
017      You should have received a copy of the GNU Library General Public License
018      along with this library; if not, see <http://www.gnu.org/licenses/>.
019    */
020    
021    package org.granite.messaging.webapp;
022    
023    import java.io.IOException;
024    
025    import javax.servlet.ServletException;
026    import javax.servlet.http.HttpServlet;
027    import javax.servlet.http.HttpServletRequest;
028    import javax.servlet.http.HttpServletResponse;
029    
030    import org.granite.logging.Logger;
031    import org.granite.context.AMFContextImpl;
032    import org.granite.context.GraniteContext;
033    import org.granite.messaging.amf.AMF0Message;
034    import org.granite.messaging.amf.process.AMF0MessageProcessor;
035    
036    /**
037     * @author Franck WOLFF
038     */
039    public class AMFMessageServlet extends HttpServlet {
040    
041        private static final long serialVersionUID = 1L;
042    
043        private static final Logger log = Logger.getLogger(AMFMessageServlet.class);
044    
045        @Override
046        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
047            try {
048                GraniteContext context = GraniteContext.getCurrentInstance();
049                if (context == null)
050                    throw new ServletException(
051                        "No GraniteContext (" + AMFMessageFilter.class.getName() + " not configured in web.xml ?)");
052    
053                AMFContextImpl amf = (AMFContextImpl)context.getAMFContext();
054    
055                AMF0Message amf0Request = amf.getAMF0Request();
056    
057                log.debug(">> Processing AMF0 request: %s", amf0Request);
058    
059                AMF0Message amf0Response = AMF0MessageProcessor.process(amf0Request);
060    
061                log.debug("<< Returning AMF0 response: %s", amf0Response);
062    
063                amf.setAmf0Response(amf0Response);
064            } catch (Exception e) {
065                log.error(e, "AMF message error");
066                throw new ServletException(e);
067            }
068        }
069    }