Example usage for org.apache.commons.httpclient.methods PutMethod PutMethod

List of usage examples for org.apache.commons.httpclient.methods PutMethod PutMethod

Introduction

In this page you can find the example usage for org.apache.commons.httpclient.methods PutMethod PutMethod.

Prototype

public PutMethod(String paramString) 

Source Link

Usage

From source file:org.apache.maven.wagon.providers.webdav.CorrectedWebdavResource.java

/**
 * Execute the PUT method for the given path.
 *
 * @param path        the server relative path to put the data
 * @param inputStream The input stream.//from w w  w  .j a  v a 2s.  c o m
 *
 * @return true if the method is succeeded.
 */
public boolean putMethod(String path, InputStream inputStream, int contentLength) throws IOException {

    setClient();
    PutMethod method = new PutMethod(URIUtil.encodePathQuery(path));
    method.setFollowRedirects(super.followRedirects);
    generateIfHeader(method);
    if (getGetContentType() != null && !getGetContentType().equals("")) {
        method.setRequestHeader("Content-Type", getGetContentType());
    }
    method.setRequestContentLength(contentLength);
    method.setRequestBody(inputStream);
    generateTransactionHeader(method);
    generateAdditionalHeaders(method);
    int statusCode = client.executeMethod(method);

    setStatusCode(statusCode);
    return isHttpSuccess(statusCode);
}

From source file:org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.java

private void put(final InputStream stream, Resource resource, File source)
        throws TransferFailedException, AuthorizationException, ResourceDoesNotExistException {
    String url = getRepository().getUrl();
    String[] parts = StringUtils.split(resource.getName(), "/");
    for (int i = 0; i < parts.length; i++) {
        // TODO: Fix encoding...
        // url += "/" + URLEncoder.encode( parts[i], System.getProperty("file.encoding") );
        url += "/" + URLEncoder.encode(parts[i]);
    }//ww  w.  jav a2 s  . c o  m

    //Parent directories need to be created before posting
    try {
        mkdirs(PathUtils.dirname(resource.getName()));
    } catch (IOException e) {
        fireTransferError(resource, e, TransferEvent.REQUEST_GET);
    }

    PutMethod putMethod = new PutMethod(url);

    firePutStarted(resource, source);

    try {
        putMethod.setRequestEntity(new RequestEntityImplementation(stream, resource, this, source));

        int statusCode;
        try {
            statusCode = execute(putMethod);
        } catch (IOException e) {
            fireTransferError(resource, e, TransferEvent.REQUEST_PUT);

            throw new TransferFailedException(e.getMessage(), e);
        }

        fireTransferDebug(url + " - Status code: " + statusCode);

        // Check that we didn't run out of retries.
        switch (statusCode) {
        // Success Codes
        case HttpStatus.SC_OK: // 200
        case HttpStatus.SC_CREATED: // 201
        case HttpStatus.SC_ACCEPTED: // 202
        case HttpStatus.SC_NO_CONTENT: // 204
            break;

        case SC_NULL: {
            TransferFailedException e = new TransferFailedException("Failed to transfer file: " + url);
            fireTransferError(resource, e, TransferEvent.REQUEST_PUT);
            throw e;
        }

        case HttpStatus.SC_FORBIDDEN:
            fireSessionConnectionRefused();
            throw new AuthorizationException("Access denied to: " + url);

        case HttpStatus.SC_NOT_FOUND:
            throw new ResourceDoesNotExistException("File: " + url + " does not exist");

            //add more entries here
        default: {
            TransferFailedException e = new TransferFailedException(
                    "Failed to transfer file: " + url + ". Return code is: " + statusCode);
            fireTransferError(resource, e, TransferEvent.REQUEST_PUT);
            throw e;
        }
        }

        firePutCompleted(resource, source);
    } finally {
        putMethod.releaseConnection();
    }
}

From source file:org.apache.sling.commons.testing.integration.SlingIntegrationTestClient.java

/** Upload a file to the Sling repository
 *  @return the HTTP status code//from  w  w  w.  j a v a 2s .  c o  m
 */
public int upload(String toUrl, InputStream is) throws IOException {
    final PutMethod put = new PutMethod(toUrl);
    put.setRequestEntity(new InputStreamRequestEntity(is));
    return httpClient.executeMethod(put);
}

From source file:org.apache.sling.discovery.impl.topology.connector.TopologyConnectorClient.java

