Author: jochen Date: Wed May 24 13:07:25 2006 New Revision: 409238 URL: http://svn.apache.org/viewvc?rev=409238&view=rev Log: Cleanup of the server side code.
Added: webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/ServerHttpConnection.java Modified: webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransport.java webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/LocalStreamConnection.java webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/ServerStreamConnection.java webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcLocalStreamServer.java webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/Connection.java webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/ConnectionServer.java webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/XmlRpcServletServer.java Modified: webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransport.java URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransport.java?rev=409238&r1=409237&r2=409238&view=diff ============================================================================== --- webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransport.java (original) +++ webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransport.java Wed May 24 13:07:25 2006 @@ -53,7 +53,7 @@ } protected InputStream getInputStream() throws XmlRpcException { - localServer.execute(conn.getConfig(), conn); + localServer.execute(conn.getConfig(), conn.getServerStreamConnection()); return new ByteArrayInputStream(conn.getResponse().toByteArray()); } Modified: webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/LocalStreamConnection.java URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/LocalStreamConnection.java?rev=409238&r1=409237&r2=409238&view=diff ============================================================================== --- webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/LocalStreamConnection.java (original) +++ webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/LocalStreamConnection.java Wed May 24 13:07:25 2006 @@ -1,18 +1,36 @@ package org.apache.xmlrpc.common; import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; /** Implementation of [EMAIL PROTECTED] ServerStreamConnection} for * use by the * [EMAIL PROTECTED] org.apache.xmlrpc.client.XmlRpcLocalStreamTransport}. */ -public class LocalStreamConnection - implements ServerStreamConnection { - private final InputStream request; +public class LocalStreamConnection { + private class LocalServerStreamConnection implements ServerStreamConnection { + public InputStream newInputStream() throws IOException { + return request; + } + + public OutputStream newOutputStream() throws IOException { + return response; + } + + public void close() throws IOException { + if (response != null) { + response.close(); + } + } + } + + private final InputStream request; private final XmlRpcStreamRequestConfig config; private final ByteArrayOutputStream response = new ByteArrayOutputStream(); + private final ServerStreamConnection serverStreamConnection; /** Creates a new instance with the given request stream. */ @@ -20,6 +38,7 @@ InputStream pRequest) { config = pConfig; request = pRequest; + serverStreamConnection = new LocalServerStreamConnection(); } /** Returns the request stream. @@ -40,4 +59,10 @@ public ByteArrayOutputStream getResponse() { return response; } + + /** Returns the servers connection. + */ + public ServerStreamConnection getServerStreamConnection() { + return serverStreamConnection; + } } Modified: webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/ServerStreamConnection.java URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/ServerStreamConnection.java?rev=409238&r1=409237&r2=409238&view=diff ============================================================================== --- webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/ServerStreamConnection.java (original) +++ webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/ServerStreamConnection.java Wed May 24 13:07:25 2006 @@ -1,5 +1,9 @@ package org.apache.xmlrpc.common; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + /** Interface of an object, which is able to provide * an XML stream, containing an XML-RPC request. @@ -7,5 +11,13 @@ * write the response as an XML stream. */ public interface ServerStreamConnection { - + /** Returns the connections input stream. + */ + InputStream newInputStream() throws IOException; + /** Returns the connections output stream. + */ + OutputStream newOutputStream() throws IOException; + /** Closes the connection, and frees resources. + */ + void close() throws IOException; } Added: webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/ServerHttpConnection.java URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/ServerHttpConnection.java?rev=409238&view=auto ============================================================================== --- webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/ServerHttpConnection.java (added) +++ webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/ServerHttpConnection.java Wed May 24 13:07:25 2006 @@ -0,0 +1,16 @@ +package org.apache.xmlrpc.server; + +import org.apache.xmlrpc.common.ServerStreamConnection; + + +/** Interface of a [EMAIL PROTECTED] ServerStreamConnection} for HTTP + * response transport. + */ +public interface ServerHttpConnection extends ServerStreamConnection { + /** Sets a response header. + */ + void setResponseHeader(String pKey, String pValue); + /** Sets the content length. + */ + void setContentLength(int pContentLength); +} Modified: webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcLocalStreamServer.java URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcLocalStreamServer.java?rev=409238&r1=409237&r2=409238&view=diff ============================================================================== --- webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcLocalStreamServer.java (original) +++ webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcLocalStreamServer.java Wed May 24 13:07:25 2006 @@ -1,8 +1,6 @@ package org.apache.xmlrpc.server; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; import org.apache.xmlrpc.XmlRpcException; @@ -20,20 +18,5 @@ public Object execute(XmlRpcRequest pRequest) throws XmlRpcException { XmlRpcRequestProcessor server = ((XmlRpcRequestProcessorFactory) pRequest.getConfig()).getXmlRpcServer(); return server.execute(pRequest); - } - protected InputStream newInputStream(XmlRpcStreamRequestConfig pConfig, ServerStreamConnection pConnection) throws IOException { - LocalStreamConnection lsc = (LocalStreamConnection) pConnection; - return lsc.getRequest(); - } - protected OutputStream newOutputStream(XmlRpcStreamRequestConfig pConfig, ServerStreamConnection pConnection) throws IOException { - LocalStreamConnection lsc = (LocalStreamConnection) pConnection; - return lsc.getResponse(); - } - protected void closeConnection(ServerStreamConnection pConnection) throws IOException { - LocalStreamConnection lsc = (LocalStreamConnection) pConnection; - final ByteArrayOutputStream istream = lsc.getResponse(); - if (istream != null) { - try { istream.close(); } catch (Throwable ignore) {} - } } } Modified: webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java?rev=409238&r1=409237&r2=409238&view=diff ============================================================================== --- webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java (original) +++ webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java Wed May 24 13:07:25 2006 @@ -125,25 +125,15 @@ return writerFactory; } - /** Returns the connections input stream. - */ - protected abstract InputStream newInputStream(XmlRpcStreamRequestConfig pConfig, - ServerStreamConnection pConnection) throws IOException; - protected InputStream getInputStream(XmlRpcStreamRequestConfig pConfig, ServerStreamConnection pConnection) throws IOException { - InputStream istream = newInputStream(pConfig, pConnection); + InputStream istream = pConnection.newInputStream(); if (pConfig.isEnabledForExtensions() && pConfig.isGzipCompressing()) { istream = new GZIPInputStream(istream); } return istream; } - /** Creates the connections output stream. - */ - protected abstract OutputStream newOutputStream(XmlRpcStreamRequestConfig pConfig, - ServerStreamConnection pConnection) throws IOException; - /** Called to prepare the output stream. Typically used for enabling * compression, or similar filters. */ @@ -162,7 +152,7 @@ protected OutputStream getOutputStream(XmlRpcStreamRequestConfig pConfig, ServerStreamConnection pConnection, int pSize) throws IOException { - return newOutputStream(pConfig, pConnection); + return pConnection.newOutputStream(); } /** Returns, whether the requests content length is required. @@ -171,10 +161,6 @@ return false; } - /** Closes the connection, releasing all resources. - */ - protected abstract void closeConnection(ServerStreamConnection pConnection) throws IOException; - /** Returns, whether the /** Processes a "connection". The "connection" is an opaque object, which is * being handled by the subclasses. @@ -213,7 +199,7 @@ ostream = baos; } else { baos = null; - ostream = newOutputStream(pConfig, pConnection); + ostream = pConnection.newOutputStream(); } ostream = getOutputStream(pConnection, pConfig, ostream); try { @@ -237,13 +223,13 @@ if (dest != null) { try { dest.close(); } catch (Throwable ignore) {} } } } - closeConnection(pConnection); + pConnection.close(); pConnection = null; } catch (IOException e) { throw new XmlRpcException("I/O error while processing request: " + e.getMessage(), e); } finally { - if (pConnection != null) { try { closeConnection(pConnection); } catch (Throwable ignore) {} } + if (pConnection != null) { try { pConnection.close(); } catch (Throwable ignore) {} } } log.debug("execute: <-"); } Modified: webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/Connection.java URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/Connection.java?rev=409238&r1=409237&r2=409238&view=diff ============================================================================== --- webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/Connection.java (original) +++ webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/Connection.java Wed May 24 13:07:25 2006 @@ -30,7 +30,6 @@ import org.apache.xmlrpc.common.ServerStreamConnection; import org.apache.xmlrpc.common.XmlRpcHttpRequestConfig; import org.apache.xmlrpc.common.XmlRpcNotAuthorizedException; -import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig; import org.apache.xmlrpc.server.XmlRpcHttpServerConfig; import org.apache.xmlrpc.server.XmlRpcStreamServer; import org.apache.xmlrpc.util.HttpUtil; @@ -81,6 +80,7 @@ private final XmlRpcStreamServer server; private byte[] buffer; private Map headers; + private RequestData requestData; /** Creates a new webserver connection on the given socket. * @param pWebServer The webserver maintaining this connection. @@ -113,14 +113,14 @@ * @throws IOException Reading the request headers failed. */ private RequestData getRequestConfig() throws IOException { - RequestData result = new RequestData(this); + requestData = new RequestData(this); if (headers != null) { headers.clear(); } XmlRpcHttpServerConfig serverConfig = (XmlRpcHttpServerConfig) server.getConfig(); - result.setBasicEncoding(serverConfig.getBasicEncoding()); - result.setContentLengthOptional(serverConfig.isContentLengthOptional()); - result.setEnabledForExtensions(serverConfig.isEnabledForExtensions()); + requestData.setBasicEncoding(serverConfig.getBasicEncoding()); + requestData.setContentLengthOptional(serverConfig.isContentLengthOptional()); + requestData.setEnabledForExtensions(serverConfig.isEnabledForExtensions()); // reset user authentication String line = readLine(); @@ -138,11 +138,11 @@ if (!"POST".equalsIgnoreCase(method)) { throw new BadRequestException(method); } - result.setMethod(method); + requestData.setMethod(method); tokens.nextToken(); // Skip URI String httpVersion = tokens.nextToken(); - result.setHttpVersion(httpVersion); - result.setKeepAlive(serverConfig.isKeepAliveEnabled() + requestData.setHttpVersion(httpVersion); + requestData.setKeepAlive(serverConfig.isKeepAliveEnabled() && WebServer.HTTP_11.equals(httpVersion)); do { line = readLine(); @@ -150,19 +150,19 @@ String lineLower = line.toLowerCase(); if (lineLower.startsWith("content-length:")) { String cLength = line.substring("content-length:".length()); - result.setContentLength(Integer.parseInt(cLength.trim())); + requestData.setContentLength(Integer.parseInt(cLength.trim())); } else if (lineLower.startsWith("connection:")) { - result.setKeepAlive(serverConfig.isKeepAliveEnabled() + requestData.setKeepAlive(serverConfig.isKeepAliveEnabled() && lineLower.indexOf("keep-alive") > -1); } else if (lineLower.startsWith("authorization:")) { String credentials = line.substring("authorization:".length()); - HttpUtil.parseAuthorization(result, credentials); + HttpUtil.parseAuthorization(requestData, credentials); } } } while (line != null && line.length() != 0); - return result; + return requestData; } public void run() { @@ -206,38 +206,6 @@ return new String(buffer, 0, count, US_ASCII); } - /** Returns the contents input stream. - * @param pData The request data - * @return The contents input stream. - */ - public InputStream getInputStream(RequestData pData) { - int contentLength = pData.getContentLength(); - if (contentLength == -1) { - return input; - } else { - return new LimitedInputStream(input, contentLength); - } - } - - /** Returns the output stream for writing the response. - * @param pConfig The request configuration. - * @return The response output stream. - */ - public OutputStream getOutputStream(XmlRpcStreamRequestConfig pConfig) { - boolean useContentLength; - if (pConfig instanceof XmlRpcHttpRequestConfig) { - useContentLength = !pConfig.isEnabledForExtensions() - || !((XmlRpcHttpRequestConfig) pConfig).isContentLengthOptional(); - } else { - useContentLength = true; - } - if (useContentLength) { - return new ByteArrayOutputStream(); - } else { - return output; - } - } - /** Writes the response header and the response to the * output stream. * @param pData The request data. @@ -337,5 +305,29 @@ */ public void setResponseHeader(String pHeader, String pValue) { headers.put(pHeader, pValue); + } + + + public OutputStream newOutputStream() throws IOException { + boolean useContentLength; + useContentLength = !requestData.isEnabledForExtensions() + || !((XmlRpcHttpRequestConfig) requestData).isContentLengthOptional(); + if (useContentLength) { + return new ByteArrayOutputStream(); + } else { + return output; + } + } + + public InputStream newInputStream() throws IOException { + int contentLength = requestData.getContentLength(); + if (contentLength == -1) { + return input; + } else { + return new LimitedInputStream(input, contentLength); + } + } + + public void close() throws IOException { } } Modified: webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/ConnectionServer.java URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/ConnectionServer.java?rev=409238&r1=409237&r2=409238&view=diff ============================================================================== --- webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/ConnectionServer.java (original) +++ webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/ConnectionServer.java Wed May 24 13:07:25 2006 @@ -59,17 +59,6 @@ } } - protected InputStream newInputStream(XmlRpcStreamRequestConfig pConfig, ServerStreamConnection pConnection) throws IOException { - return ((Connection) pConnection).getInputStream((RequestData) pConfig); - } - - protected OutputStream newOutputStream(XmlRpcStreamRequestConfig pConfig, ServerStreamConnection pConnection) throws IOException { - return ((Connection) pConnection).getOutputStream(pConfig); - } - - protected void closeConnection(ServerStreamConnection pConnection) throws IOException { - } - protected void setResponseHeader(ServerStreamConnection pConnection, String pHeader, String pValue) { ((Connection) pConnection).setResponseHeader(pHeader, pValue); } Modified: webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/XmlRpcServletServer.java URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/XmlRpcServletServer.java?rev=409238&r1=409237&r2=409238&view=diff ============================================================================== --- webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/XmlRpcServletServer.java (original) +++ webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/XmlRpcServletServer.java Wed May 24 13:07:25 2006 @@ -52,7 +52,20 @@ /** Returns the servlet response. */ public HttpServletResponse getResponse() { return response; } - } + + public InputStream newInputStream() throws IOException { + return request.getInputStream(); + } + + public OutputStream newOutputStream() throws IOException { + response.setContentType("text/xml"); + return response.getOutputStream(); + } + + public void close() throws IOException { + response.getOutputStream().close(); + } + } protected XmlRpcHttpRequestConfigImpl newConfig() { return new XmlRpcHttpRequestConfigImpl(); @@ -103,18 +116,6 @@ return !((XmlRpcHttpServerConfig) getConfig()).isContentLengthOptional(); } - protected InputStream newInputStream(XmlRpcStreamRequestConfig pConfig, - ServerStreamConnection pConnection) throws IOException { - return ((ServletStreamConnection) pConnection).getRequest().getInputStream(); - } - - protected OutputStream newOutputStream(XmlRpcStreamRequestConfig pConfig, - ServerStreamConnection pConnection) throws IOException { - HttpServletResponse response = ((ServletStreamConnection) pConnection).getResponse(); - response.setContentType("text/xml"); - return response.getOutputStream(); - } - protected OutputStream getOutputStream(XmlRpcStreamRequestConfig pConfig, ServerStreamConnection pConnection, int pSize) throws IOException { @@ -122,10 +123,6 @@ ((ServletStreamConnection) pConnection).getResponse().setContentLength(pSize); } return super.getOutputStream(pConfig, pConnection, pSize); - } - - protected void closeConnection(ServerStreamConnection pConnection) throws IOException { - ((ServletStreamConnection) pConnection).getResponse().getOutputStream().close(); } protected void setResponseHeader(ServerStreamConnection pConnection, String pHeader, String pValue) { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]