diff -r 48f01cef55c2 -r a0d8b5ab79a2 launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Tue Jan 22 17:53:05 2013 +0100 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Tue Jan 22 19:16:38 2013 +0100 @@ -55,7 +55,7 @@ */ final class Bck2BrwsrLauncher extends Launcher implements Closeable { private static final Logger LOG = Logger.getLogger(Bck2BrwsrLauncher.class.getName()); - private static final MethodInvocation END = new MethodInvocation(null, null); + private static final MethodInvocation END = new MethodInvocation(null, null, null); private Set loaders = new LinkedHashSet<>(); private BlockingQueue methods = new LinkedBlockingQueue<>(); private long timeOut; @@ -70,9 +70,9 @@ } @Override - public MethodInvocation addMethod(Class clazz, String method) throws IOException { + MethodInvocation addMethod(Class clazz, String method, String html) throws IOException { loaders.add(clazz.getClassLoader()); - MethodInvocation c = new MethodInvocation(clazz.getName(), method); + MethodInvocation c = new MethodInvocation(clazz.getName(), method, html); methods.add(c); try { c.await(timeOut); @@ -174,7 +174,13 @@ + "className: '" + cn + "', " + "methodName: '" + mn + "', " + "request: " + cnt - + "}"); + ); + if (mi.html != null) { + response.getWriter().write(", html: '"); + response.getWriter().write(encodeJSON(mi.html)); + response.getWriter().write("'"); + } + response.getWriter().write("}"); cnt++; } }, "/data"); @@ -182,6 +188,22 @@ this.brwsr = launchServerAndBrwsr(server, "/execute"); } + private static String encodeJSON(String in) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < in.length(); i++) { + char ch = in.charAt(i); + if (ch < 32 || ch == '\'' || ch == '"') { + sb.append("\\u"); + String hs = "0000" + Integer.toHexString(ch); + hs = hs.substring(hs.length() - 4); + sb.append(hs); + } else { + sb.append(ch); + } + } + return sb.toString(); + } + @Override public void shutdown() throws IOException { methods.offer(END); @@ -348,7 +370,7 @@ public Page(Res res, String resource, String... args) { this.res = res; this.resource = resource; - this.args = args; + this.args = args.length == 0 ? new String[] { "$0" } : args; } @Override