/** ping the server and pass the announcements between the two **/
void ping(final boolean force) {
    if (autoStopped) {
        // then we suppress any further pings!
        logger.debug("ping: autoStopped=true, hence suppressing any further pings.");
        return;/*from w ww  .  j a v  a 2  s .co m*/
    }
    if (force) {
        backoffPeriodEnd = -1;
    } else if (backoffPeriodEnd > 0) {
        if (System.currentTimeMillis() < backoffPeriodEnd) {
            logger.debug("ping: not issueing a heartbeat due to backoff instruction from peer.");
            return;
        } else {
            logger.debug("ping: backoff period ended, issuing another ping now.");
        }
    }
    final String uri = connectorUrl.toString() + "." + clusterViewService.getSlingId() + ".json";
    if (logger.isDebugEnabled()) {
        logger.debug("ping: connectorUrl=" + connectorUrl + ", complete uri=" + uri);
    }
    HttpClient httpClient = new HttpClient();
    final PutMethod method = new PutMethod(uri);
    Announcement resultingAnnouncement = null;
    try {
        String userInfo = connectorUrl.getUserInfo();
        if (userInfo != null) {
            Credentials c = new UsernamePasswordCredentials(userInfo);
            httpClient.getState()
                    .setCredentials(new AuthScope(method.getURI().getHost(), method.getURI().getPort()), c);
        }

        Announcement topologyAnnouncement = new Announcement(clusterViewService.getSlingId());
        topologyAnnouncement.setServerInfo(serverInfo);
        final ClusterView clusterView = clusterViewService.getClusterView();
        topologyAnnouncement.setLocalCluster(clusterView);
        if (force) {
            logger.debug("ping: sending a resetBackoff");
            topologyAnnouncement.setResetBackoff(true);
        }
        announcementRegistry.addAllExcept(topologyAnnouncement, clusterView, new AnnouncementFilter() {

            public boolean accept(final String receivingSlingId, final Announcement announcement) {
                // filter out announcements that are of old cluster instances
                // which I dont really have in my cluster view at the moment
                final Iterator<InstanceDescription> it = clusterViewService.getClusterView().getInstances()
                        .iterator();
                while (it.hasNext()) {
                    final InstanceDescription instance = it.next();
                    if (instance.getSlingId().equals(receivingSlingId)) {
                        // then I have the receiving instance in my cluster view
                        // all fine then
                        return true;
                    }
                }
                // looks like I dont have the receiving instance in my cluster view
                // then I should also not propagate that announcement anywhere
                return false;
            }
        });
        final String p = requestValidator.encodeMessage(topologyAnnouncement.asJSON());

        if (logger.isDebugEnabled()) {
            logger.debug("ping: topologyAnnouncement json is: " + p);
        }
        requestValidator.trustMessage(method, p);
        if (config.isGzipConnectorRequestsEnabled()) {
            // tell the server that the content is gzipped:
            method.addRequestHeader("Content-Encoding", "gzip");
            // and gzip the body:
            final ByteArrayOutputStream baos = new ByteArrayOutputStream();
            final GZIPOutputStream gzipOut = new GZIPOutputStream(baos);
            gzipOut.write(p.getBytes("UTF-8"));
            gzipOut.close();
            final byte[] gzippedEncodedJson = baos.toByteArray();
            method.setRequestEntity(new ByteArrayRequestEntity(gzippedEncodedJson, "application/json"));
            lastRequestEncoding = "gzip";
        } else {
            // otherwise plaintext:
            method.setRequestEntity(new StringRequestEntity(p, "application/json", "UTF-8"));
            lastRequestEncoding = "plaintext";
        }
        // independent of request-gzipping, we do accept the response to be gzipped,
        // so indicate this to the server:
        method.addRequestHeader("Accept-Encoding", "gzip");
        DefaultHttpMethodRetryHandler retryhandler = new DefaultHttpMethodRetryHandler(0, false);
        httpClient.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryhandler);
        httpClient.getHttpConnectionManager().getParams()
                .setConnectionTimeout(1000 * config.getConnectionTimeout());
        httpClient.getHttpConnectionManager().getParams().setSoTimeout(1000 * config.getSoTimeout());
        method.getParams().setSoTimeout(1000 * config.getSoTimeout());
        httpClient.executeMethod(method);
        if (logger.isDebugEnabled()) {
            logger.debug("ping: done. code=" + method.getStatusCode() + " - " + method.getStatusText());
        }
        lastStatusCode = method.getStatusCode();
        lastResponseEncoding = null;
        if (method.getStatusCode() == HttpServletResponse.SC_OK) {
            final Header contentEncoding = method.getResponseHeader("Content-Encoding");
            if (contentEncoding != null && contentEncoding.getValue() != null
                    && contentEncoding.getValue().contains("gzip")) {
                lastResponseEncoding = "gzip";
            } else {
                lastResponseEncoding = "plaintext";
            }
            String responseBody = requestValidator.decodeMessage(method); // limiting to 16MB, should be way enough
            if (logger.isDebugEnabled()) {
                logger.debug("ping: response body=" + responseBody);
            }
            if (responseBody != null && responseBody.length() > 0) {
                Announcement inheritedAnnouncement = Announcement.fromJSON(responseBody);
                final long backoffInterval = inheritedAnnouncement.getBackoffInterval();
                if (backoffInterval > 0) {
                    // then reset the backoffPeriodEnd:

                    /* minus 1 sec to avoid slipping the interval by a few millis */
                    this.backoffPeriodEnd = System.currentTimeMillis() + (1000 * backoffInterval) - 1000;
                    logger.debug("ping: servlet instructed to backoff: backoffInterval=" + backoffInterval
                            + ", resulting in period end of " + new Date(backoffPeriodEnd));
                } else {
                    logger.debug("ping: servlet did not instruct any backoff-ing at this stage");
                    this.backoffPeriodEnd = -1;
                }
                if (inheritedAnnouncement.isLoop()) {
                    if (logger.isDebugEnabled()) {
                        logger.debug(
                                "ping: connector response indicated a loop detected. not registering this announcement from "
                                        + inheritedAnnouncement.getOwnerId());
                    }
                    if (inheritedAnnouncement.getOwnerId().equals(clusterViewService.getSlingId())) {
                        // SLING-3316 : local-loop detected. Check config to see if we should stop this connector

                        if (config.isAutoStopLocalLoopEnabled()) {
                            inheritedAnnouncement = null; // results in connected -> false and representsloop -> true
                            autoStopped = true; // results in isAutoStopped -> true
                        }
                    }
                } else {
                    inheritedAnnouncement.setInherited(true);
                    if (announcementRegistry.registerAnnouncement(inheritedAnnouncement) == -1) {
                        if (logger.isDebugEnabled()) {
                            logger.debug(
                                    "ping: connector response is from an instance which I already see in my topology"
                                            + inheritedAnnouncement);
                        }
                        statusDetails = "receiving side is seeing me via another path (connector or cluster) already (loop)";
                        return;
                    }
                }
                resultingAnnouncement = inheritedAnnouncement;
                statusDetails = null;
            } else {
                statusDetails = "no response body received";
            }
        } else {
            statusDetails = "got HTTP Status-Code: " + lastStatusCode;
        }
        // SLING-2882 : reset suppressPingWarnings_ flag in success case
        suppressPingWarnings_ = false;
    } catch (URIException e) {
        logger.warn("ping: Got URIException: " + e + ", uri=" + uri);
        statusDetails = e.toString();
    } catch (IOException e) {
        // SLING-2882 : set/check the suppressPingWarnings_ flag
        if (suppressPingWarnings_) {
            if (logger.isDebugEnabled()) {
                logger.debug("ping: got IOException: " + e + ", uri=" + uri);
            }
        } else {
            suppressPingWarnings_ = true;
            logger.warn("ping: got IOException [suppressing further warns]: " + e + ", uri=" + uri);
        }
        statusDetails = e.toString();
    } catch (JSONException e) {
        logger.warn("ping: got JSONException: " + e);
        statusDetails = e.toString();
    } catch (RuntimeException re) {
        logger.warn("ping: got RuntimeException: " + re, re);
        statusDetails = re.toString();
    } finally {
        method.releaseConnection();
        lastInheritedAnnouncement = resultingAnnouncement;
        lastPingedAt = System.currentTimeMillis();
    }
}

