/* * Copyright(c) 2005 Center for E-Commerce Infrastructure Development, The * University of Hong Kong (HKU). All Rights Reserved. * * This software is licensed under the GNU GENERAL PUBLIC LICENSE Version 2.0 [1] * * [1] http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt */ package hk.hku.cecid.edi.as2.listener; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import javax.mail.internet.InternetHeaders; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import hk.hku.cecid.edi.as2.pkg.AS2Message; import hk.hku.cecid.piazza.commons.io.IOHandler; import hk.hku.cecid.piazza.commons.servlet.RequestListenerException; import hk.hku.cecid.piazza.commons.servlet.http.HttpRequestAdaptor; import hk.hku.cecid.piazza.commons.util.Headers; /** * AS2RequestAdaptor * * @author Hugo Y. K. Lam * */ public abstract class AS2RequestAdaptor extends HttpRequestAdaptor { /** * processRequest * @param request * @param response * @return String * @throws RequestListenerException * @see hk.hku.cecid.piazza.commons.servlet.http.HttpRequestListener#processRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ public String processRequest(HttpServletRequest request, HttpServletResponse response) throws RequestListenerException { try { Headers headers = new Headers(request, response); InternetHeaders requestHeaders = headers.getInternetHeaders(); InputStream requestStream = request.getInputStream(); AS2Message requestMessage = new AS2Message(requestHeaders, requestStream); if (requestMessage.getFromPartyID() == null || requestMessage.getToPartyID() == null) { response.sendError(HttpURLConnection.HTTP_BAD_REQUEST, "Invalid AS2 Message"); return null; } AS2Request as2request = new AS2Request(request); as2request.setMessage(requestMessage); AS2Response as2response = new AS2Response(response); processRequest(as2request, as2response); AS2Message responseMessage = as2response.getMessage(); if (responseMessage == null) { return null; } InternetHeaders responseHeaders = responseMessage.getHeaders(); headers.putInternetHeaders(responseHeaders); InputStream contentStream= responseMessage.getContentStream(); OutputStream responseStream= response.getOutputStream(); IOHandler.pipe(contentStream, responseStream); return null; } catch (Exception e) { throw new RequestListenerException("Error in processing AS2 request", e); } } abstract public void processRequest(AS2Request request, AS2Response response) throws RequestListenerException; }