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

org.nakedobjects.plugins.remoting.http.EncodingOverHttpRemotingServlet Maven / Gradle / Ivy

The newest version!
package org.nakedobjects.plugins.remoting.http;

import java.io.IOException;

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

import org.nakedobjects.metamodel.config.NakedObjectConfiguration;
import org.nakedobjects.remoting.facade.impl.ServerFacadeImpl;
import org.nakedobjects.remoting.protocol.encoding.EncodingMarshaller;
import org.nakedobjects.remoting.protocol.encoding.internal.ObjectEncoderDecoderDefault;
import org.nakedobjects.remoting.server.ServerConnection;
import org.nakedobjects.remoting.server.ServerConnectionDefault;
import org.nakedobjects.remoting.server.ServerConnectionHandler;
import org.nakedobjects.remoting.server.SocketsViewerAbstract;
import org.nakedobjects.remoting.transport.simple.SimpleTransport;
import org.nakedobjects.runtime.system.NakedObjectsSystem;
import org.nakedobjects.webapp.NakedObjectsWebAppBootstrapper;

/**
 * Analogous to {@link SocketsViewerAbstract}; both ultimately delegate to
 * {@link ServerConnectionHandler}.
 */
public class EncodingOverHttpRemotingServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	private NakedObjectsSystem system;
	private NakedObjectConfiguration configuration;

	private ServerFacadeImpl serverFacade;

	@Override
	public void init() throws ServletException {
		super.init();
		system = NakedObjectsWebAppBootstrapper
				.getSystemBoundTo(getServletContext());
		configuration = system.getConfiguration();

		serverFacade = new ServerFacadeImpl(system.getSessionFactory()
				.getAuthenticationManager());
		serverFacade.setEncoder(ObjectEncoderDecoderDefault
				.create(configuration));
	}

	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		ServletInputStream inputStream = request.getInputStream();
		ServletOutputStream outputStream = response.getOutputStream();

		ServerConnection serverConnection = createConnection(inputStream,
				outputStream);

		try {
			new ServerConnectionHandler(serverConnection).handleRequest();
		} catch (IOException ex) {
			// REVIEW: is this enough, or should we try to return a more
			// user-friendly exception or status?
			throw ex;
		} finally {
			// nothing to do
		}
	}

	private ServerConnection createConnection(ServletInputStream inputStream,
			ServletOutputStream outputStream) throws IOException {

		// TODO: should use installers to create these,
		// provides the opportunity to read in installer-specific config files.
		SimpleTransport transport = new SimpleTransport(configuration,
				inputStream, outputStream);
		EncodingMarshaller marshaller = new EncodingMarshaller(configuration,
				transport);

		// this is a no-op with the SimpleTransport, but include for consistency
		marshaller.connect();

		return new ServerConnectionDefault(serverFacade, marshaller);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy