diff -r 892dcb178737 -r 4b65abc39565 launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Sun May 05 18:16:43 2013 +0200 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Thu May 09 21:51:56 2013 +0200 @@ -23,6 +23,7 @@ import java.io.InputStream; import java.io.InterruptedIOException; import java.io.OutputStream; +import java.io.Reader; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.net.URI; @@ -57,7 +58,7 @@ * execution engine. */ abstract class BaseHTTPLauncher extends Launcher implements Closeable, Callable { - private static final Logger LOG = Logger.getLogger(BaseHTTPLauncher.class.getName()); + static final Logger LOG = Logger.getLogger(BaseHTTPLauncher.class.getName()); private static final InvocationContext END = new InvocationContext(null, null, null); private final Set loaders = new LinkedHashSet<>(); private final BlockingQueue methods = new LinkedBlockingQueue<>(); @@ -190,6 +191,25 @@ params = new String[r.parameters.length]; for (int i = 0; i < r.parameters.length; i++) { params[i] = request.getParameter(r.parameters[i]); + if (params[i] == null) { + if ("http.method".equals(r.parameters[i])) { + params[i] = request.getMethod().toString(); + } else if ("http.requestBody".equals(r.parameters[i])) { + Reader rdr = request.getReader(); + StringBuilder sb = new StringBuilder(); + for (;;) { + int ch = rdr.read(); + if (ch == -1) { + break; + } + sb.append((char)ch); + } + params[i] = sb.toString(); + } + } + if (params[i] == null) { + params[i] = "null"; + } } } @@ -199,9 +219,7 @@ } } - conf.addHttpHandler(new Page(resources, - "org/apidesign/bck2brwsr/launcher/fximpl/harness.xhtml" - ), "/execute"); + conf.addHttpHandler(new Page(resources, harnessResource()), "/execute"); conf.addHttpHandler(new HttpHandler() { int cnt; @@ -461,9 +479,10 @@ } } - abstract void generateBck2BrwsrJS(StringBuilder sb, Object loader) throws IOException; + abstract void generateBck2BrwsrJS(StringBuilder sb, Res loader) throws IOException; + abstract String harnessResource(); - private class Res { + class Res { public InputStream get(String resource) throws IOException { for (ClassLoader l : loaders) { URL u = null;