From 7838fa8cd78427c8571a407d89f23162fbf669f0 Mon Sep 17 00:00:00 2001 From: lauzond Date: Wed, 6 Dec 2006 17:29:30 +0000 Subject: [Bug 164941] The WS-I Logger Drops GET Requests --- .../wst/wsi/internal/core/log/LogBuilder.java | 108 ++++++++---------- .../wsi/internal/core/log/impl/LogReaderImpl.java | 124 ++++++++++++++------- 2 files changed, 135 insertions(+), 97 deletions(-) (limited to 'bundles/org.eclipse.wst.wsi/src') diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/LogBuilder.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/LogBuilder.java index 500da92d8..d34ca77a8 100644 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/LogBuilder.java +++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/LogBuilder.java @@ -103,7 +103,7 @@ public class LogBuilder for (Iterator i = requestResponses.iterator(); i.hasNext();) { RequestHandler rr = (RequestHandler)i.next(); - if ((rr != null) && (!omitRequestResponse(rr))) { + if (rr != null) { try { logRequestResponse(rr); } catch (Exception e) { @@ -132,48 +132,51 @@ public class LogBuilder { byte[] requestHeaderBytes = rr.getRequestHeader(); byte[] responseHeaderBytes = rr.getResponseHeader(); - - if ((requestHeaderBytes != null) && (responseHeaderBytes != null)) + + if ((requestHeaderBytes != null) || (responseHeaderBytes != null)) { - String requestHeader = new String(requestHeaderBytes); - String responseHeader = new String(responseHeaderBytes); + long timestamp = rr.getDate().getTime(); + String localHostAndPort = "localhost:" + rr.getLocalPort(); + String remoteHostAndPort = rr.getRemoteHost() + ":" + rr.getRemotePort(); - byte[] unchunkedRequestBody = rr.getRequestContent(); - byte[] unchunkedResponseBody = rr.getResponseContent(); - - if ((unchunkedRequestBody != null) && (unchunkedResponseBody != null)) + int conversationId = getNextAvailableConversationId(); + try { - long timestamp = rr.getDate().getTime(); - String localHostAndPort = "localhost:" + rr.getLocalPort(); - String remoteHostAndPort = rr.getRemoteHost() + ":" + rr.getRemotePort(); - - int requestId = getNextAvailableId(); - int responseId = getNextAvailableId(); - int conversationId = getNextAvailableConversationId(); - - MessageEntry messageEntryRequest = createMessageEntry(requestId, conversationId, + if (requestHeaderBytes != null) + { + String requestHeader = new String(requestHeaderBytes); + byte[] unchunkedRequestBody = rr.getRequestContent(); + int requestId = getNextAvailableId(); + + MessageEntry messageEntryRequest = createMessageEntry(requestId, conversationId, MessageEntry.TYPE_REQUEST, timestamp, localHostAndPort, remoteHostAndPort, unchunkedRequestBody, requestHeader); - MessageEntry messageEntryResponse = createMessageEntry(responseId, conversationId, - MessageEntry.TYPE_RESPONSE, timestamp + rr.getResponseTime(), remoteHostAndPort, - localHostAndPort, unchunkedResponseBody, responseHeader); - try - { - if ((messageEntryRequest != null) && - (messageEntryResponse != null) && - ((messageEntryRequest.isMimeContent()) || - (isMessageWithBrackets(messageEntryRequest.getMessage())))) + if (messageEntryRequest != null) { log.addLogEntry(messageEntryRequest); - log.addLogEntry(messageEntryResponse); } } - catch (Exception e) + if (responseHeaderBytes != null) { - // ignore the request response pair + String responseHeader = new String(responseHeaderBytes); + byte[] unchunkedResponseBody = rr.getResponseContent(); + int responseId = getNextAvailableId(); + + MessageEntry messageEntryResponse = createMessageEntry(responseId, conversationId, + MessageEntry.TYPE_RESPONSE, timestamp + rr.getResponseTime(), remoteHostAndPort, + localHostAndPort, unchunkedResponseBody, responseHeader); + + if (messageEntryResponse != null) + { + log.addLogEntry(messageEntryResponse); + } } } + catch (Exception e) + { + // ignore the request response pair + } } } } @@ -267,7 +270,14 @@ public class LogBuilder if (mimeParts == null) { // problem creating Mimeparts -- treat it as simple SOAP message - messageEntry.setMessage(new String(messageContent)); + if (messageContent != null) + { + messageEntry.setMessage(new String(messageContent)); + } + else + { + messageEntry.setMessage(""); + } messageEntry.setMimeContent(false); } else @@ -279,7 +289,14 @@ public class LogBuilder else { // Get the message content - messageEntry.setMessage(new String(messageContent)); + if (messageContent != null) + { + messageEntry.setMessage(new String(messageContent)); + } + else + { + messageEntry.setMessage(""); + } messageEntry.setMimeContent(false); } return messageEntry; @@ -314,33 +331,6 @@ public class LogBuilder return result; } - /** - * Check for HTTP messages that should not be logged. - * @param rr: a request-response pair. - * @return true if the request-response pair should be omitted from the log. - */ - private boolean omitRequestResponse(RequestHandler rr) - { - boolean omit = false; - if (rr != null) - { - byte[] requestBytes = rr.getRequestHeader(); - if (requestBytes == null) - return true; - String request = requestBytes.toString(); - if ((request != null) && - ((request.startsWith("CONNECT")) || - (request.startsWith("TRACE")) || - (request.startsWith("DELETE")) || - (request.startsWith("OPTIONS")) || - (request.startsWith("HEAD")))) - { - omit = true; - } - } - return omit; - } - /** * Write log out to file. * @param log: log to be written to file. diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/impl/LogReaderImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/impl/LogReaderImpl.java index f99a6d17f..94e576db8 100644 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/impl/LogReaderImpl.java +++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/impl/LogReaderImpl.java @@ -24,6 +24,7 @@ import org.eclipse.wst.wsi.internal.core.log.MessageEntry; import org.eclipse.wst.wsi.internal.core.log.MessageEntryHandler; import org.eclipse.wst.wsi.internal.core.log.MimePart; import org.eclipse.wst.wsi.internal.core.log.MimeParts; +import org.eclipse.wst.wsi.internal.core.log.RequestHandler; import org.eclipse.wst.wsi.internal.core.monitor.config.Comment; import org.eclipse.wst.wsi.internal.core.monitor.config.impl.CommentImpl; import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext; @@ -559,8 +560,7 @@ public class LogReaderImpl implements LogReader // Add log entry to the list messageEntryList.add(messageEntryRequest); - - // Request is now processed only when the response is received. + // Request is now processed only when the response is received. } else if (MessageEntry.TYPE_RESPONSE.equalsIgnoreCase(type)) @@ -585,7 +585,7 @@ public class LogReaderImpl implements LogReader // ISSUE : need to throw & catch a nullpointerexception in here... MessageEntry messageEntryRequest = findRelatedRequest(messageEntryResponse); - if (messageEntryRequest != null) + if (!omitRequest(messageEntryRequest)) { // Create entry // ADD: Need to create entry from report @@ -604,24 +604,24 @@ public class LogReaderImpl implements LogReader messageEntryResponse); if (requestTargetContext != null) processLogEntry(requestTargetContext); - } - // Create entry - // ADD: Need to create entry from report - //Entry entry = this.reporter.getReport().createEntry(); - Entry entry = new EntryImpl(); - entry.setEntryType( + // Create entry + // ADD: Need to create entry from report + //Entry entry = this.reporter.getReport().createEntry(); + entry = new EntryImpl(); + entry.setEntryType( EntryType.getEntryType(MessageValidator.TYPE_MESSAGE_RESPONSE)); - entry.setReferenceID(messageEntryResponse.getId()); - entry.setEntryDetail(messageEntryResponse); + entry.setReferenceID(messageEntryResponse.getId()); + entry.setEntryDetail(messageEntryResponse); - EntryContext responseTargetContext = - new EntryContext( + EntryContext responseTargetContext = + new EntryContext( entry, messageEntryRequest, messageEntryResponse); - if (responseTargetContext != null) - processLogEntry(responseTargetContext); + if (responseTargetContext != null) + processLogEntry(responseTargetContext); + } } } } @@ -643,15 +643,18 @@ public class LogReaderImpl implements LogReader /* Process all remaining requests in the messageEntryList */ for (int i = 0; i < messageEntryList.size(); i++) { MessageEntry logEntry = (MessageEntry) messageEntryList.get(i); - Entry entry = new EntryImpl(); - entry.setEntryType(EntryType.getEntryType( + if (!omitRequest(logEntry)) + { + Entry entry = new EntryImpl(); + entry.setEntryType(EntryType.getEntryType( MessageValidator.TYPE_MESSAGE_REQUEST)); - entry.setReferenceID(logEntry.getId()); - entry.setEntryDetail(logEntry); - EntryContext requestTargetContext = + entry.setReferenceID(logEntry.getId()); + entry.setEntryDetail(logEntry); + EntryContext requestTargetContext = new EntryContext(entry, logEntry, null); - if (requestTargetContext != null) + if (requestTargetContext != null) processLogEntry(requestTargetContext); + } } } @@ -709,27 +712,30 @@ public class LogReaderImpl implements LogReader // could be made more efficient by keeping a much smaller list of unresponded requests... public MessageEntry findRelatedRequest(MessageEntry logEntryResponse) { - for (int entry = messageEntryList.size() - 1; entry >= 0; entry--) + if (logEntryResponse != null) { - // Get the log entry of the matching request - MessageEntry logEntry = (MessageEntry) messageEntryList.get(entry); - // Ignore own entry - if (!logEntryResponse.equals(logEntry)) + for (int entry = messageEntryList.size() - 1; entry >= 0; entry--) { - if (logEntryResponse - .getConversationId() - .equals(logEntry.getConversationId())) + // Get the log entry of the matching request + MessageEntry logEntry = (MessageEntry) messageEntryList.get(entry); + // Ignore own entry + if (!logEntryResponse.equals(logEntry)) { - // found the most recently read message with the same conversationID. - // From above, this should be the corresponding request. Check as far as possible. - if (logEntry.getType().equals(MessageEntry.TYPE_REQUEST)) + if (logEntryResponse + .getConversationId() + .equals(logEntry.getConversationId())) { - messageEntryList.remove(entry); - return logEntry; - } - else - { - return null; // expected a request. need to throw an exception! + // found the most recently read message with the same conversationID. + // From above, this should be the corresponding request. Check as far as possible. + if (logEntry.getType().equals(MessageEntry.TYPE_REQUEST)) + { + messageEntryList.remove(entry); + return logEntry; + } + else + { + return null; // expected a request. need to throw an exception! + } } } } @@ -794,4 +800,46 @@ public class LogReaderImpl implements LogReader } } //End ContentHandler + + /** + * Check for HTTP messages that should not be logged. + * @param rr: a request-response pair. + * @return true if the request-response pair should be omitted from the log. + */ + private boolean omitRequest(MessageEntry messageEntryRequest) + { + boolean omit = false; + if (messageEntryRequest == null) + omit = true; + else + { + String requestHeaders = messageEntryRequest.getHTTPHeaders(); + if ((requestHeaders != null) && + ((requestHeaders.startsWith("CONNECT")) || + (requestHeaders.startsWith("TRACE")) || + (requestHeaders.startsWith("DELETE")) || + (requestHeaders.startsWith("OPTIONS")) || + (requestHeaders.startsWith("HEAD")) || + ((requestHeaders.startsWith("GET")) && + (!isMessageWithBrackets(messageEntryRequest.getMessage()))))) + { + omit = true; + } + } + return omit; + } + + /** + * Returns true if the content of the message has at least + * one left and one right bracket. + * @param message: a message content. + * @return true if the content of the message has at least + * one left and one right bracket. + */ + public boolean isMessageWithBrackets(String message) + { + return ((message != null) && + (message.indexOf("<")!= -1) && + (message.indexOf(">") != -1)); + } } \ No newline at end of file -- cgit v1.2.3