/** Using the PostMethod */ public static String getCharsetWithMethod(String url) { PostMethod post = new PostMethod(url); post.setFollowRedirects(false); String charset = post.getResponseCharSet(); System.out.println(charset); return charset; }
/** Upload to an file node structure, see SLING-168 */ public void uploadToFileNode(String url, File localFile, String fieldName, String typeHint) throws IOException { final Part[] parts = new Part[typeHint == null ? 1 : 2]; parts[0] = new FilePart(fieldName, localFile); if (typeHint != null) { parts[1] = new StringPart(fieldName + "@TypeHint", typeHint); } final PostMethod post = new PostMethod(url); post.setFollowRedirects(false); post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams())); final int status = httpClient.executeMethod(post); if (status != 200) { // fmeschbe: The default sling status is 200, not 302 throw new HttpStatusCodeException(200, status, "POST", url); } }
/** Upload multiple files to file node structures */ public void uploadToFileNodes( String url, File[] localFiles, String[] fieldNames, String[] typeHints) throws IOException { List<Part> partsList = new ArrayList<Part>(); for (int i = 0; i < localFiles.length; i++) { Part filePart = new FilePart(fieldNames[i], localFiles[i]); partsList.add(filePart); if (typeHints != null) { Part typeHintPart = new StringPart(fieldNames[i] + "@TypeHint", typeHints[i]); partsList.add(typeHintPart); } } final Part[] parts = partsList.toArray(new Part[partsList.size()]); final PostMethod post = new PostMethod(url); post.setFollowRedirects(false); post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams())); final int status = httpClient.executeMethod(post); if (status != 200) { // fmeschbe: The default sling status is 200, not 302 throw new HttpStatusCodeException(200, status, "POST", url); } }
/** * Create a node under given path, using a POST to Sling * * @param url under which node is created * @param multiPart if true, does a multipart POST * @return the URL that Sling provides to display the node */ public String createNode( String url, Map<String, String> clientNodeProperties, Map<String, String> requestHeaders, boolean multiPart) throws IOException { final PostMethod post = new PostMethod(url); post.setFollowRedirects(false); // create a private copy of the properties to not tamper with // the properties of the client Map<String, String> nodeProperties = new HashMap<String, String>(); // add sling specific properties nodeProperties.put(":redirect", "*"); nodeProperties.put(":displayExtension", ""); nodeProperties.put(":status", "browser"); // take over any client provided properties if (clientNodeProperties != null) { nodeProperties.putAll(clientNodeProperties); } else { // add fake property - otherwise the node is not created nodeProperties.put("jcr:created", ""); } // force form encoding to UTF-8, which is what we use to convert the // string parts into stream data nodeProperties.put("_charset_", "UTF-8"); if (nodeProperties.size() > 0) { if (multiPart) { final List<Part> partList = new ArrayList<Part>(); for (Map.Entry<String, String> e : nodeProperties.entrySet()) { if (e.getValue() != null) { partList.add(new StringPart(e.getKey().toString(), e.getValue().toString(), "UTF-8")); } } final Part[] parts = partList.toArray(new Part[partList.size()]); post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams())); } else { for (Map.Entry<String, String> e : nodeProperties.entrySet()) { post.addParameter(e.getKey(), e.getValue()); } } } if (requestHeaders != null) { for (Map.Entry<String, String> e : requestHeaders.entrySet()) { post.addRequestHeader(e.getKey(), e.getValue()); } } final int status = httpClient.executeMethod(post); if (status != 302) { throw new HttpStatusCodeException(302, status, "POST", url); } String location = post.getResponseHeader("Location").getValue(); post.releaseConnection(); // simple check if host is missing if (!location.startsWith("http://")) { String host = HttpTestBase.HTTP_BASE_URL; int idx = host.indexOf('/', 8); if (idx > 0) { host = host.substring(0, idx); } location = host + location; } return location; }