Search in sources :

Example 16 with StringPart

use of org.apache.commons.httpclient.methods.multipart.StringPart in project sling by apache.

the class SlingIntegrationTestClient method createNode.

/** 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
     *  @param localFile file to upload
     *  @param fieldName name of the file field
     *  @param typeHint typeHint of the file field 
     *  @return the URL that Sling provides to display the node
     */
public String createNode(String url, NameValuePairList clientNodeProperties, Map<String, String> requestHeaders, boolean multiPart, File localFile, String fieldName, String typeHint) 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
    NameValuePairList nodeProperties = new NameValuePairList(clientNodeProperties);
    // add sling specific properties
    nodeProperties.prependIfNew(":redirect", "*");
    nodeProperties.prependIfNew(":displayExtension", "");
    nodeProperties.prependIfNew(":status", "browser");
    // add fake property - otherwise the node is not created
    if (clientNodeProperties == null) {
        nodeProperties.add("jcr:created", "");
    }
    // force form encoding to UTF-8, which is what we use to convert the
    // string parts into stream data
    nodeProperties.addOrReplace("_charset_", "UTF-8");
    if (nodeProperties.size() > 0) {
        if (multiPart) {
            final List<Part> partList = new ArrayList<Part>();
            for (NameValuePair e : nodeProperties) {
                if (e.getValue() != null) {
                    partList.add(new StringPart(e.getName(), e.getValue(), "UTF-8"));
                }
            }
            if (localFile != null) {
                partList.add(new FilePart(fieldName, localFile));
                if (typeHint != null) {
                    partList.add(new StringPart(fieldName + "@TypeHint", typeHint));
                }
            }
            final Part[] parts = partList.toArray(new Part[partList.size()]);
            post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams()));
        } else {
            post.getParams().setContentCharset("UTF-8");
            for (NameValuePair e : nodeProperties) {
                post.addParameter(e.getName(), e.getValue());
            }
        }
    }
    if (requestHeaders != null) {
        for (Map.Entry<String, String> e : requestHeaders.entrySet()) {
            post.addRequestHeader(e.getKey(), e.getValue());
        }
    }
    final int expected = 302;
    final int status = httpClient.executeMethod(post);
    if (status != expected) {
        throw new HttpStatusCodeException(expected, status, "POST", url, HttpTestBase.getResponseBodyAsStream(post, 0));
    }
    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;
}
Also used : PostMethod(org.apache.commons.httpclient.methods.PostMethod) ArrayList(java.util.ArrayList) StringPart(org.apache.commons.httpclient.methods.multipart.StringPart) MultipartRequestEntity(org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity) FilePart(org.apache.commons.httpclient.methods.multipart.FilePart) StringPart(org.apache.commons.httpclient.methods.multipart.StringPart) FilePart(org.apache.commons.httpclient.methods.multipart.FilePart) Part(org.apache.commons.httpclient.methods.multipart.Part) Map(java.util.Map)

Example 17 with StringPart

use of org.apache.commons.httpclient.methods.multipart.StringPart in project sling by apache.

the class SlingIntegrationTestClient method uploadToFileNode.

