launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java
changeset 1088 4b65abc39565
parent 1076 892dcb178737
child 1092 e684cc5dec32
     1.1 --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java	Sun May 05 18:16:43 2013 +0200
     1.2 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java	Thu May 09 21:51:56 2013 +0200
     1.3 @@ -23,6 +23,7 @@
     1.4  import java.io.InputStream;
     1.5  import java.io.InterruptedIOException;
     1.6  import java.io.OutputStream;
     1.7 +import java.io.Reader;
     1.8  import java.io.UnsupportedEncodingException;
     1.9  import java.io.Writer;
    1.10  import java.net.URI;
    1.11 @@ -57,7 +58,7 @@
    1.12   * execution engine.
    1.13   */
    1.14  abstract class BaseHTTPLauncher extends Launcher implements Closeable, Callable<HttpServer> {
    1.15 -    private static final Logger LOG = Logger.getLogger(BaseHTTPLauncher.class.getName());
    1.16 +    static final Logger LOG = Logger.getLogger(BaseHTTPLauncher.class.getName());
    1.17      private static final InvocationContext END = new InvocationContext(null, null, null);
    1.18      private final Set<ClassLoader> loaders = new LinkedHashSet<>();
    1.19      private final BlockingQueue<InvocationContext> methods = new LinkedBlockingQueue<>();
    1.20 @@ -190,6 +191,25 @@
    1.21                              params = new String[r.parameters.length];
    1.22                              for (int i = 0; i < r.parameters.length; i++) {
    1.23                                  params[i] = request.getParameter(r.parameters[i]);
    1.24 +                                if (params[i] == null) {
    1.25 +                                    if ("http.method".equals(r.parameters[i])) {
    1.26 +                                        params[i] = request.getMethod().toString();
    1.27 +                                    } else if ("http.requestBody".equals(r.parameters[i])) {
    1.28 +                                        Reader rdr = request.getReader();
    1.29 +                                        StringBuilder sb = new StringBuilder();
    1.30 +                                        for (;;) {
    1.31 +                                            int ch = rdr.read();
    1.32 +                                            if (ch == -1) {
    1.33 +                                                break;
    1.34 +                                            }
    1.35 +                                            sb.append((char)ch);
    1.36 +                                        }
    1.37 +                                        params[i] = sb.toString();
    1.38 +                                    }
    1.39 +                                }
    1.40 +                                if (params[i] == null) {
    1.41 +                                    params[i] = "null";
    1.42 +                                }
    1.43                              }
    1.44                          }
    1.45                          
    1.46 @@ -199,9 +219,7 @@
    1.47              }
    1.48          }
    1.49          
    1.50 -        conf.addHttpHandler(new Page(resources, 
    1.51 -            "org/apidesign/bck2brwsr/launcher/fximpl/harness.xhtml"
    1.52 -        ), "/execute");
    1.53 +        conf.addHttpHandler(new Page(resources, harnessResource()), "/execute");
    1.54          
    1.55          conf.addHttpHandler(new HttpHandler() {
    1.56              int cnt;
    1.57 @@ -461,9 +479,10 @@
    1.58          }
    1.59      }
    1.60  
    1.61 -    abstract void generateBck2BrwsrJS(StringBuilder sb, Object loader) throws IOException;
    1.62 +    abstract void generateBck2BrwsrJS(StringBuilder sb, Res loader) throws IOException;
    1.63 +    abstract String harnessResource();
    1.64  
    1.65 -    private class Res {
    1.66 +    class Res {
    1.67          public InputStream get(String resource) throws IOException {
    1.68              for (ClassLoader l : loaders) {
    1.69                  URL u = null;