Author: olegk
Date: Sun Oct 11 11:26:16 2009
New Revision: 824053
URL: http://svn.apache.org/viewvc?rev=824053&view=rev
Log:
More reliable HTTP header logging and additional option for a full wire logging
(everything that gets written to and read from the underlying socket)
Added:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
(with props)
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
(with props)
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
(with props)
Removed:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientIOTarget.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerIOTarget.java
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingIOSession.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientHandler.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServiceHandler.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingUtils.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainClientIOEventDispatch.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainServerIOEventDispatch.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLClientIOEventDispatch.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLServerIOEventDispatch.java
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingIOSession.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingIOSession.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingIOSession.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingIOSession.java
Sun Oct 11 11:26:16 2009
@@ -34,16 +34,21 @@
* Decorator class intended to transparently extend an {...@link IOSession}
* with basic event logging capabilities using Commons Logging.
*/
-public class LoggingIOSession implements IOSession {
+class LoggingIOSession implements IOSession {
private static AtomicLong COUNT = new AtomicLong(0);
private final Log log;
+ private final Wire wirelog;
private final IOSession session;
private final ByteChannel channel;
private final String id;
- public LoggingIOSession(final Log log, final IOSession session, final
String id) {
+ public LoggingIOSession(
+ final Log log,
+ final Log wirelog,
+ final IOSession session,
+ final String id) {
super();
if (session == null) {
throw new IllegalArgumentException("I/O session may not be null");
@@ -51,11 +56,8 @@
this.session = session;
this.channel = new LoggingByteChannel();
this.id = id + "-" + COUNT.incrementAndGet();
- if (log != null) {
- this.log = log;
- } else {
- this.log = LogFactory.getLog(session.getClass());
- }
+ this.log = LogFactory.getLog(session.getClass());
+ this.wirelog = new Wire(wirelog);
}
public int getStatus() {
@@ -190,6 +192,13 @@
if (log.isDebugEnabled()) {
log.debug("I/O session " + id + " " + session + ": " +
bytesRead + " bytes read");
}
+ if (bytesRead > 0 && wirelog.isEnabled()) {
+ ByteBuffer b = dst.duplicate();
+ int p = b.position();
+ b.limit(p);
+ b.position(p - bytesRead);
+ wirelog.input(b);
+ }
return bytesRead;
}
@@ -198,6 +207,13 @@
if (log.isDebugEnabled()) {
log.debug("I/O session " + id + " " + session + ": " +
byteWritten + " bytes written");
}
+ if (byteWritten > 0 && wirelog.isEnabled()) {
+ ByteBuffer b = src.duplicate();
+ int p = b.position();
+ b.limit(p);
+ b.position(p - byteWritten);
+ wirelog.output(b);
+ }
return byteWritten;
}
Added:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java?rev=824053&view=auto
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
(added)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
Sun Oct 11 11:26:16 2009
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.synapse.transport.nhttp;
+
+import java.io.IOException;
+import java.nio.channels.ReadableByteChannel;
+
+import org.apache.commons.logging.Log;
+import org.apache.http.Header;
+import org.apache.http.HttpException;
+import org.apache.http.HttpMessage;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpResponseFactory;
+import org.apache.http.impl.nio.DefaultNHttpClientConnection;
+import org.apache.http.nio.NHttpClientHandler;
+import org.apache.http.nio.NHttpMessageParser;
+import org.apache.http.nio.NHttpMessageWriter;
+import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.reactor.SessionInputBuffer;
+import org.apache.http.nio.reactor.SessionOutputBuffer;
+import org.apache.http.nio.util.ByteBufferAllocator;
+import org.apache.http.params.HttpParams;
+
+class LoggingNHttpClientConnection extends DefaultNHttpClientConnection {
+
+ private final Log log;
+ private final Log headerlog;
+
+ public LoggingNHttpClientConnection(
+ final Log log,
+ final Log headerlog,
+ final IOSession iosession,
+ final HttpResponseFactory responseFactory,
+ final ByteBufferAllocator allocator,
+ final HttpParams params) {
+ super(iosession, responseFactory, allocator, params);
+ this.log = log;
+ this.headerlog = headerlog;
+ }
+
+ @Override
+ public void close() throws IOException {
+ this.log.debug("Close connection");
+ super.close();
+ }
+
+ @Override
+ public void shutdown() throws IOException {
+ this.log.debug("Shutdown connection");
+ super.shutdown();
+ }
+
+ @Override
+ public void submitRequest(final HttpRequest request) throws IOException,
HttpException {
+ if (this.log.isDebugEnabled()) {
+ this.log.debug("HTTP connection " + this + ": " +
request.getRequestLine().toString());
+ }
+ super.submitRequest(request);
+ }
+
+ @Override
+ public void consumeInput(final NHttpClientHandler handler) {
+ this.log.debug("Consume input");
+ super.consumeInput(handler);
+ }
+
+ @Override
+ public void produceOutput(final NHttpClientHandler handler) {
+ this.log.debug("Produce output");
+ super.produceOutput(handler);
+ }
+
+ @Override
+ protected NHttpMessageWriter createRequestWriter(
+ final SessionOutputBuffer buffer,
+ final HttpParams params) {
+ return new LoggingNHttpMessageWriter(
+ super.createRequestWriter(buffer, params));
+ }
+
+ @Override
+ protected NHttpMessageParser createResponseParser(
+ final SessionInputBuffer buffer,
+ final HttpResponseFactory responseFactory,
+ final HttpParams params) {
+ return new LoggingNHttpMessageParser(
+ super.createResponseParser(buffer, responseFactory, params));
+ }
+
+ class LoggingNHttpMessageWriter implements NHttpMessageWriter {
+
+ private final NHttpMessageWriter writer;
+
+ public LoggingNHttpMessageWriter(final NHttpMessageWriter writer) {
+ super();
+ this.writer = writer;
+ }
+
+ public void reset() {
+ this.writer.reset();
+ }
+
+ public void write(final HttpMessage message) throws IOException,
HttpException {
+ if (message != null && headerlog.isDebugEnabled()) {
+ HttpRequest request = (HttpRequest) message;
+ headerlog.debug(">> " + request.getRequestLine().toString());
+ Header[] headers = request.getAllHeaders();
+ for (int i = 0; i < headers.length; i++) {
+ headerlog.debug(">> " + headers[i].toString());
+ }
+ }
+ this.writer.write(message);
+ }
+
+ }
+
+ class LoggingNHttpMessageParser implements NHttpMessageParser {
+
+ private final NHttpMessageParser parser;
+
+ public LoggingNHttpMessageParser(final NHttpMessageParser parser) {
+ super();
+ this.parser = parser;
+ }
+
+ public void reset() {
+ this.parser.reset();
+ }
+
+ public int fillBuffer(final ReadableByteChannel channel) throws
IOException {
+ return this.parser.fillBuffer(channel);
+ }
+
+ public HttpMessage parse() throws IOException, HttpException {
+ HttpMessage message = this.parser.parse();
+ if (message != null && headerlog.isDebugEnabled()) {
+ HttpResponse response = (HttpResponse) message;
+ headerlog.debug("<< " + response.getStatusLine().toString());
+ Header[] headers = response.getAllHeaders();
+ for (int i = 0; i < headers.length; i++) {
+ headerlog.debug("<< " + headers[i].toString());
+ }
+ }
+ return message;
+ }
+
+ }
+
+}
Propchange:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientHandler.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientHandler.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientHandler.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientHandler.java
Sun Oct 11 11:26:16 2009
@@ -22,7 +22,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.nio.ContentDecoder;
@@ -34,31 +33,20 @@
* Decorator class intended to transparently extend an {...@link
NHttpClientHandler}
* with basic event logging capabilities using Commons Logging.
*/
-public class LoggingNHttpClientHandler implements NHttpClientHandler {
+class LoggingNHttpClientHandler implements NHttpClientHandler {
private final Log log;
- private final Log headerlog;
private final NHttpClientHandler handler;
public LoggingNHttpClientHandler(
final Log log,
- final Log headerlog,
final NHttpClientHandler handler) {
super();
if (handler == null) {
throw new IllegalArgumentException("HTTP client handler may not be
null");
}
this.handler = handler;
- if (log != null) {
- this.log = log;
- } else {
- this.log = LogFactory.getLog(handler.getClass());
- }
- if (log != null) {
- this.headerlog = headerlog;
- } else {
- this.headerlog = LogFactory.getLog(LoggingUtils.HEADER_LOG_ID);
- }
+ this.log = LogFactory.getLog(handler.getClass());
}
public void connected(final NHttpClientConnection conn, final Object
attachment) {
@@ -109,13 +97,6 @@
+ response.getStatusLine() + getRequestMessageID(conn));
}
this.handler.responseReceived(conn);
- if (this.headerlog.isDebugEnabled()) {
- this.headerlog.debug("<< " + response.getStatusLine().toString());
- Header[] headers = response.getAllHeaders();
- for (int i = 0; i < headers.length; i++) {
- this.headerlog.debug("<< " + headers[i].toString());
- }
- }
}
public void inputReady(final NHttpClientConnection conn, final
ContentDecoder decoder) {
Added:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java?rev=824053&view=auto
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
(added)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
Sun Oct 11 11:26:16 2009
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.synapse.transport.nhttp;
+
+import java.io.IOException;
+import java.nio.channels.ReadableByteChannel;
+
+import org.apache.commons.logging.Log;
+import org.apache.http.Header;
+import org.apache.http.HttpException;
+import org.apache.http.HttpMessage;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpRequestFactory;
+import org.apache.http.HttpResponse;
+import org.apache.http.impl.nio.DefaultNHttpServerConnection;
+import org.apache.http.nio.NHttpMessageParser;
+import org.apache.http.nio.NHttpMessageWriter;
+import org.apache.http.nio.NHttpServiceHandler;
+import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.reactor.SessionInputBuffer;
+import org.apache.http.nio.reactor.SessionOutputBuffer;
+import org.apache.http.nio.util.ByteBufferAllocator;
+import org.apache.http.params.HttpParams;
+
+class LoggingNHttpServerConnection extends DefaultNHttpServerConnection {
+
+ private final Log log;
+ private final Log headerlog;
+
+ public LoggingNHttpServerConnection(
+ final Log log,
+ final Log headerlog,
+ final IOSession session,
+ final HttpRequestFactory requestFactory,
+ final ByteBufferAllocator allocator,
+ final HttpParams params) {
+ super(session, requestFactory, allocator, params);
+ this.log = log;
+ this.headerlog = headerlog;
+ }
+
+ @Override
+ public void close() throws IOException {
+ this.log.debug("Close connection");
+ super.close();
+ }
+
+ @Override
+ public void shutdown() throws IOException {
+ this.log.debug("Shutdown connection");
+ super.shutdown();
+ }
+
+ @Override
+ public void submitResponse(final HttpResponse response) throws
IOException, HttpException {
+ if (this.log.isDebugEnabled()) {
+ this.log.debug("HTTP connection " + this + ": " +
response.getStatusLine().toString());
+ }
+ super.submitResponse(response);
+ }
+
+ @Override
+ public void consumeInput(final NHttpServiceHandler handler) {
+ this.log.debug("Consume input");
+ super.consumeInput(handler);
+ }
+
+ @Override
+ public void produceOutput(final NHttpServiceHandler handler) {
+ this.log.debug("Produce output");
+ super.produceOutput(handler);
+ }
+
+ @Override
+ protected NHttpMessageWriter createResponseWriter(
+ final SessionOutputBuffer buffer,
+ final HttpParams params) {
+ return new LoggingNHttpMessageWriter(
+ super.createResponseWriter(buffer, params));
+ }
+
+ @Override
+ protected NHttpMessageParser createRequestParser(
+ final SessionInputBuffer buffer,
+ final HttpRequestFactory requestFactory,
+ final HttpParams params) {
+ return new LoggingNHttpMessageParser(
+ super.createRequestParser(buffer, requestFactory, params));
+ }
+
+ class LoggingNHttpMessageWriter implements NHttpMessageWriter {
+
+ private final NHttpMessageWriter writer;
+
+ public LoggingNHttpMessageWriter(final NHttpMessageWriter writer) {
+ super();
+ this.writer = writer;
+ }
+
+ public void reset() {
+ this.writer.reset();
+ }
+
+ public void write(final HttpMessage message) throws IOException,
HttpException {
+ if (message != null && headerlog.isDebugEnabled()) {
+ HttpResponse response = (HttpResponse) message;
+ headerlog.debug("<< " + response.getStatusLine().toString());
+ Header[] headers = response.getAllHeaders();
+ for (int i = 0; i < headers.length; i++) {
+ headerlog.debug("<< " + headers[i].toString());
+ }
+ }
+ this.writer.write(message);
+ }
+
+ }
+
+ class LoggingNHttpMessageParser implements NHttpMessageParser {
+
+ private final NHttpMessageParser parser;
+
+ public LoggingNHttpMessageParser(final NHttpMessageParser parser) {
+ super();
+ this.parser = parser;
+ }
+
+ public void reset() {
+ this.parser.reset();
+ }
+
+ public int fillBuffer(final ReadableByteChannel channel) throws
IOException {
+ return this.parser.fillBuffer(channel);
+ }
+
+ public HttpMessage parse() throws IOException, HttpException {
+ HttpMessage message = this.parser.parse();
+ if (message != null && headerlog.isDebugEnabled()) {
+ HttpRequest request = (HttpRequest) message;
+ headerlog.debug(">> " + request.getRequestLine().toString());
+ Header[] headers = request.getAllHeaders();
+ for (int i = 0; i < headers.length; i++) {
+ headerlog.debug(">> " + headers[i].toString());
+ }
+ }
+ return message;
+ }
+
+ }
+
+}
\ No newline at end of file
Propchange:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServiceHandler.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServiceHandler.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServiceHandler.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServiceHandler.java
Sun Oct 11 11:26:16 2009
@@ -22,7 +22,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.ConnectionClosedException;
@@ -35,31 +34,20 @@
* Decorator class intended to transparently extend an {...@link
NHttpServiceHandler}
* with basic event logging capabilities using Commons Logging.
*/
-public class LoggingNHttpServiceHandler implements NHttpServiceHandler {
+class LoggingNHttpServiceHandler implements NHttpServiceHandler {
private final Log log;
- private final Log headerlog;
private final NHttpServiceHandler handler;
public LoggingNHttpServiceHandler(
final Log log,
- final Log headerlog,
final NHttpServiceHandler handler) {
super();
if (handler == null) {
throw new IllegalArgumentException("HTTP service handler may not
be null");
}
this.handler = handler;
- if (log != null) {
- this.log = log;
- } else {
- this.log = LogFactory.getLog(handler.getClass());
- }
- if (log != null) {
- this.headerlog = headerlog;
- } else {
- this.headerlog = LogFactory.getLog(LoggingUtils.HEADER_LOG_ID);
- }
+ this.log = LogFactory.getLog(handler.getClass());
}
public void connected(final NHttpServerConnection conn) {
@@ -101,13 +89,6 @@
this.log.debug("HTTP connection " + conn + ": " +
request.getRequestLine());
}
this.handler.requestReceived(conn);
- if (this.headerlog.isDebugEnabled()) {
- this.headerlog.debug(">> " + request.getRequestLine().toString());
- Header[] headers = request.getAllHeaders();
- for (int i = 0; i < headers.length; i++) {
- this.headerlog.debug(">> " + headers[i].toString());
- }
- }
}
public void outputReady(final NHttpServerConnection conn, final
ContentEncoder encoder) {
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingUtils.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingUtils.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingUtils.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingUtils.java
Sun Oct 11 11:26:16 2009
@@ -21,58 +21,94 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpRequestFactory;
+import org.apache.http.HttpResponseFactory;
+import org.apache.http.impl.nio.DefaultNHttpClientConnection;
+import org.apache.http.impl.nio.DefaultNHttpServerConnection;
import org.apache.http.nio.NHttpClientHandler;
import org.apache.http.nio.NHttpClientIOTarget;
import org.apache.http.nio.NHttpServerIOTarget;
import org.apache.http.nio.NHttpServiceHandler;
import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.util.ByteBufferAllocator;
+import org.apache.http.params.HttpParams;
-public class LoggingUtils {
+class LoggingUtils {
public final static String HEADER_LOG_ID =
"org.apache.synapse.transport.nhttp.headers";
+ public final static String WIRE_LOG_ID =
"org.apache.synapse.transport.nhttp.wire";
public static IOSession decorate(IOSession session, final String id) {
Log log = LogFactory.getLog(session.getClass());
- if (log.isDebugEnabled()) {
- session = new LoggingIOSession(log, session, id);
+ Log wirelog = LogFactory.getLog(WIRE_LOG_ID);
+ if (wirelog.isDebugEnabled() || log.isDebugEnabled()) {
+ session = new LoggingIOSession(log, wirelog, session, id);
}
return session;
}
- public static NHttpClientIOTarget decorate(NHttpClientIOTarget target) {
- Log log = LogFactory.getLog(target.getClass());
- Log headerlog = LogFactory.getLog(HEADER_LOG_ID);
- if (log.isDebugEnabled() || headerlog.isDebugEnabled()) {
- target = new LoggingNHttpClientIOTarget(log, headerlog, target);
- }
- return target;
- }
-
- public static NHttpServerIOTarget decorate(NHttpServerIOTarget target) {
- Log log = LogFactory.getLog(target.getClass());
- Log headerlog = LogFactory.getLog(HEADER_LOG_ID);
- if (log.isDebugEnabled() || headerlog.isDebugEnabled()) {
- target = new LoggingNHttpServerIOTarget(log, headerlog, target);
- }
- return target;
- }
-
public static NHttpClientHandler decorate(NHttpClientHandler handler) {
Log log = LogFactory.getLog(handler.getClass());
- Log headerlog = LogFactory.getLog(HEADER_LOG_ID);
- if (log.isDebugEnabled() || headerlog.isDebugEnabled()) {
- handler = new LoggingNHttpClientHandler(log, headerlog, handler);
+ if (log.isDebugEnabled()) {
+ handler = new LoggingNHttpClientHandler(log, handler);
}
return handler;
}
public static NHttpServiceHandler decorate(NHttpServiceHandler handler) {
Log log = LogFactory.getLog(handler.getClass());
- Log headerlog = LogFactory.getLog(HEADER_LOG_ID);
- if (log.isDebugEnabled() || headerlog.isDebugEnabled()) {
- handler = new LoggingNHttpServiceHandler(log, headerlog, handler);
+ if (log.isDebugEnabled()) {
+ handler = new LoggingNHttpServiceHandler(log, handler);
}
return handler;
}
+ public static NHttpClientIOTarget createClientConnection(
+ final IOSession iosession,
+ final HttpResponseFactory responseFactory,
+ final ByteBufferAllocator allocator,
+ final HttpParams params) {
+ Log log = LogFactory.getLog(DefaultNHttpClientConnection.class);
+ Log headerlog = LogFactory.getLog(HEADER_LOG_ID);
+ if (headerlog.isDebugEnabled() || log.isDebugEnabled()) {
+ return new LoggingNHttpClientConnection(
+ log,
+ headerlog,
+ iosession,
+ responseFactory,
+ allocator,
+ params);
+ } else {
+ return new DefaultNHttpClientConnection(
+ iosession,
+ responseFactory,
+ allocator,
+ params);
+ }
+ }
+
+ public static NHttpServerIOTarget createServerConnection(
+ final IOSession iosession,
+ final HttpRequestFactory requestFactory,
+ final ByteBufferAllocator allocator,
+ final HttpParams params) {
+ Log log = LogFactory.getLog(DefaultNHttpClientConnection.class);
+ Log headerlog = LogFactory.getLog(HEADER_LOG_ID);
+ if (headerlog.isDebugEnabled() || log.isDebugEnabled()) {
+ return new LoggingNHttpServerConnection(
+ log,
+ headerlog,
+ iosession,
+ requestFactory,
+ allocator,
+ params);
+ } else {
+ return new DefaultNHttpServerConnection(
+ iosession,
+ requestFactory,
+ allocator,
+ params);
+ }
+ }
+
}
\ No newline at end of file
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainClientIOEventDispatch.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainClientIOEventDispatch.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainClientIOEventDispatch.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainClientIOEventDispatch.java
Sun Oct 11 11:26:16 2009
@@ -32,8 +32,12 @@
@Override
protected NHttpClientIOTarget createConnection(IOSession session) {
- return LoggingUtils.decorate(
- super.createConnection(LoggingUtils.decorate(session,
"client")));
+ session = LoggingUtils.decorate(session, "client");
+ return LoggingUtils.createClientConnection(
+ session,
+ createHttpResponseFactory(),
+ this.allocator,
+ this.params);
}
}
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainServerIOEventDispatch.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainServerIOEventDispatch.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainServerIOEventDispatch.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainServerIOEventDispatch.java
Sun Oct 11 11:26:16 2009
@@ -31,9 +31,13 @@
}
@Override
- protected NHttpServerIOTarget createConnection(final IOSession session) {
- return LoggingUtils.decorate(
- super.createConnection(LoggingUtils.decorate(session,
"server")));
+ protected NHttpServerIOTarget createConnection(IOSession session) {
+ session = LoggingUtils.decorate(session, "server");
+ return LoggingUtils.createServerConnection(
+ session,
+ createHttpRequestFactory(),
+ this.allocator,
+ this.params);
}
}
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLClientIOEventDispatch.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLClientIOEventDispatch.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLClientIOEventDispatch.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLClientIOEventDispatch.java
Sun Oct 11 11:26:16 2009
@@ -71,8 +71,12 @@
}
protected NHttpClientIOTarget createConnection(IOSession session) {
- return LoggingUtils.decorate(
- super.createConnection(LoggingUtils.decorate(session,
"sslclient")));
+ session = LoggingUtils.decorate(session, "sslclient");
+ return LoggingUtils.createClientConnection(
+ session,
+ createHttpResponseFactory(),
+ createByteBufferAllocator(),
+ this.params);
}
}
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLServerIOEventDispatch.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLServerIOEventDispatch.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLServerIOEventDispatch.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLServerIOEventDispatch.java
Sun Oct 11 11:26:16 2009
@@ -45,9 +45,13 @@
}
@Override
- protected NHttpServerIOTarget createConnection(final IOSession session) {
- return LoggingUtils.decorate(
- super.createConnection(LoggingUtils.decorate(session,
"sslserver")));
+ protected NHttpServerIOTarget createConnection(IOSession session) {
+ session = LoggingUtils.decorate(session, "sslserver");
+ return LoggingUtils.createServerConnection(
+ session,
+ createHttpRequestFactory(),
+ createByteBufferAllocator(),
+ this.params);
}
}
Added:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java?rev=824053&view=auto
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
(added)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
Sun Oct 11 11:26:16 2009
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.synapse.transport.nhttp;
+
+import java.nio.ByteBuffer;
+
+import org.apache.commons.logging.Log;
+
+class Wire {
+
+ private final Log log;
+
+ public Wire(final Log log) {
+ super();
+ this.log = log;
+ }
+
+ private void wire(final String header, final byte[] b, int pos, int off) {
+ StringBuilder buffer = new StringBuilder();
+ for (int i = 0; i < off; i++) {
+ int ch = b[pos + i];
+ if (ch == 13) {
+ buffer.append("[\\r]");
+ } else if (ch == 10) {
+ buffer.append("[\\n]\"");
+ buffer.insert(0, "\"");
+ buffer.insert(0, header);
+ this.log.debug(buffer.toString());
+ buffer.setLength(0);
+ } else if ((ch < 32) || (ch > 127)) {
+ buffer.append("[0x");
+ buffer.append(Integer.toHexString(ch));
+ buffer.append("]");
+ } else {
+ buffer.append((char) ch);
+ }
+ }
+ if (buffer.length() > 0) {
+ buffer.append('\"');
+ buffer.insert(0, '\"');
+ buffer.insert(0, header);
+ this.log.debug(buffer.toString());
+ }
+ }
+
+
+ public boolean isEnabled() {
+ return this.log.isDebugEnabled();
+ }
+
+ public void output(final byte[] b, int pos, int off) {
+ wire("<< ", b, pos, off);
+ }
+
+ public void input(final byte[] b, int pos, int off) {
+ wire(">> ", b, pos, off);
+ }
+
+ public void output(byte[] b) {
+ output(b, 0, b.length);
+ }
+
+ public void input(byte[] b) {
+ input(b, 0, b.length);
+ }
+
+ public void output(int b) {
+ output(new byte[] {(byte) b});
+ }
+
+ public void input(int b) {
+ input(new byte[] {(byte) b});
+ }
+
+ public void output(final ByteBuffer b) {
+ if (b.hasArray()) {
+ output(b.array(), b.arrayOffset() + b.position(), b.remaining());
+ } else {
+ byte[] tmp = new byte[b.remaining()];
+ b.get(tmp);
+ output(tmp);
+ }
+ }
+
+ public void input(final ByteBuffer b) {
+ if (b.hasArray()) {
+ input(b.array(), b.arrayOffset() + b.position(), b.remaining());
+ } else {
+ byte[] tmp = new byte[b.remaining()];
+ b.get(tmp);
+ input(tmp);
+ }
+ }
+
+}
Propchange:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
------------------------------------------------------------------------------
svn:mime-type = text/plain