
Author: ceki Date: Fri Jan 25 12:21:19 2008 New Revision: 1609 Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessEvent.java logback/trunk/logback-access/src/test/java/ch/qos/logback/access/dummy/DummyResponse.java logback/trunk/logback-access/src/test/java/ch/qos/logback/access/spi/AccessEventTest.java Log: - bug 109 (corrected, with test case showing correct survival of AccessEvent fields values) Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessEvent.java ============================================================================== --- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessEvent.java (original) +++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessEvent.java Fri Jan 25 12:21:19 2008 @@ -2,7 +2,6 @@ import java.io.Serializable; import java.util.ArrayList; -import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.List; @@ -40,7 +39,7 @@ private transient final HttpServletRequest httpRequest; private transient final HttpServletResponse httpResponse; - + String requestURI; String requestURL; String remoteHost; @@ -55,7 +54,7 @@ Map<String, String> requestHeaderMap; Map<String, String[]> requestParameterMap; Map<String, String> responseHeaderMap; - + long contentLength = SENTINEL; int statusCode = SENTINEL; int localPort = SENTINEL; @@ -226,7 +225,7 @@ return list.elements(); } return httpRequest.getHeaderNames(); - + } public Map<String, String> getRequestHeaderMap() { @@ -427,35 +426,30 @@ } public String getResponseHeader(String key) { - synchronized (responseHeaderMap) { - if (responseHeaderMap == null) { - responseHeaderMap = serverAdapter.builResponseHeaderMap(); - } - return responseHeaderMap.get(key); + buildResponseHeaderMap(); + return responseHeaderMap.get(key); + } + + void buildResponseHeaderMap() { + if (responseHeaderMap == null) { + responseHeaderMap = serverAdapter.builResponseHeaderMap(); } } public Map<String, String> getResponseHeaderMap() { - synchronized (responseHeaderMap) { - if (responseHeaderMap == null) { - responseHeaderMap = serverAdapter.builResponseHeaderMap(); - } - return responseHeaderMap; - } + buildResponseHeaderMap(); + return responseHeaderMap; } public List<String> getResponseHeaderNameList() { - synchronized (responseHeaderMap) { - if (responseHeaderMap == null) { - responseHeaderMap = serverAdapter.builResponseHeaderMap(); - } - return new ArrayList<String>(responseHeaderMap.keySet()); - } + buildResponseHeaderMap(); + return new ArrayList<String>(responseHeaderMap.keySet()); } - + public void prepareForDeferredProcessing() { buildRequestHeaderMap(); buildRequestParameterMap(); + buildResponseHeaderMap(); getLocalPort(); getMethod(); getProtocol(); Modified: logback/trunk/logback-access/src/test/java/ch/qos/logback/access/dummy/DummyResponse.java ============================================================================== --- logback/trunk/logback-access/src/test/java/ch/qos/logback/access/dummy/DummyResponse.java (original) +++ logback/trunk/logback-access/src/test/java/ch/qos/logback/access/dummy/DummyResponse.java Fri Jan 25 12:21:19 2008 @@ -12,17 +12,23 @@ public class DummyResponse implements HttpServletResponse { - int status; + public static final int DUMMY_DEFAULT_STATUS = 200; + public static final int DUMMY_DEFAULT_CONTENT_COUNT = 1000; + public static final Map<String, String> DUMMY_DEFAULT_HDEADER_MAP = new HashMap<String, String>();; + + static { + DUMMY_DEFAULT_HDEADER_MAP.put("headerName1", "headerValue1"); + DUMMY_DEFAULT_HDEADER_MAP.put("headerName2", "headerValue2"); + } + + int status = DUMMY_DEFAULT_STATUS ; public Map<String, String> headerMap; public DummyResponse() { - headerMap = new HashMap<String, String>(); - headerMap.put("headerName1", "headerValue1"); - headerMap.put("headerName2", "headerValue2"); + headerMap = DUMMY_DEFAULT_HDEADER_MAP; } public void addCookie(Cookie arg0) { - } public void addDateHeader(String arg0, long arg1) { @@ -132,7 +138,7 @@ } public long getContentCount() { - return 10000L; + return DUMMY_DEFAULT_CONTENT_COUNT; } public int getStatus() { Modified: logback/trunk/logback-access/src/test/java/ch/qos/logback/access/spi/AccessEventTest.java ============================================================================== --- logback/trunk/logback-access/src/test/java/ch/qos/logback/access/spi/AccessEventTest.java (original) +++ logback/trunk/logback-access/src/test/java/ch/qos/logback/access/spi/AccessEventTest.java Fri Jan 25 12:21:19 2008 @@ -8,10 +8,12 @@ import junit.framework.TestCase; import ch.qos.logback.access.dummy.DummyAccessEventBuilder; +import ch.qos.logback.access.dummy.DummyResponse; public class AccessEventTest extends TestCase { - private Object buildSerializedAccessEvent() throws IOException, ClassNotFoundException{ + private Object buildSerializedAccessEvent() throws IOException, + ClassNotFoundException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); AccessEvent ae = DummyAccessEventBuilder.buildNewAccessEvent(); @@ -26,19 +28,23 @@ return ois.readObject(); } - public void testSerialization() throws IOException, ClassNotFoundException { Object o = buildSerializedAccessEvent(); assertNotNull(o); AccessEvent aeBack = (AccessEvent) o; - aeBack.getRequestHeaderNames(); - aeBack.getResponseHeader("x"); - aeBack.getResponseHeaderNameList(); - aeBack.getContentLength(); - aeBack.getStatusCode(); - - + assertEquals(DummyResponse.DUMMY_DEFAULT_HDEADER_MAP, aeBack + .getResponseHeaderMap()); + assertEquals(DummyResponse.DUMMY_DEFAULT_HDEADER_MAP.get("x"), aeBack + .getResponseHeader("x")); + assertEquals(DummyResponse.DUMMY_DEFAULT_HDEADER_MAP.get("headerName1"), + aeBack.getResponseHeader("headerName1")); + assertEquals(DummyResponse.DUMMY_DEFAULT_HDEADER_MAP.size(), aeBack + .getResponseHeaderNameList().size()); + assertEquals(DummyResponse.DUMMY_DEFAULT_CONTENT_COUNT, aeBack + .getContentLength()); + assertEquals(DummyResponse.DUMMY_DEFAULT_STATUS, aeBack.getStatusCode()); + } }