Hi wildarmss,
I've successfully uploaded a document with a restlet.
here is my java client:
----------------------------------------------------------------------
import org.restlet.Client;
import org.restlet.data.ChallengeResponse;
import org.restlet.data.ChallengeScheme;
import org.restlet.data.MediaType;
import org.restlet.data.Method;
import org.restlet.data.Protocol;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.resource.FileRepresentation;
import org.restlet.resource.Representation;
public class UploadClient {
public static void main(String[] args) {
Client client = new Client(Protocol.HTTP);
Request request = new Request(Method.POST,
"http://localhost:8080/nuxeo/restAPI/default/6e7a8b99-45e4-444b-82c6-601774984c53/reunion20080925.pdf/upload");
Representation representation = new
FileRepresentation("c:\\reunion20080925.pdf", MediaType.APPLICATION_PDF,10);
request.setEntity(representation);
ChallengeResponse challengeResponse = new ChallengeResponse(
ChallengeScheme.HTTP_BASIC, "Administrator", "Administrator");
request.setChallengeResponse(challengeResponse);
Response response = client.handle(request);
System.out.println(response.getStatus());
}
}
-----------------------------------------------------------------------------------
Here is my upload restlet:
-----------------------------------------------------------------------------------
package com.mypackage;
import static org.jboss.seam.ScopeType.EVENT;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.dom4j.Element;
import org.dom4j.dom.DOMDocument;
import org.dom4j.dom.DOMDocumentFactory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.nuxeo.common.utils.FileUtils;
import org.nuxeo.ecm.core.api.ClientException;
import org.nuxeo.ecm.core.api.CoreSession;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.IdRef;
import org.nuxeo.ecm.platform.ui.web.api.NavigationContext;
import org.nuxeo.ecm.platform.ui.web.api.SimpleFileManager;
import org.nuxeo.ecm.platform.util.RepositoryLocation;
import org.restlet.data.MediaType;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.ext.fileupload.RestletFileUpload;
import org.restlet.resource.Representation;
import org.nuxeo.ecm.platform.ui.web.restAPI.BaseNuxeoRestlet;
@Name("uploadMyDocument")
@Scope(EVENT)
public class UploadMyDocument extends BaseNuxeoRestlet {
@In(create = true)
protected NavigationContext navigationContext;
protected CoreSession documentManager;
@In(create = true)
protected SimpleFileManager FileManageActions;
@Override
public void handle(Request req, Response res) {
String repo = (String) req.getAttributes().get("repo");
String docid = (String) req.getAttributes().get("docid");
String fileName = (String) req.getAttributes().get("filename");
DOMDocumentFactory domfactory = new DOMDocumentFactory();
DOMDocument result = (DOMDocument) domfactory.createDocument();
DocumentModel dm;
try {
navigationContext.setCurrentServerLocation(new RepositoryLocation(
repo));
documentManager = navigationContext.getOrCreateDocumentManager();
dm = documentManager.getDocument(new IdRef(docid));
} catch (ClientException e) {
handleError(res, e);
return;
}
if (dm != null) {
Representation repr = req.getEntity();
RestletFileUpload fu = new RestletFileUpload();
List<FileItem> fiList = null;
try {
fiList = fu.parseRequest(req);
} catch (FileUploadException e) {
// handleError(res, e);
// return;
// XXX : this fails for requests not sent via browser
}
if (fiList == null) {
// mono import
try {
InputStream input = repr.getStream();
MediaType mediaType = repr.getMediaType();
String mimeType = mediaType.getName();
byte[] content = FileUtils.readBytes(input);
try {
String returnCode = FileManageActions.addBinaryFile(
content, mimeType, fileName, new IdRef(docid));
Element upload = result.addElement("upload");
upload.setText(returnCode);
result.setRootElement(upload);
} catch (ClientException e) {
handleError(res, e);
return;
}
//
} catch (IOException e) {
handleError(res, e);
return;
}
} else {
// multiple file upload
Element uploads = result.addElement("uploads");
result.setRootElement(uploads);
for (FileItem fileItem : fiList) {
Element upload = result.addElement("upload");
((org.w3c.dom.Element)
uploads).appendChild((org.w3c.dom.Element) upload);
fileName = fileItem.getName();
String mimeType = fileItem.getContentType();
byte[] content;
try {
content =
FileUtils.readBytes(fileItem.getInputStream());
} catch (IOException e) {
upload.setText("ERROR : " + e.getMessage());
continue;
}
try {
String returnCode = FileManageActions.addBinaryFile(
content, mimeType, fileName, new IdRef(docid));
upload.setText(returnCode);
} catch (ClientException e) {
upload.setText("ERROR : " + e.getMessage());
continue;
}
}
}
}
res.setEntity(result.asXML(), MediaType.TEXT_XML);
}
}
---------------------------------------------------------------
Here is my OSGI-INF/restlets-contrib.xml file :
---------------------------------------------------------------
<?xml version="1.0"?>
<component name="org.nuxeo.ecm.platform.ui.web.restAPI.ebee">
<extension
target="org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService"
point="restlets">
<restletPlugin name="uploadMyDocument"
class="com.mypackage.UploadMyDocument" enabled="true"
useSeam="true">
<urlPatterns>
<urlPattern>/{repo}/{docid}/{filename}/upload
</urlPattern>
</urlPatterns>
</restletPlugin>
</extension>
</component>
-----------------------------------------------------------
Here is the enf of my MANIFEST.MF file:
---------------------------------------------------------------
Nuxeo-Component: OSGI-INF/theme-contrib.xml,
OSGI-INF/event-listener-contrib.xml,OSGI-INF/restlets-contrib.xml
---------------------------------------------------------------
Hope this help you.
Regards,
Xavier.
_______________________________________________
ECM mailing list
[email protected]
http://lists.nuxeo.com/mailman/listinfo/ecm