Summary:
Using java to post a multipart form with values of "jcr:primaryType" set to
"nt:unstructured" fails, curl to same address succeeds.
Details:
I'm using httpcomponent/httpclient to send submit a form to sling.
To do this I'm creating a multi-part form, with the fields being sent using
code like this:
public String insertWithAuth(String userId, String password,String url,
List<BasicNameValuePair> slingData) {
String retValue = null;
HttpPost post = new HttpPost(url);
BasicNameValuePair[] pairs = new BasicNameValuePair[slingData.size()];
pairs = slingData.toArray(pairs);
try {
MultipartEntity anEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
for(BasicNameValuePair entry : pairs)
{
anEntity.addPart(entry.getName(), new
StringBody(entry.getName(),Charset.forName("UTF-8")));
}
post.setEntity(anEntity);
HttpResponse theResponse = client.execute(targetHost, post,
localContext);
I've left out the declarations for targetHost and localContent I don't think
they are significant.
The List of BasicNameValuePairs is created based on the contents of the entity
that's being posted.
If I don't do anything but set my own values, based on the object I'm trying to
insert everything works fine.
The document ends up with this property:
"jcr:primaryType":"sling:Folder"
However, when I try to set the jcr:primary value with the following code:
key = "jcr:primaryType";
value = "nt:unstructured";
entry = new BasicNameValuePair(key,value);
retValue.add(entry);
return (retValue);
I always get this error message:
Status
500
Message
javax.jcr.nodetype.NoSuchNodeTypeException:
{http://www.jcp.org/jcr/1.0}primaryType
Using Curl to set that value works just fine:
curl -F"sling:resourceType=foo/bar" -F"jcr:primaryType=nt:unstructured"
-F"userId=jsmith"
http://admin:ad...@localhost:8080/sling/content/Documents/users/jsmith
{"sling:resourceType":"foo/bar","userId":"jsmith","jcr:primaryType":"nt:unstructured"}