/* * Copyright (c) 2012 Mozilla Foundation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ package nu.validator.client; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.IOException; import java.net.URL; import java.net.URLConnection; import java.net.ConnectException; import java.net.MalformedURLException; import java.net.ProtocolException; public class HttpClient { public static void main(String[] args) { URLConnection connection = null; InputStream input = null; String host = System.getProperty("nu.validator.client.host", "127.0.0.1"); String port = System.getProperty("nu.validator.client.port", "8888"); String origin = "http://" + host + ":" + port; String level = System.getProperty("nu.validator.client.level", null); String parser = System.getProperty("nu.validator.client.parser", null); String charset = System.getProperty("nu.validator.client.charset", null); String contentType = System.getProperty( "nu.validator.client.content-type", null); boolean hasErrors = false; String url = origin + "/?laxtype=" + System.getProperty("nu.validator.client.laxtype", "yes"); url += "&out=" + System.getProperty("nu.validator.client.out", "gnu"); if (!"no".equals(System.getProperty("nu.validator.client.asciiquotes"))) { url += "&asciiquotes=yes"; } if (level != null) { url += "&level=" + level; } if (parser != null) { url += "&parser=" + parser; } if (charset != null) { url += "&charset=" + charset; } try { String filepath = null; String filename = null; int filecount = (args.length == 0 ? 1 : args.length); for (int i = 0; i < filecount; i++) { if (args.length == 0 || "-".equals(args[i])) { System.err.println("Waiting for document content on standard input..."); input = System.in; filename = "[stdin]"; } else { filename = args[i]; filepath = filename; input = new FileInputStream(filepath); } URL validator = new URL(url + "&doc=" + filename); connection = validator.openConnection(); if (filename.endsWith(".xhtml")) { contentType = (contentType == null ? "application/xhtml+xml" : contentType); } else { contentType = (contentType == null ? "text/html" : contentType); } if ("application/xhtml+xml".equals(contentType)) { parser = (parser == null ? "xml" : parser); } connection.setRequestProperty("Content-Type", contentType); connection.setDoOutput(true); connection.setReadTimeout(10000); byte buffer[] = new byte[4096]; int len = 4096; try (OutputStream output = connection.getOutputStream()) { while ((len = input.read(buffer, 0, 4096)) != -1) { output.write(buffer, 0, len); } } input.close(); try (BufferedReader responseReader = new BufferedReader(new InputStreamReader( connection.getInputStream()))) { int c; while ((c = responseReader.read()) != -1) { System.out.print((char) c); hasErrors = true; } } } System.exit(hasErrors ? 1 : 0); } catch (MalformedURLException | ProtocolException e) { e.printStackTrace(); System.exit(1); } catch (IOException e) { if (e instanceof ConnectException) { System.out.printf( "\nerror: Expected to find validator service" + " at %s but could not connect. Stopping.\n", origin); System.exit(1); } else { e.printStackTrace(); System.exit(1); } } finally { connection = null; input = null; } } }