test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/HttpServer.java in calabash-android-0.4.7.pre4 vs test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/HttpServer.java in calabash-android-0.4.7.pre6

- old
+ new

@@ -1,12 +1,14 @@ package sh.calaba.instrumentationbackend.actions; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; +import java.util.Enumeration; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; @@ -16,56 +18,61 @@ import sh.calaba.instrumentationbackend.FranklyResult; import sh.calaba.instrumentationbackend.InstrumentationBackend; import sh.calaba.instrumentationbackend.Result; import sh.calaba.instrumentationbackend.json.JSONUtils; import sh.calaba.instrumentationbackend.query.Query; -import sh.calaba.org.codehaus.jackson.map.DeserializationConfig.Feature; -import sh.calaba.org.codehaus.jackson.map.ObjectMapper; import android.graphics.Bitmap; import android.util.Log; import android.view.View; +import com.fasterxml.jackson.databind.ObjectMapper; + public class HttpServer extends NanoHTTPD { private static final String TAG = "InstrumentationBackend"; private boolean running = true; private boolean ready = false; private final Lock lock = new ReentrantLock(); private final Condition shutdownCondition = lock.newCondition(); - private final ObjectMapper mapper = createJsonMapper(); - private static HttpServer instance; + /** * Creates and returns the singleton instance for HttpServer. * * Can only be called once. Otherwise, you'll get an IllegalStateException. */ public synchronized static HttpServer instantiate(int testServerPort) { if (instance != null) { throw new IllegalStateException("Can only instantiate once!"); } - instance = new HttpServer(testServerPort); + try { + instance = new HttpServer(testServerPort); + } catch (IOException e) { + new RuntimeException(e); + } return instance; } public synchronized static HttpServer getInstance() { if (instance == null) { throw new IllegalStateException("Must be initialized!"); } return instance; } - private HttpServer(int testServerPort) { + private HttpServer(int testServerPort) throws IOException { super(testServerPort, new File("/")); } @SuppressWarnings({ "rawtypes", "unchecked" }) public Response serve(String uri, String method, Properties header, Properties params, Properties files) { System.out.println("URI: " + uri); + System.out.println("params: " + params); + if (uri.endsWith("/ping")) { return new NanoHTTPD.Response(HTTP_OK, MIME_HTML, "pong"); } else if (uri.endsWith("/dump")) { @@ -177,10 +184,16 @@ } } System.out.println("header: " + header); System.out.println("params: " + params); + Enumeration<String> propertyNames = (Enumeration<String>) params.propertyNames(); + while (propertyNames.hasMoreElements()) + { + String s = propertyNames.nextElement(); + System.out.println("ProP "+s+" = "+params.getProperty(s)); + } System.out.println("files: " + files); String commandString = params.getProperty("json"); System.out.println("command: " + commandString); String result = toJson(runCommand(commandString)); @@ -209,25 +222,22 @@ } throw new RuntimeException("Could not find any views"); } - private ObjectMapper createJsonMapper() { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, true); - return mapper; - } private String toJson(Result result) { try { + ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(result); } catch (Exception e) { throw new RuntimeException(e); } } private Result runCommand(String commandString) { try { + ObjectMapper mapper = new ObjectMapper(); Command command = mapper.readValue(commandString, Command.class); log("Got command:'" + command); return command.execute(); } catch (Throwable t) { t.printStackTrace();