Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlauzond2006-12-06 17:29:30 +0000
committerlauzond2006-12-06 17:29:30 +0000
commit7838fa8cd78427c8571a407d89f23162fbf669f0 (patch)
tree9662cceef6745c5261f72b149203a35acd9c7bc2 /bundles/org.eclipse.wst.wsi/src/org/eclipse/wst
parent565d30e50fc2a07fe0bc8973ec59fb9bd84ac779 (diff)
downloadwebtools.webservices-7838fa8cd78427c8571a407d89f23162fbf669f0.tar.gz
webtools.webservices-7838fa8cd78427c8571a407d89f23162fbf669f0.tar.xz
webtools.webservices-7838fa8cd78427c8571a407d89f23162fbf669f0.zip
[Bug 164941] The WS-I Logger Drops GET Requests
Diffstat (limited to 'bundles/org.eclipse.wst.wsi/src/org/eclipse/wst')
-rw-r--r--bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/LogBuilder.java108
-rw-r--r--bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/impl/LogReaderImpl.java124
2 files changed, 135 insertions, 97 deletions
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;
@@ -315,33 +332,6 @@ public class LogBuilder
}
/**
- * 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

Back to the top