/** 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);
    final int expected = 200;
    if (status != expected) {
        throw new HttpStatusCodeException(expected, status, "POST", HttpTestBase.getResponseBodyAsStream(post, 0));
    }
}
Also used : PostMethod(org.apache.commons.httpclient.methods.PostMethod) StringPart(org.apache.commons.httpclient.methods.multipart.StringPart) FilePart(org.apache.commons.httpclient.methods.multipart.FilePart) Part(org.apache.commons.httpclient.methods.multipart.Part) StringPart(org.apache.commons.httpclient.methods.multipart.StringPart) MultipartRequestEntity(org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity) FilePart(org.apache.commons.httpclient.methods.multipart.FilePart)

Example 18 with StringPart

use of org.apache.commons.httpclient.methods.multipart.StringPart in project sling by apache.

the class DeleteNodeCommand method execute.

@Override
public Result<Void> execute() {
    PostMethod post = new PostMethod(getPath());
    try {
        Part[] parts = { new StringPart(":operation", "delete") };
        post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams()));
        httpClient.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(repositoryInfo.getUsername(), repositoryInfo.getPassword()));
        httpClient.getParams().setAuthenticationPreemptive(true);
        int responseStatus = httpClient.executeMethod(post);
        return resultForResponseStatus(responseStatus);
    } catch (Exception e) {
        return AbstractResult.failure(new RepositoryException(e));
    } finally {
        post.releaseConnection();
    }
}
Also used : PostMethod(org.apache.commons.httpclient.methods.PostMethod) Part(org.apache.commons.httpclient.methods.multipart.Part) StringPart(org.apache.commons.httpclient.methods.multipart.StringPart) StringPart(org.apache.commons.httpclient.methods.multipart.StringPart) RepositoryException(org.apache.sling.ide.transport.RepositoryException) MultipartRequestEntity(org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity) RepositoryException(org.apache.sling.ide.transport.RepositoryException) UsernamePasswordCredentials(org.apache.commons.httpclient.UsernamePasswordCredentials)

Example 19 with StringPart

use of org.apache.commons.httpclient.methods.multipart.StringPart in project sling by apache.

the class UpdateContentCommand method execute.

@Override
public Result<Void> execute() {
    PostMethod post = new PostMethod(getPath());
    try {
        List<Part> parts = new ArrayList<>();
        for (Map.Entry<String, Object> property : properties.entrySet()) {
            if (ProtectedNodes.exists(property.getKey())) {
                continue;
            }
            Object propValue = property.getValue();
            if (propValue instanceof String) {
                parts.add(new StringPart(property.getKey(), (String) propValue));
            } else if (property != null) {
                // TODO handle multi-valued properties
                System.err.println("Unable to handle property " + property.getKey() + " of type " + property.getValue().getClass());
            }
        }
        File f = new File(fileInfo.getLocation());
        if (f.isFile()) {
            parts.add(new FilePart(fileInfo.getName(), f));
        }
        post.setRequestEntity(new MultipartRequestEntity(parts.toArray(new Part[parts.size()]), post.getParams()));
        httpClient.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(repositoryInfo.getUsername(), repositoryInfo.getPassword()));
        httpClient.getParams().setAuthenticationPreemptive(true);
        int responseStatus = httpClient.executeMethod(post);
        return resultForResponseStatus(responseStatus);
    } catch (Exception e) {
        return AbstractResult.failure(new RepositoryException(e));
    } finally {
        post.releaseConnection();
    }
}
Also used : PostMethod(org.apache.commons.httpclient.methods.PostMethod) ArrayList(java.util.ArrayList) StringPart(org.apache.commons.httpclient.methods.multipart.StringPart) RepositoryException(org.apache.sling.ide.transport.RepositoryException) MultipartRequestEntity(org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity) FilePart(org.apache.commons.httpclient.methods.multipart.FilePart) RepositoryException(org.apache.sling.ide.transport.RepositoryException) UsernamePasswordCredentials(org.apache.commons.httpclient.UsernamePasswordCredentials) StringPart(org.apache.commons.httpclient.methods.multipart.StringPart) FilePart(org.apache.commons.httpclient.methods.multipart.FilePart) Part(org.apache.commons.httpclient.methods.multipart.Part) Map(java.util.Map) File(java.io.File)

Example 20 with StringPart

use of org.apache.commons.httpclient.methods.multipart.StringPart in project sling by apache.

the class HttpOsgiClient method installBundle.

@Override
public void installBundle(InputStream in, String fileName) throws OsgiClientException {
    if (in == null) {
        throw new IllegalArgumentException("in may not be null");
    }
    if (fileName == null) {
        throw new IllegalArgumentException("fileName may not be null");
    }
    // append pseudo path after root URL to not get redirected for nothing
    final PostMethod filePost = new PostMethod(repositoryInfo.appendPath("system/console/install"));
    try {
        // set referrer
        filePost.setRequestHeader("referer", "about:blank");
        List<Part> partList = new ArrayList<>();
        partList.add(new StringPart("action", "install"));
        partList.add(new StringPart("_noredir_", "_noredir_"));
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        IOUtils.copy(in, baos);
        PartSource partSource = new ByteArrayPartSource(fileName, baos.toByteArray());
        partList.add(new FilePart("bundlefile", partSource));
        partList.add(new StringPart("bundlestart", "start"));
        Part[] parts = partList.toArray(new Part[partList.size()]);
        filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
        int status = getHttpClient().executeMethod(filePost);
        if (status != 200) {
            throw new OsgiClientException("Method execution returned status " + status);
        }
    } catch (IOException e) {
        throw new OsgiClientException(e);
    } finally {
        filePost.releaseConnection();
    }
}
Also used : ByteArrayPartSource(org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource) PartSource(org.apache.commons.httpclient.methods.multipart.PartSource) PostMethod(org.apache.commons.httpclient.methods.PostMethod) ArrayList(java.util.ArrayList) StringPart(org.apache.commons.httpclient.methods.multipart.StringPart) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) MultipartRequestEntity(org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity) FilePart(org.apache.commons.httpclient.methods.multipart.FilePart) ByteArrayPartSource(org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource) StringPart(org.apache.commons.httpclient.methods.multipart.StringPart) FilePart(org.apache.commons.httpclient.methods.multipart.FilePart) Part(org.apache.commons.httpclient.methods.multipart.Part) OsgiClientException(org.apache.sling.ide.osgi.OsgiClientException)

Aggregations

MultipartRequestEntity (org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity)22 Part (org.apache.commons.httpclient.methods.multipart.Part)22 StringPart (org.apache.commons.httpclient.methods.multipart.StringPart)22 PostMethod (org.apache.commons.httpclient.methods.PostMethod)19 FilePart (org.apache.commons.httpclient.methods.multipart.FilePart)19 IOException (java.io.IOException)7 ArrayList (java.util.ArrayList)7 HttpClient (org.apache.commons.httpclient.HttpClient)7 File (java.io.File)6 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)4 Test (org.junit.Test)4 Map (java.util.Map)3 UsernamePasswordCredentials (org.apache.commons.httpclient.UsernamePasswordCredentials)3 ByteArrayPartSource (org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource)3 FilePartSource (org.apache.commons.httpclient.methods.multipart.FilePartSource)3 HttpMethodParams (org.apache.commons.httpclient.params.HttpMethodParams)3 ByteArrayInputStream (java.io.ByteArrayInputStream)2 RepositoryException (org.apache.sling.ide.transport.RepositoryException)2 PostParameter (weibo4j.model.PostParameter)2 WeiboException (weibo4j.model.WeiboException)2