From source file:org.apache.sling.discovery.impl.topology.connector.TopologyRequestValidatorTest.java

@Test
public void testTrustRequest() throws IOException {
    final PutMethod method = new PutMethod("/TestUri");
    String clearMessage = "TestMessage";
    final String message = topologyRequestValidator.encodeMessage(clearMessage);
    Assert.assertNotNull(message);//from   w w  w  . j a v a2s.  c  o m
    Assert.assertNotEquals(message, clearMessage);
    topologyRequestValidator.trustMessage(method, message);

    Assert.assertNotNull(method.getRequestHeader(TopologyRequestValidator.HASH_HEADER));
    Assert.assertNotNull(method.getRequestHeader(TopologyRequestValidator.HASH_HEADER).getValue());
    Assert.assertTrue(method.getRequestHeader(TopologyRequestValidator.HASH_HEADER).getValue().length() > 0);
    Assert.assertNotNull(method.getRequestHeader(TopologyRequestValidator.SIG_HEADER));
    Assert.assertNotNull(method.getRequestHeader(TopologyRequestValidator.SIG_HEADER).getValue());
    Assert.assertTrue(method.getRequestHeader(TopologyRequestValidator.SIG_HEADER).getValue().length() > 0);
    final HttpServletRequest request = context.mock(HttpServletRequest.class);
    context.checking(new Expectations() {
        {
            allowing(request).getHeader(with(TopologyRequestValidator.HASH_HEADER));
            will(returnValue(method.getRequestHeader(TopologyRequestValidator.HASH_HEADER).getValue()));

            allowing(request).getHeader(with(TopologyRequestValidator.SIG_HEADER));
            will(returnValue(method.getRequestHeader(TopologyRequestValidator.SIG_HEADER).getValue()));

            allowing(request).getHeader(with("Content-Encoding"));
            will(returnValue(""));

            allowing(request).getRequestURI();
            will(returnValue(method.getPath()));

            allowing(request).getReader();
            will(returnValue(new BufferedReader(new StringReader(message))));
        }
    });

    Assert.assertTrue(topologyRequestValidator.isTrusted(request));
    Assert.assertEquals(clearMessage, topologyRequestValidator.decodeMessage(request));
}

