Moves c.g.gwt.logging to common StackTraceDeobfuscator.
Change-Id: I44bee6a3abdf550831f6f9263a8c6e3c807ca063
Review-Link: https://gwt-review.googlesource.com/#/c/2300/
Review by: skybrian@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@11577 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/logging/server/RemoteLoggingServiceImpl.java b/user/src/com/google/gwt/logging/server/RemoteLoggingServiceImpl.java
index ac85b0a..15cc374 100644
--- a/user/src/com/google/gwt/logging/server/RemoteLoggingServiceImpl.java
+++ b/user/src/com/google/gwt/logging/server/RemoteLoggingServiceImpl.java
@@ -16,6 +16,7 @@
package com.google.gwt.logging.server;
+import com.google.gwt.core.server.impl.StackTraceDeobfuscator;
import com.google.gwt.logging.server.RemoteLoggingServiceUtil.RemoteLoggingException;
import com.google.gwt.logging.shared.RemoteLoggingService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
@@ -27,16 +28,14 @@
/**
* Server side code for the remote log handler.
*/
-public class RemoteLoggingServiceImpl extends RemoteServiceServlet implements
- RemoteLoggingService {
- // No deobfuscator by default
- private static StackTraceDeobfuscator deobfuscator = null;
+public class RemoteLoggingServiceImpl extends RemoteServiceServlet implements RemoteLoggingService {
- private static Logger logger =
- Logger.getLogger(RemoteServiceServlet.class.getName());
-
- private static String loggerNameOverride = null;
-
+ private static Logger logger = Logger.getLogger(RemoteServiceServlet.class.getName());
+
+ // No deobfuscator by default
+ private StackTraceDeobfuscator deobfuscator = null;
+ private String loggerNameOverride = null;
+
/**
* Logs a Log Record which has been serialized using GWT RPC on the server.
* @return either an error message, or null if logging is successful.
@@ -67,13 +66,8 @@
* By default, this service does not do any deobfuscation. In order to do
* server side deobfuscation, you must copy the symbolMaps files to a
* directory visible to the server and set the directory using this method.
- * @param symbolMapsDir
*/
public void setSymbolMapsDirectory(String symbolMapsDir) {
- if (deobfuscator == null) {
- deobfuscator = new StackTraceDeobfuscator(symbolMapsDir);
- } else {
- deobfuscator.setSymbolMapsDirectory(symbolMapsDir);
- }
+ deobfuscator = StackTraceDeobfuscator.fromFileSystem(symbolMapsDir);
}
}
diff --git a/user/src/com/google/gwt/logging/server/RemoteLoggingServiceUtil.java b/user/src/com/google/gwt/logging/server/RemoteLoggingServiceUtil.java
index 2b0b6dc..940cc95 100644
--- a/user/src/com/google/gwt/logging/server/RemoteLoggingServiceUtil.java
+++ b/user/src/com/google/gwt/logging/server/RemoteLoggingServiceUtil.java
@@ -16,6 +16,8 @@
package com.google.gwt.logging.server;
+import com.google.gwt.core.server.impl.StackTraceDeobfuscator;
+
import java.util.logging.LogRecord;
import java.util.logging.Logger;
@@ -53,7 +55,7 @@
StackTraceDeobfuscator deobfuscator, String loggerNameOverride) throws
RemoteLoggingException {
if (deobfuscator != null) {
- lr = deobfuscator.deobfuscateLogRecord(lr, strongName);
+ lr = deobfuscateLogRecord(deobfuscator, lr, strongName);
}
String loggerName = loggerNameOverride == null ? lr.getLoggerName() :
loggerNameOverride;
@@ -61,13 +63,19 @@
logger.log(lr);
}
+ public static LogRecord deobfuscateLogRecord(
+ StackTraceDeobfuscator deobfuscator, LogRecord lr, String strongName) {
+ if (lr.getThrown() != null && strongName != null) {
+ deobfuscator.deobfuscateStackTrace(lr.getThrown(), strongName);
+ }
+ return lr;
+ }
+
public static void logOnServer(String serializedLogRecordJson,
String strongName, StackTraceDeobfuscator deobfuscator,
String loggerNameOverride) throws RemoteLoggingException {
- LogRecord lr;
try {
- lr = JsonLogRecordServerUtil.logRecordFromJson(
- serializedLogRecordJson);
+ LogRecord lr = JsonLogRecordServerUtil.logRecordFromJson(serializedLogRecordJson);
logOnServer(lr, strongName, deobfuscator, loggerNameOverride);
} catch (Exception e) {
// We don't want to import the JsonException, which will require the json
diff --git a/user/src/com/google/web/bindery/requestfactory/server/Logging.java b/user/src/com/google/web/bindery/requestfactory/server/Logging.java
index 73c6f54..485fb04 100644
--- a/user/src/com/google/web/bindery/requestfactory/server/Logging.java
+++ b/user/src/com/google/web/bindery/requestfactory/server/Logging.java
@@ -16,9 +16,9 @@
package com.google.web.bindery.requestfactory.server;
+import com.google.gwt.core.server.impl.StackTraceDeobfuscator;
import com.google.gwt.logging.server.RemoteLoggingServiceUtil;
import com.google.gwt.logging.server.RemoteLoggingServiceUtil.RemoteLoggingException;
-import com.google.gwt.logging.server.StackTraceDeobfuscator;
import com.google.gwt.user.client.rpc.RpcRequestBuilder;
import javax.servlet.http.HttpServletRequest;
@@ -30,7 +30,7 @@
*/
public class Logging {
- private static StackTraceDeobfuscator deobfuscator = new StackTraceDeobfuscator("");
+ private static StackTraceDeobfuscator deobfuscator;
/**
* Logs a message.
@@ -60,7 +60,7 @@
* @param dir a directory, specified as a String
*/
public static void setSymbolMapsDirectory(String dir) {
- deobfuscator.setSymbolMapsDirectory(dir);
+ deobfuscator = StackTraceDeobfuscator.fromFileSystem(dir);
}
private String id = "";
diff --git a/user/test/com/google/gwt/user/client/rpc/LoggingRPCTest.java b/user/test/com/google/gwt/user/client/rpc/LoggingRPCTest.java
index 8991ffa..c047bb3 100644
--- a/user/test/com/google/gwt/user/client/rpc/LoggingRPCTest.java
+++ b/user/test/com/google/gwt/user/client/rpc/LoggingRPCTest.java
@@ -17,8 +17,8 @@
package com.google.gwt.user.client.rpc;
import com.google.gwt.core.client.GWT;
-import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.core.client.impl.SourceMapProperty;
+import com.google.gwt.junit.client.GWTTestCase;
import java.util.logging.Level;
import java.util.logging.LogRecord;
@@ -123,7 +123,6 @@
service.echoLogRecord(expectedLogRecord, new AsyncCallback<LogRecord>() {
public void onFailure(Throwable caught) {
TestSetValidator.rethrowException(caught);
- fail(caught.getMessage());
}
public void onSuccess(LogRecord result) {
@@ -151,7 +150,6 @@
service.deobfuscateLogRecord(createLogRealRecord(e), new AsyncCallback<LogRecord>() {
public void onFailure(Throwable caught) {
- assertTrue(false);
TestSetValidator.rethrowException(caught);
}
diff --git a/user/test/com/google/gwt/user/server/rpc/LoggingRPCTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/LoggingRPCTestServiceImpl.java
index 691139a..f08ac46 100644
--- a/user/test/com/google/gwt/user/server/rpc/LoggingRPCTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/LoggingRPCTestServiceImpl.java
@@ -16,17 +16,14 @@
package com.google.gwt.user.server.rpc;
-import static com.google.gwt.user.client.rpc.RpcRequestBuilder.MODULE_BASE_HEADER;
-
+import com.google.gwt.core.server.impl.StackTraceDeobfuscator;
import com.google.gwt.junit.linker.JUnitSymbolMapsLinker;
-import com.google.gwt.logging.server.StackTraceDeobfuscator;
+import com.google.gwt.logging.server.RemoteLoggingServiceUtil;
import com.google.gwt.user.client.rpc.LoggingRPCTest;
import com.google.gwt.user.client.rpc.LoggingRPCTestService;
import com.google.gwt.user.client.rpc.RpcRequestBuilder;
import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.LogRecord;
@@ -41,43 +38,13 @@
LoggingRPCTestService {
@Override
- public LogRecord deobfuscateLogRecord(LogRecord value)
- throws LoggingRPCTestServiceException {
+ public LogRecord deobfuscateLogRecord(LogRecord value) {
// don't deobfuscate DevMode, there's no symbol map
if ("HostedMode".equals(getPermutationStrongName())) {
return value;
}
- StackTraceDeobfuscator deobf = new StackTraceDeobfuscator(getSymbolMapsDir()) {
- @Override
- protected InputStream getSourceMapInputStream(String permutationStrongName,
- int fragmentNumber)
- throws IOException {
- if (symbolMapsDirectory.exists()) {
- return super.getSourceMapInputStream(permutationStrongName,
- fragmentNumber);
- } else {
- return getServletContext().getResourceAsStream(
- getModule() + File.separatorChar + JUnitSymbolMapsLinker.SYMBOL_MAP_DIR
- + permutationStrongName
- + "_sourceMap" + fragmentNumber + ".json");
- }
- }
-
- @Override
- protected InputStream getSymbolMapInputStream(String permutationStrongName)
- throws IOException {
- if (symbolMapsDirectory.exists()) {
- return super.getSymbolMapInputStream(permutationStrongName);
- } else {
- String name =
- getModule() + File.separatorChar + JUnitSymbolMapsLinker.SYMBOL_MAP_DIR
- + permutationStrongName
- + ".symbolMap";
- return getServletContext().getResourceAsStream(name);
- }
- }
- };
+ StackTraceDeobfuscator deobf = StackTraceDeobfuscator.fromUrl(getSymbolMapUrl());
HttpServletRequest threadLocalRequest = getThreadLocalRequest();
String strongName = null;
@@ -85,11 +52,21 @@
// can be null during tests
strongName = threadLocalRequest.getHeader(RpcRequestBuilder.STRONG_NAME_HEADER);
}
- LogRecord newRecord = deobf.deobfuscateLogRecord(value, strongName);
+ LogRecord newRecord = RemoteLoggingServiceUtil.deobfuscateLogRecord(deobf, value, strongName);
Logger.getLogger(value.getLoggerName()).log(newRecord);
return newRecord;
}
+ private URL getSymbolMapUrl() {
+ File symbolMapsDirectory = new File("war/" + getJunitSymbolMapsPath());
+ try {
+ return symbolMapsDirectory.exists() ? symbolMapsDirectory.toURI().toURL()
+ : getServletContext().getResource(getJunitSymbolMapsPath());
+ } catch (MalformedURLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
public LogRecord echoLogRecord(LogRecord value) throws LoggingRPCTestServiceException {
/*
* Don't check the stack trace on the server side, because the expected
@@ -104,33 +81,7 @@
return value;
}
- private String getModule() {
- try {
- String header = getThreadLocalRequest().getHeader(MODULE_BASE_HEADER);
- if (header == null) {
- return null;
- }
- String path = new URL(header).getPath();
- String contextPath = getThreadLocalRequest().getContextPath();
- if (!path.startsWith(contextPath)) {
- return null;
- }
- path = path.substring(contextPath.length());
- if (path.endsWith("/")) {
- path = path.substring(0, path.length() - 1);
- }
- return path;
- } catch (MalformedURLException e) {
- return null;
- }
- }
-
- private String getSymbolMapsDir() {
- String path = getModule();
- if (path == null) {
- return null;
- }
- return "war" + File.separatorChar + getModule() + File.separatorChar
- + JUnitSymbolMapsLinker.SYMBOL_MAP_DIR;
+ private String getJunitSymbolMapsPath() {
+ return getRequestModuleBasePath() + "/" + JUnitSymbolMapsLinker.SYMBOL_MAP_DIR;
}
}