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;
}
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));
}
}
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();
}
}
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();
}
}
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();
}
}
Aggregations