From source file:org.apache.sling.launchpad.webapp.integrationtest.servlets.resolution.PutMethodServletTest.java

public void testPutMethodServletSpecificRT() throws Exception {
    final PutMethod put = new PutMethod(testNodeRT.nodeUrl);
    final int status = httpClient.executeMethod(put);
    assertEquals("PUT to testNodeRT should return 200", 200, status);
    final String content = put.getResponseBodyAsString();
    assertServlet(content, PUT_SERVLET_SUFFIX);
}

From source file:org.apache.sling.launchpad.webapp.integrationtest.servlets.resolution.PutMethodServletTest.java

public void testPutMethodServletDefaultRT() throws Exception {
    final PutMethod put = new PutMethod(testNodeNORT.nodeUrl);
    final int status = httpClient.executeMethod(put);
    assertFalse("PUT to testNodeRT should not return 200", 200 == status);
}

From source file:org.apache.sling.maven.bundlesupport.AbstractBundleInstallMojo.java

private int performPut(String targetURL, File file) throws HttpException, IOException {
    PutMethod filePut = new PutMethod(getURLWithFilename(targetURL, file.getName()));
    try {// w w  w . ja  va2  s  .  c  o  m
        filePut.setRequestEntity(new FileRequestEntity(file, mimeType));
        return getHttpClient().executeMethod(filePut);
    } finally {
        filePut.releaseConnection();
    }
}

From source file:org.apache.webdav.ant.Utils.java

public static void putFile(HttpClient client, HttpURL url, InputStream is, String contentType, String lockToken)
        throws IOException, HttpException {
    PutMethod put = new PutMethod(url.getEscapedURI());
    generateIfHeader(put, lockToken);//from  ww  w. ja  va2  s .  c o  m
    put.setRequestHeader("Content-Type", contentType);
    put.setRequestBody(is);
    put.setFollowRedirects(true);
    int status = client.executeMethod(put);
    switch (status) {
    case WebdavStatus.SC_OK:
    case WebdavStatus.SC_CREATED:
    case WebdavStatus.SC_NO_CONTENT:
        return;
    default:
        HttpException ex = new HttpException();
        ex.setReason(put.getStatusText());
        ex.setReasonCode(status);
        throw ex;
    }
}

From source file:org.apache.webdav.lib.WebdavResource.java

/**
 * Execute the PUT method for the given path.
 *
 * @param path the server relative path to put the data
 * @param data The byte array.// w w  w.j av a 2  s.co m
 * @return true if the method is succeeded.
 * @exception HttpException
 * @exception IOException
 */
public boolean putMethod(String path, byte[] data) throws HttpException, IOException {

    setClient();
    PutMethod method = new PutMethod(URIUtil.encodePathQuery(path));
    generateIfHeader(method);
    if (getGetContentType() != null && !getGetContentType().equals(""))
        method.setRequestHeader("Content-Type", getGetContentType());

    method.setRequestHeader("Content-Length", String.valueOf(data.length));
    method.setRequestBody(new ByteArrayInputStream(data));

    generateTransactionHeader(method);
    generateAdditionalHeaders(method);
    int statusCode = client.executeMethod(method);

    setStatusCode(statusCode);
    return (statusCode >= 200 && statusCode < 300) ? true : false;
}